如何在pyglet中使用顶点列表?

时间:2012-03-06 01:41:40

标签: pyglet

我正在创建一个可以在Pyglet中生成多个对象的脚本。在这个例子中(见下面的链接),3d空间中有两个金字塔,但每个框架中都会重新计算每个三角形。我的目标是制作一个有大量金字塔飞来飞去的群体,但我似乎无法弄清楚如何批量实现顶点列表。 (假设这是最快的方法)。

他们需要被编入索引吗? (batch.add_indexed(...))

标准似乎是:

batch1  = pyglet.graphics.Batch()

然后将顶点添加到batch1。最后:

def on_draw():
   batch1.draw()

那么如何进行中间步骤,将金字塔添加到顶点列表中?最后一个问题:您何时建议使用多批次?

谢谢! apfz

http://www.2shared.com/file/iXq7AOvg/pyramid_move.html

1 个答案:

答案 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.