5

したがって、OpenGLレンダリングアプリケーションでは、通常、アプリケーションの存続期間を通じて頂点バッファーを作成して維持し、フレームごとにデータをglBufferDataと交換する方がよいのでしょうか、それともVBOを削除してフレームごとに再作成する方がよいのでしょうか。

直感的にはデータを交換する方が良いと言われていますが、私が見たいくつかのサンプルプログラムは後者を行っているので、ちょっと混乱しています。

私はVBOに関するNvidiaのホワイトペーパーを読みましたが、私はopenglの初心者なので、あまり意味がありませんでした。

よろしくお願いします

4

2 に答える 2

5

フレームごとにまったく新しいデータセットを生成しているので、ドキュメントはそれGL_STREAM_DRAWが物事を進める正しい方法であることを示しているようです。

于 2010-07-30T21:51:23.493 に答える
0

VBOの重要な点は、VBOが、コンピューターのメインメモリではなく、グラフィックメモリに格納されるレンダリングデータバッファーであるということです。これにより、データが(あまりにも)頻繁に更新されていない場合に非常に効率的に使用できます。これは、更新するたびに、コンピューターがメインメモリからグラフィックメモリに(場合によっては大量の)データを転送する必要があるためです。これは低速です。 。

したがって、理想的なケースは、必要なすべてのレンダリングデータを一度VBOに入れてから、マトリックス変換などのOpenGL関数またはシェーダーを介してのみそれらを操作することです。

したがって、たとえば、各メッシュのワールド空間座標とテクスチャ座標をVBOに配置し、それらに直接触れることはありません。モデルビューマトリックス、ライティング関数、シェーダーを使用してレンダリングします。

VBOの使用を最適化するためにさらに多くのことを行うことができますが、私が理解しているように、それが基本です。

ここでいくつかの良いヒントと詳細を見つけてください:OpenGL 3.x VBOを使用して動的な世界をレンダリングするにはどうすればよいですか?

于 2010-08-04T23:37:47.657 に答える