Я написал программу для визуализации obj-модели волнового фронта в DirectX 10
Я загрузил данные вершин следующим образом: 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. Я не знаю, как рассчитать индекс вершин. Как вы можете видеть, мой формат вершины включает нормаль, что означает, что одна и та же позиция вершины может иметь другую нормаль. Например, куб содержит 36 вершин, но только 8 различных позиций. obj-файл wavefront использует только 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
Я не уверен, является ли это причиной, не настроив индекс сетки или другие проблемы. Любые комментарии приветствуются.
Спасибо всем.