目前正在尝试将我的3D建模ship.obj
文件导入我的DirectX11
游戏中。我对此有两个问题。
首先,是否有任何简单的库(包含良好的文档)可以为.obj
导入DirectX 11
初学者?
其次,如何导入和渲染他们的模型?
答案 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.
希望这有帮助!