python 在Pyglet中使用GL_TRIANGLES渲染多边形- KeyError 'v'错误

v09wglhw  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(137)

我尝试使用GL_TRIANGLES模式为pyglet.graphics.draw渲染一个多边形,但遇到了问题。
我一直在尝试像我在其他地方看到的人们那样渲染它

def draw(self):
    pyglet.graphics.draw(
       size=int(len(self.coords) / 2), 
       mode=pyglet.gl.GL_TRIANGLES,
       position=('v2f', self.coords),
    )

但是遇到了以下错误:

File "C:\Python311\Lib\site-packages\pyglet\graphics\__init__.py", line 52, in draw
    gl_type = vertexdomain._gl_types[fmt[0]]
              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
KeyError: 'v'

用法是否发生变化?不知道我到底哪里做错了。

yr9zkbsy

yr9zkbsy1#

v2f是旧的格式规范。在Pyglet 2.0版本中,这一点已经改变。参见draw(size, mode, **data)的文档。第一个参数是顶点的数量,每个顶点必须有3个组件。浮点数的格式是f。例如:

self.coords = [x0, y0, z0, x1, y1, z1, ...]
pyglet.graphics.draw(
    size = len(self.coords) // 3,
    mode = pyglet.gl.GL_TRIANGLES,
    position = ('f', self.coords)
)

请注意,这将只绘制黑色三角形。设置colors属性以绘制彩色形状。
最小示例:

import pyglet

window = pyglet.window.Window(800, 600)

vertices = [100, 100, 0, 300, 100, 0, 200, 300, 0]
colors = [255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255]

@window.event
def on_draw():
    window.clear()
    pyglet.graphics.draw(
        size = 3, 
        mode = pyglet.gl.GL_TRIANGLES, 
        position = ('f', vertices),
        colors = ('Bn', colors))
    
pyglet.app.run()

相关问题