我正在创建一个可以在Pyglet中生成多个对象的脚本。在这个例子中(见下面的链接),3d空间中有两个金字塔,但每个框架中都会重新计算每个三角形。我的目标是制作一个有大量金字塔飞来飞去的群体,但我似乎无法弄清楚如何批量实现顶点列表。 (假设这是最快的方法)。
他们需要被编入索引吗? (batch.add_indexed(...))
标准似乎是:
batch1 = pyglet.graphics.Batch()
然后将顶点添加到batch1。最后:
def on_draw():
batch1.draw()
那么如何进行中间步骤,将金字塔添加到顶点列表中?最后一个问题:您何时建议使用多批次?
谢谢! apfz
答案 0 :(得分:1)
只需查看pyglet.sprite.Sprite._create_vertex_list即可获得灵感。在那里,生成简单精灵(QUADS)的顶点并将其添加到批处理中。
def _create_vertex_list(self):
if self._subpixel:
vertex_format = 'v2f/%s' % self._usage
else:
vertex_format = 'v2i/%s' % self._usage
if self._batch is None:
self._vertex_list = graphics.vertex_list(4,
vertex_format,
'c4B', ('t3f', self._texture.tex_coords))
else:
self._vertex_list = self._batch.add(4, GL_QUADS, self._group,
vertex_format,
'c4B', ('t3f', self._texture.tex_coords))
self._update_position()
self._update_color()
所以所需的函数是Batch.add(vertex_list)。如果您的金字塔改变了它的位置而不是每次绘制调用,则只应重新计算顶点。您需要将v3f用于3D坐标,而不是v2f,当然您需要GL_TRIANGLES而不是GL_QUADS。 Here is an example of a torus rendered with pyglet.