2

我正在制作一个可以在 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

4

1 回答 1

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 而不是 v2f 来获取 3D 坐标,当然您需要 GL_TRIANGLES 而不是 GL_QUADS。这是一个用 pyglet 渲染的圆环的例子。

于 2014-05-30T08:54:53.063 回答