Как использовать список вершин в Pyglet? - PullRequest
2 голосов
/ 06 марта 2012

Я делаю скрипт, который может генерировать несколько объектов в Pyglet. В этом примере (см. Ссылку ниже) в трехмерном пространстве есть две пирамиды, но каждый треугольник пересчитывается в каждом кадре. Моя цель - создать рой с большим количеством пирамид вокруг, но я не могу понять, как реализовать списки вершин в пакете. (при условии, что это самый быстрый способ сделать это).

Например, нужно ли их индексировать? (batch.add_indexed (...))

Стандарт выглядит так:

batch1  = pyglet.graphics.Batch()

затем добавьте вершины в пакет 1. и наконец:

def on_draw():
   batch1.draw()

Так как сделать промежуточный шаг, когда пирамиды добавляются в списки вершин? Последний вопрос: когда вы предлагаете использовать несколько партий?

Спасибо! apfz

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

1 Ответ

1 голос
/ 30 мая 2014

Просто посмотрите на 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).Ваши вершины должны пересчитываться только в том случае, если ваша пирамида меняет свое положение, а не при каждом вызове отрисовки.Вместо v2f вам нужно использовать v3f для 3D-координат и, конечно, вам нужно GL_TRIANGLES вместо GL_QUADS. Вот пример тора, представленного с помощью pyglet.

...