2

Pyglet で複数のオブジェクトを生成できるスクリプトを作成しています。この例 (以下のリンクを参照) では、3D 空間に 2 つのピラミッドがありますが、すべての三角形がすべてのフレームで再計算されます。私の目的は、多数のピラミッドが飛び交う群れを作ることですが、頂点リストをバッチで実装する方法がわかりません。(これが最速の方法であると仮定します)。

たとえば、インデックスを作成する必要がありますか? (batch.add_indexed(...) )

標準は次のようです。

batch1  = pyglet.graphics.Batch()

次に、頂点をバッチ 1 に追加します。そして最後に:

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) です。描画呼び出しごとではなく、ピラミッドの位置が変更された場合にのみ、頂点を再計算する必要があります。v2f の代わりに v3f を 3D 座標に使用する必要があり、もちろん GL_QUADS の代わりに GL_TRIANGLES が必要です。これは、pyglet でレンダリングされたトーラスの例です。

于 2014-05-30T08:54:53.063 に答える