2017-11-11 13 views
0

複数のキューブを描画する必要があります(データに応じて、6kから極端な場合は11kオブジェクトまで)。OpenGLで一定のジオメトリを管理し、色を効率的に変更する方法は?

キューブはアニメーション中に変更されない固定位置を持ちますが、色はフレームごとに変わります。ジオメトリを一度描画してから、色を再描画することは可能ですが、どのように効率的にその方法を実現できるのでしょうか?

また、私は初心者ですから、OpenGLについての基本的な知識しかありません。 (PyOpenGLの使用を前提とした)ベストプラクティスは何ですか?

+0

[glBufferData](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glBufferData.xml)のドキュメントを見て、*使用法の余分な段落をよくお読みください*パラメータ。ポジションや色を変えてバッファを作成すると、静的なものと動的なものの両方にフラグを立てることができます。ただし、パフォーマンスが改善される場合はドライバの実装に任せられますので、購入前に試してみてください。 – BeyelerStudios

+0

ありがとうございますが、次にglBufferDataを更新する最適な方法は何ですか?それを毎回呼び、フレームの変更に応じて別の色のセットに戻しますか? – LemurPwned

+0

すべての色がyesに変わったら、 'glBufferData'がおそらく最適な方法でしょう。それ以外の場合は、ドキュメントの**参照**セクションを参照してください。最適なものは、ドライバーによって劇的に変化する可能性があります。 – BeyelerStudios

答えて

0

私は特にpyOpenGLの経験はありませんが、私はwebGLとOpenGLで十分な経験がありますので、これが参考になることを願っています。

描画ジオメトリを一度作成してから色を描画するだけでは、ポジション用のバッファと色用のバッファが1つしかなく、色を変更するだけでよいということを完全にはわかりません。もしそうなら、私はそれが可能だとは思わない。なぜなら、OpenGLは一度に一つの頂点属性バッファしか扱えないと思うからだ。

これを行う最も良い方法は、ダイナミックバッファが頻繁にアクセスされることを想定しているため、すべてのキューブを同じバッファに入れて描画呼び出しを減らし、バッファの使用量をGL_DYNAMIC_DRAWに設定することです。次に、色を変更するときに、位置と色の両方のデータをこのバッファに更新します。

こちらがお役に立てば幸いです。

+0

異なる頂点オブジェクトバッファ(アトリビュート)を異なる頂点配列オブジェクトまたは要素描画呼び出しに異なるヒントを付けることができます。異なるシェーダーやレンダリングパスを使用して、異なるジオメトリを使用して同じジオメトリを共有しましょう。 [glBindBuffer](https://www.khronos.org/opengl/wiki/GLAPI/glBindBuffer) – BeyelerStudios

+0

[チュートリアル2](https://www.khronos.org/opengl/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_ C _/_ SDL))には、2つのバッファを使用して頂点カラーでジオメトリを描画する方法の例があります。 – BeyelerStudios

+0

ああ、ありがとう!私はそれを認識していませんでした。私が取ったグラフィックス・クラスではこれまでにこれを行っていません。 – kylengelmann

関連する問題