DirectX 10 で波面 obj モデルをレンダリングするプログラムを作成しました
次のように頂点データをロードしました desc
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();
ご覧のとおり、mpMesh のインデックス バッファを設定していません。Vertexes インデックスの計算方法がわかりません。ご覧のとおり、私の頂点フォーマットには法線が含まれています。これは、同じ頂点位置が異なる法線を持つ可能性があることを意味します。たとえば、立方体には 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
メッシュインデックスを設定していないことが原因なのか、それとも他の問題なのかはわかりません。どんなコメントでも大歓迎です。
皆さんありがとう。