私は、Python ラッパー PyOpenGL を使用して OpenGL プログラミングを独学で学んでおり、現在、それを使用した最初のプロジェクトに取り組んでいます。このプロジェクトは、多数の独立して移動し、独立して色付けされた立方体を使用する音楽ビジュアライザー (whitecap と似ていません) です。
私の現在の方法は、1 つの立方体の表示リストを作成し、glColor と glTranslatef を使用して色と位置を繰り返し変更するように呼び出すことです (疑似コード):
glPushMatrix()
glPushMatrix() #Why do I need to call this twice?
for x in xrange(...):
for z in xrange(...):
y = height[x,z] #numpy array
glTranslatef(x,y,z)
glColor((r,g,b))
glCallList(cube)
glTranslatef(-x,-y,-z)
glPopMatrix()
glPopMatrix()
このようにして、フレームレートに気づき始める前に約 10,000 個のキューブをレンダリングできます。これは問題ありませんが、より高速にして、プログラムが能力の低いコンピューターに移植できるようにしたいので、私の質問は次のとおりです。
多数の同一だが独立したオブジェクトをレンダリングする最も効率的な方法は何ですか?また、現在表示リストを使用している場合よりもはるかに優れたパフォーマンスが得られますか? C を使用するか、頂点バッファリングを学習する必要がありますか?
注: エラー チェックを無効にすると、パフォーマンスが大幅に向上することがわかりました。