目前正在尝试将我的3D建模ship.obj文件导入到我的DirectX11游戏中。关于这个我有两个问题。
首先,是否有任何简单的库(有很好的文档)可以为初学者在DirectX 11中导入DirectX 11?
第二,如何导入和呈现它们的模型?
发布于 2014-10-26 21:12:37
使用VS 2012和VS 2013,内容管道可以将Wavefront OBJ文件导出为CMO。DirectXMesh库包含一个命令行工具CMOs,它将加载Wavefront文件并将它们导出为CMO或SDKMESH文件。
DirectX工具包的Model类可以从CMO或SDKMESH文件中加载和呈现。
DirectX工具包: http://go.microsoft.com/fwlink/?LinkId=248929
DirectXMesh: http://go.microsoft.com/fwlink/?LinkID=324981
还有一个WaveFrontReader类可以在DirectXMesh实用程序文件夹中使用,用于将Wavefront文件解析为VB和IB的示例。
发布于 2014-10-26 23:17:52
obj文件通常具有以下格式:
v <numbers>
etc..
vt <numbers>
etc..
vn <numbers>
etc..
f <numbers>
etc..其中v为位置数据;vt纹理法线;vn位置法线;人脸为其指标。因此,您必须读取每个值,并根据第一个字母的不同将它们放入正确的容器中(我推荐向量,因为它们易于使用)。您不必将索引的所有值都放入向量中,因为索引只是指向特定类型的某个顶点的数字。通常,而且确实,“f”行应该具有这种格式的值:
假设模型是三角剖分的f/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.希望这能有所帮助!
https://stackoverflow.com/questions/26577804
复制相似问题