Я изучаю некоторые руководства по DirectX 11. Я использую Autodesk FBX SDK для импорта моделей в прямую x-сцену. Но у меня возникли проблемы с индексами, в том порядке, в котором вы рисуете вершины. Мой класс FBX импортирует те же значения, что и конвертер Autodesk FBX. Затем он использует FbxAxisSystem для преобразования сцены в совместимую с DirectX, затем он инвертирует ось Z и меняет оси Y и Z так, чтобы вращение соответствовало модели в моей программе трехмерного моделирования. Пока все хорошо, верно? кроме треугольников совершенно не в порядке. В результате получается странно выглядящая сетка.
Я сузил его до двух вещей: либо порядок рисования, либо его визуализация. Я использую std :: vector для хранения буфера вершин и буфера индексов. Чтобы упростить задачу — мой макет вершины
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
AFAIK рендер работает правильно, но я не совсем уверен, потому что я нахожу немного ширину в битах и DrawIndex. Вот часть кода:
// ... in the initialise function after importing the object
indexBufferDesc.ByteWidth = sizeof(DWORD) * sizeof(Obj->MeshIndicesBuffer);
iinitData.pSysMem = &(Obj->MeshIndicesBuffer[0]);
// ...
vertexBufferDesc.ByteWidth = sizeof(float) * sizeof(Obj->MeshVertexBuffer);
vertexBufferData.pSysMem = &(Obj->MeshVertexBuffer[0]);
// ... In the draw function
DrawIndexed(Obj->MeshIndicesBuffer.size(), 0, 0);
Просто чтобы прояснить, я использую std :: vector для хранения буферов.
Как исправить индексы, чтобы они отображались в правильном порядке? Есть ли формула / алгоритм? Есть ли в FBX SDK функция для этого?
Я разместил на своем G + самолет, который я пытаюсь сделать.
https://plus.google.com/105066841304290992400/posts/LVb5VPQQxGw
Я понимаю основные принципы рендеринга полигонов (я могу рендерить куб, используя массивы), но я не знаю, как генерируются индексы и почему это происходит не в «правильном» порядке из моего файла FBX.
Задача ещё не решена.