9

私は何ヶ月もの間、その方法IDirect3DVertexBuffer9IDirect3DIndexBuffer9働きを学ぶことを試みてきました。私は複数の本、電子書籍、フォーラムを読んだことがありますが、それらがどのように機能するかを理解することはできません。誰かが私がそれらがどのように機能し、どのように相互にリンクするかを理解するのを手伝ってもらえますか?

PS:関連する質問を検索してみましたが、何も興味がありませんでした。

ありがとう。

4

2 に答える 2

21

これも最初は混乱しました。これについて考える別の方法は視覚的です(私は大きな視覚的思想家なので、おそらくこれもあなたを助けるでしょう)。

zezbaの例を拡張して、2つの三角形を使用してクワッドを描画するとします。

クワッド

彼/彼が指摘したように、これはたった4つの頂点で行うことができます。したがって、頂点バッファには4つのエントリのみが含まれます。これらに{A、B、C、D}というラベルを付けます。

頂点を持つクワッド:A、B、C、D

ただし、グラフィックプロセッサは三角形を処理するため、3つの頂点のグループを定義して、すでに定義されている頂点のリストから三角形を作成する方法をGPUに指示する必要があります。これがインデックスバッファの目的です。

インデックスバッファは、三角形を定義する頂点バッファへのインデックスのリストと単純に考えることができます。したがって、2つの三角形を形成しており、各三角形には3つの頂点が必要であるため、インデックスバッファには6つのエントリが必要になります。

ここでも注文が少し重要です。これについてはあまり詳しく説明しませんが、三角形を反時計回りに定義したいとします。2つの三角形を{B、A、C}{B、C、D}として定義します。複数の三角形に頂点を再利用することはまったく問題ありません。

したがって、私のバッファは次のようになります。

頂点バッファとインデックスバッファを備えたクワッド

お役に立てれば。

于 2011-02-07T13:23:10.203 に答える
7

IndexBuffersは、メモリと速度の最適化に使用されます。indexBufferは、vertexBuffer内の頂点にインデックスを付けるインデックスのリストです。

つまり、2つの三角形を使用して画面にフラットクワッドをレンダリングするとします。各三角形は3つの頂点を占めるため、VertexBufferだけでクワッドをレンダリングするには、6つの頂点が必要になります。

ただし、IndexBufferを使用する場合は、4つの頂点(クワッドの各コーナーに1つ)を使用するだけで済みます。ただし、コーナー頂点の1つにインデックスを付けるには、三角形ごとに3つのインデックスを含む6つのインデックスが必要になります。

大規模なモデルでは、GPUが処理する頂点が少なくなるため、メモリを節約し、速度を大幅に向上させることができます。

ここにいくつかの良いサンプルコードがあるサイトがあります:: http: //www.codesampler.com/dx9src.htm そこに「IndexedGeometry」と呼ばれるサンプルをダウンロードします。

于 2011-02-03T16:15:12.277 に答える