Просто посмотрите на 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.