2009-10-13 3 views

答えて

5

複数のメッシュを1つの頂点バッファに格納することができます。いくつかの小さなメッシュを1つのバッファに入れることで、ある程度のパフォーマンスを得ることができます。非常に大きなメッシュの場合は、別々のバッファを使用する必要があります。 SetStreamSourceでは、現在のメッシュの頂点バッファオフセットを指定できます。

pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride()); 
-2

OpenGLを使用すると、glVertexPointer()を使用して、VBO内の特定のオフセットから描画を開始できます。 D3Dについてはわからない

2

TBH一般に、それらをすべて1つの大きなバッファに入れる理由は、描画呼び出しを保存することです。頂点バッファを切り替えるコストは、ごくわずかです。 1つの頂点バッファにそれらをすべてマージして、1つの描画呼び出しで10個のオブジェクトをレンダリングすることができれば、大きな勝利を得ることができます。

通常、それらをマージするには、すでにワールドが変換されているすべての頂点データを順番に1つの大きな頂点バッファを作成します。それらを次々とレンダリングするインデックスバッファを設定します。その後、最小限の描画呼び出しですべての描画を行います。もちろん、静的ジオメトリにとって理想的な理由である頂点バッファの一部を更新する必要があるものを移動する場合は、

すべてのオブジェクトが同じ場合、1つの頂点バッファ(1つのオブジェクト定義あり)と1つのインデックスバッファのみが使用されます。行列はオブジェクトを移動またはアニメーション化します...

すべてのオブジェクトが異なっていて移動/アニメーション化されている場合は、個々のVBを使用してください。私はあなたがそれらをすべて一緒にマージすることによってどんな違いに気づくのか疑いがない。

0

私の経験では、あなたのバッファーが本当に小さいか本当に巨大でない限り、それほど大きな違いはありません。私は、バッファを切り替える際の非効率性は、ドライバがより小さなバッファでメモリを管理するためのより多くの操作を与えることによって、効率の向上と一致すると考えている。

関連する問題