2

メッシュやテクスチャなどをモデル クラスにロードするときに、これについてしばらく疑問に思っていましたが、何を保持していますか? glDrawArrays() への呼び出しは最後の glBindBuffer() に依存するため、頂点が glBufferData() で渡されたら、もう必要ないと思います。これは、loadModel() メソッドが呼び出された後に Model クラスが保持するすべてです。

GLuint vboID;//for... something
GLuint vaoID;//for  glBindVertexArray(vaoID);
GLuint textureID;//for glBindTexture(GL_TEXTRUE2D, textureID);
GLuint vboElementCount;//for glDrawArrays(GL_TRIANGLES,0,vboElementCount);

私が言えることから、モデルをレンダリングするために必要なのはそれだけです。それ以外に、単純なモデルのために他に何を保持する必要がありますか?

編集:誰かが位置回転スケールとあなたに何を持っているかについて言及する前に、それらのマトリックスを含むModelInstanceクラスがあり、モデルオブジェクトへのポインターを渡して、同じモデルの複数のインスタンスを持つことができます.

4

1 に答える 1

1

私は保ちます

  • VBO ID が必要なので、VBO が不要になったら削除できます。
  • VAO id であるため、描画する前にバインドし、最終的には削除できます。
  • 渡すインデックスの数glDrawElements()
  • 必要なすべてのテクスチャの ID。
  • マテリアルと変換のプロパティ (一般的なユニフォーム)。

メッシュが静的である限り、これは正常に機能します。CPU でメッシュを操作したい場合、たとえばメッシュをスムーズにしたり分割したりしたい場合は、すぐにメイン メモリにコピーを保持する必要があります。たとえば、オクルージョン カリングなどのより特殊なレンダリング手法のために、低解像度のプレースホルダーを保持したい場合もあります。ただし、これは特殊なケースです。あなたの質問には、基本的なレンダリングに必要なすべてがリストされています

注:への切り替えを検討する必要がありますglDrawElements()。これにより、保存および転送する必要がある頂点データの量が削減されます。

于 2013-09-11T08:04:01.863 に答える