IASetVertexBuffers学習とIASetIndexBufferのd3d11



D3d11 Iasetvertexbuffers Learning



IASetVertexBuffersが複数の頂点バッファを設定でき、IASetIndexBufferが1つのインデックスバッファしか設定できない理由を理解する前に、どのように対応することができますか?

レンダリングされた複数のオブジェクトを読み取る3dsファイルから、この2日間で、この頂点を配列内のオブジェクトごとにバッファに格納できると思います。次に、バッファがIASetVertexBuffersキャッシュを使用して頂点配列に設定され、各スロットが設定されます。頂点バッファ。結果を設定した後、IASetIndexBufferは対応するインデックス配列しか設定できないため、インデックスバッファは設定方法を知りませんでした。



したがって、情報を見つけるための長い旅が始まりました。もともと、私は最初からバッファ内のIASetVertexBuffersを間違って理解しています。これは、各オブジェクトの頂点データをバッファリングすることを意味するのではなく、各スロットへのバッファ入力として頂点構造の各コンポーネントに対して、すべてのバッファを合わせて、の完全な頂点データのみを表します。オブジェクト。例えば:

オブジェクトの頂点構造:



struct vertex{ XMFLOAT3 pos XMFLOAT3 color }

頂点構造のInputLayoutの作成:

D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { {'POSITION', 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {'COLOR', 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0} }

ここで、4番目のパラメータは入力スロットを表し、スロット位置と2つのカラー入力を示します。

次に、配列に続くバッファーを作成します。ID3D11Buffer* buf [2]各カラーコンポーネントとオブジェクトのバッファー配列への位置、ストライド[2]とオフセット[2]を指定し、最後にIASetVertexBuffersレンダリングを使用した2つのバッファー関数呼び出しto:md3dDevicContext-> IASetVertexBuffers(0,2、buf、strides、offsets)ここで、最初のパラメーターは開始スロットを表し、2番目のパラメーターは配列の頂点の数を示します。インデックスバッファを変更する必要はありません。