4

ストライド頂点バッファーを使用する場合と、各属性にぎっしり詰まったバッファーを使用する場合の長所と短所は何ですか? 私が意味するのは、たとえば次のとおりです。

ストライド:xyzrgb xyzrgb xyzrgb

きつい:xyzxyzxyz rgbrgbrgb

一見、stride を使用すると簡単にサイズを変更できるように見えますが、 で再割り当てすると、頂点バッファーの内容が削除されますglBufferData()

位置、色、texcoords がローカル メモリ内の異なる配列から取得される可能性があり、ストライド バッファ データ関数がないため、タイトなモデルを使用するのが最善のように思えます。glBufferSubData()アップロードする前に、すべての配列をインターリーブ バッファにコピーするか、属性ごとに頂点ごとに 1つ使用する必要があります (ひどい考えだと思います)。

インターリーブ バッファ (ストライド) を使用する一般的な方法があるようです。何故ですか?ここに欠けているものはありますか?

4

1 に答える 1

6

インターリーブされたバッファを持つことは一般的だと思います。これは、作成が簡単で (バッファが少なく、より直感的)、おそらく高速である (メモリ アクセス パターンまたは同様のもののため) ためです。更新する必要があるデータのみを表示するため、更新が高速になります。ほとんどの OpenGL チュートリアルでは、静的メッシュを描画することによって VBO について説明しています。静的メッシュは更新を必要としないため、インターリーブされたデータの恩恵を受けます。

一般的な意見のようです: 可能な限りインターリーブし、必要に応じて分割します。

参照: インターリーブされた頂点の送信はパフォーマンスにどのように役立ちますか?

さらに: OpenGL4.0 でインターリーブされた属性配列を使用してパフォーマンスを向上

参照: http://www.opengl.org/wiki/Vertex_Specification_Best_Practices

直接述べているもの:

「インターリーブ属性がレンダリングのパフォーマンスにどの程度役立つかはよくわかっていません。プロファイリング データが必要です。インターリーブされた頂点データは、位置合わせの必要性により、インターリーブされていないものよりも多くのスペースを占める場合があります。」

于 2013-07-15T19:35:56.440 に答える