我正在try 使用pyglet.graphics.drawGL_TRIANGLES模式渲染一个多边形,但遇到了问题.

我一直试图像我在许多其他地方看到的那样来呈现它

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'

用法有变化吗?不知道我到底做错了什么.

推荐答案

v2f是旧的格式规范.在Pyglet 2.0版中,这一点发生了变化.请参阅draw(size, mode, **data)的文档.第一个参数是顶点的数量,每个顶点必须有3个分量.Float的格式只有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()

Python相关问答推荐

使用mySQL的SQlalchemy过滤重叠时间段

Django管理面板显示字段最大长度而不是字段名称

将特定列信息移动到当前行下的新行

查找两极rame中组之间的所有差异

如何在图中标记平均点?

通过ManyToMany字段与Through在Django Admin中过滤

如何使用Numpy. stracards重新编写滚动和?

使用特定值作为引用替换数据框行上的值

lityter不让我输入左边的方括号,'

在单次扫描中创建列表

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

以异步方式填充Pandas 数据帧

如何获得3D点的平移和旋转,给定的点已经旋转?

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

操作布尔值的Series时出现索引问题

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

一维不匹配两个数组上的广义ufunc

使用xlsxWriter在EXCEL中为数据帧的各行上色

将鼠标悬停在海运`pairplot`的批注/高亮显示上

IpyWidget Select 框未打开