は私がmpMesh用インデックスバッファを設定していない、あなたが見ることができるように、私はDESC次DirectX 10メッシュバッファが正しく配置されていませんか?波面objインデックスを計算するには?
D3D10_INPUT_ELEMENT_DESC defaultLayout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
};
r = D3DX10CreateMesh(Graphics()->GetDevice(),defaultLayout,4,
"POSITION",NumVerts(),12,D3DX10_MESH_32_BIT,
&mpMesh);
if(FAILED(r))
{
throw cGameError(L"Can not create mesh");
}
r= mpMesh->SetVertexData(0,&m_verts[0]);
if(FAILED(r))
{
throw cGameError(L"Can not Set VertexData");
}
//mpMesh->SetIndexData(&m_tris[0],m_tris.size()*3);
mpMesh->CommitToDevice();
として頂点データをロード
のDirectX 10に波面OBJモデルをレンダリングするためのプログラムを書きました。私は頂点インデックスを計算する方法を知らない。ご覧のとおり、私の頂点フォーマットにはノーマルが含まれています。つまり、同じ頂点の位置が異なる場合があります。例えば、キューブは36の頂点を含むが、8つの異なる位置のみを含む。波面objファイルは8つの位置インデックスのみを使用します。
プログラムは、実行時に次のエラーが発生し
DrawIndexed: Vertex Buffer Stride (15) at the input vertex slot 0 is not aligned properly. The current Input Layout imposes an alignment of (4) because of the Formats used with this slot.
EXECUTION ERROR #367: DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED
私はそれは、メッシュインデックスまたはその他の問題を設定していないことで原因のかどうかわかりません。コメントは大歓迎です。
ありがとうございます。
ありがとうございます。 Btw、それらの頂点のメッシュを作成するメリットがあるかどうかを知りたいですか?同じ頂点データで複数のオブジェクトを描画したい場合、メッシュの使用が高速であると聞きました。 – LNK2019
ID3DX10Mesh :: Optimize()コールを使用すると、大規模または複雑なモデルでパフォーマンスが大幅に向上します。メッシュを前処理として最適化しない限り(OBJを直接読んでいるのではないかもしれないが)、この呼び出しだけでID3DX10Meshを使うのが良い考えです。 –