python - pyglet 绘制黑线而不是绿色像素的问题
问题描述
所以我是一个 Python 的初学者程序员,我一直在玩 pyglet,如果你运行这段代码,我发现了一个问题:
from pyglet.gl import *
window = pyglet.window.Window(1000,500,"App",resizable=True)
window.set_minimum_size(500,250)
image =pyglet.resource.image("logo.png")
intt = None
def pixel(x1,y1):
color = []
size = []
for x in range(x1):
for y in range(y1):
size.append(x)
size.append(y)
color.append(0)
color.append(255)
color.append(0)
vertex_list = pyglet.graphics.vertex_list(x1 * y1,('v2i', size ),
('c3B', color ))
return vertex_list
@window.event
def on_draw():
window.clear()
#vertex_list = pixel(600,500)
#vertex_list.draw(GL_POINTS)
color = []
size = []
for x in range(100):
for y in range(500):
size.append(x+504)
size.append(y)
color.append(0)
color.append(255)
color.append(0)
vertex_list = pyglet.graphics.vertex_list(100 * 500, ('v2i', size),
('c3B', color))
vertex_list.draw(GL_POINTS)
pyglet.app.run()
您会发现显示的区域中有黑线。我试图修复它,但它不起作用,因为 pyglet 不是很有名,所以没有描述这个问题的视频。我希望你知道如何解决它,因为你是我最后的希望。
解决方案
如果要绘制填充区域,则绘制矩形GL_POLYGON
图元而不是多个GL_POINT
图元。这将更快,并确保该区域被完全填满:
from pyglet.gl import *
window = pyglet.window.Window(1000,500,"App",resizable=True)
window.set_minimum_size(500,250)
def pixel(x1, y1, x2, y2):
size = [x1, y1, x2, y1, x2, y2, x1, y2]
color = []
for _ in range(4):
color += [0, 255, 0]
vertex_list = pyglet.graphics.vertex_list(4, ('v2i', size ), ('c3B', color ))
return vertex_list
@window.event
def on_draw():
window.clear()
vertex_list = pixel(500, 0, 600, 500)
vertex_list.draw(GL_POLYGON)
pyglet.app.run()
如果要绘制一个pyglet.image
,则生成一个纹理和一个pyglet.graphics.Batch
:
from pyglet.gl import *
window = pyglet.window.Window(1000,500,"App",resizable=True)
window.set_minimum_size(500,250)
def quadTexture(x, y, w, h, texture):
vertex = [x, y, x+w, y, x+w, y+h, x, y+h]
tex = [0, 0, 1, 0, 1, 1, 0, 1]
batch = pyglet.graphics.Batch()
batch.add(4, GL_QUADS, texture, ('v2i', vertex ), ('t2f', tex ))
return batch
@window.event
def on_draw():
window.clear()
batch.draw()
file = "logo.png"
image = pyglet.image.load(file)
tex = pyglet.graphics.TextureGroup(image.get_texture())
batch = quadTexture(20, 20, image.width, image.height, tex)
pyglet.app.run()
使用pyglet.sprite
. 例如:
from pyglet.gl import *
window = pyglet.window.Window(1000,500,"App",resizable=True)
window.set_minimum_size(500,250)
@window.event
def on_draw():
window.clear()
sprite.draw()
file = "logo.png"
image = pyglet.image.load(file)
sprite = pyglet.sprite.Sprite(image, x=20, y=20)
pyglet.app.run()
推荐阅读
- java - Android ViewModel 在配置更改时重新创建
- r - 如何绘制具有给定范围的公式?
- java - 使用 PDFBox 读取手写值
- php - Mac 无法删除 php 7.2
- django - 模型中的 Django 选择表
- c# - html.ActionLink():如果添加了类 Attribute,ViewController 将停止工作
- html - CSS中的响应边距
- firebase - 如何使用 firebasedynamiclinks 使用谷歌应用脚本获取谷歌驱动器文件的短链接?
- php - 当父母在一对多关系中没有孩子时,我在检查时收到非对象错误
- docker - docker中的vue pwa - 找不到模块'chalk'