如何在DirectX 11中导入.obj文件

时间:2014-10-26 20:50:44

标签: c++ visual-studio-2013 directx

目前正在尝试将我的3D建模ship.obj文件导入我的DirectX11游戏中。我对此有两个问题。

首先,是否有任何简单的库(包含良好的文档)可以为.obj导入DirectX 11初学者?

其次,如何导入和渲染他们的模型?

2 个答案:

答案 0 :(得分:4)

使用VS 2012和VS 2013,内容管道可以将Wavefront OBJ文件导出为CMO。 DirectXMesh库包含一个命令行工具Meshconvert,它将加载Wavefront OBJ文件并将它们导出为CMO或SDKMESH文件。

DirectX工具包的Model类可以从CMO或SDKMESH文件加载和呈现。

DirectX工具包: http://go.microsoft.com/fwlink/?LinkId=248929

DirectXMesh: http://go.microsoft.com/fwlink/?LinkID=324981

DirectXMesh Utilities文件夹中还有一个WaveFrontReader类,可用于将Wavefront OBJ文件解析为VB和IB的示例。

答案 1 :(得分:0)

obj文件通常具有以下格式:

v <numbers>
etc..

vt <numbers>
etc..

vn <numbers>
etc..

f <numbers>
etc..

其中v是位置数据; vt纹理法线; vn位置法线;面子将是其指数。因此,您必须阅读每个值并将它们放在正确的容器中(我建议使用它们,因为它们易于使用),具体取决于第一个字母。您不必将索引的所有值都放入向量中,因为索引只是指向某个类型的某个顶点的数字。通常情况下,'f'行应该具有以下格式的值:

f v / vt / vn v / vt / vn v / vt / vn假设模型是三角形的。这表示每个三角形的三个位置顶点,否则构成整个模型。如果您的模型没有进行三角测量,那么您将拥有4组值,每组值都指向每个组中的值。

此时你需要根据行'f'中指向的索引来定位你的位置顶点,法线和纹理法线。一些伪代码:

for (int i = 0; i < indices; i++)
{
    orderedPositions.push_back(unOrderedPositions[positionIndex[indices] * # of indices + k]);
    // Same applies to normals and textures
}

// Where k is the group number of the face from 1 to n depending on how many groups of faces there are per line.

希望这有帮助!