我正在学习一些 DirectX 11 教程。我一直在使用 Autodesk FBX SDK 将模型导入我的直接 x 场景。但是我遇到了索引问题,也就是你绘制顶点的顺序。我的 FBX 类导入与 Autodesk FBX 转换器相同的值。然后它使用 FbxAxisSystem 将场景转换为与 DirectX 兼容,然后反转 Z 轴,并交换 Y 和 Z 轴,以便旋转与我的 3D 建模程序中的模型匹配。到目前为止还不错吧?除了三角形完全乱序。产生了一个看起来很奇怪的网格。
我将其缩小到两件事:绘制顺序或渲染。我正在使用 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 文件中以“正确”顺序绘制的。