FBX格式mesh解析与加载(一)

时间:2024-04-09 16:41:25

**

理解FBX格式中Mesh数据结构**

fbx文件是现在许多建模动画软件和游戏引擎之间共用的模型文件格式。fbx文件分为两种方式从建模软件中导出,一种是二进制文件另一种是ASCII码保存。
ASCII保存的格式右键打开方式选文本可以打开看到里面保存的数据。对于模型网格来说,模型中点坐标、点索引、 点法线、uv 是生成模型的重要参数。在文本中Object properties 能找到这个些数据。
比如打开一个简单正方提模型我们可以看到下面数据:
FBX格式mesh解析与加载(一)
Vertices的24个值是三维数据集的8个顶点(3个值代表一个顶点三维坐标)。
PolygonVertexIndex 下的36个值是顶点索引(mesh中点的索引)
Normals 的108是12个三角形的每个三角形角的36个法线(3个值代表一个法向量)。
UV 下的24是12个纹理坐标(2个值代表一个纹理坐标对)。
UVIndex 的36是三维数据集的36个三角形角的纹理坐标索引(引用 UV 的值)。

Vertices中数据不难理解,就是这些数据三个一组对应X、Y、Z构成一个三维坐标,所以可以得到正方体的8个顶点坐标。
PolygonVertexIndex 看到这个数据中的大家都会有疑问:
为什么顶点索引数据会有负数?
因为模型为了区分模型网格是三角面还是四边面,如果数据每隔三个为负数则为三角面,每隔四个为四边面。
如何将负数的索引值转成有效索引数据呢?
假如n为负数索引值,m = |n|-1 。m为计算后的正确索引值。

因为normal和uv所计算的值都是对应的点的值:点法线是对应的点的法线,uv是点映射在平面上的坐标值,他们根本都是点的属性。 而 PolygonVertexIndex、Normals和UVIndex的数量都是36,可以猜测Normals 和 UV 是在每个PolygonVertexIndex所映射的点所相应 normal 或者 uv 的值的集合。

**

FBX文件中Mesh数据结构与游戏引擎中Mesh数据结构差异

**

fbx文件中的数据结构与游戏引擎中的模型数据有所不同,如果拿fbx中的数据在unity3d或者UE4的场景中生成模型依然会出现问题。
游戏引擎与fbx数据结构不同:
1.游戏引擎mesh中点索引triangles,都是三角面,三个数据为一组。而fbx中有可能为四边面。
2.游戏引擎中mesh中的normal数量、uv数量与vertices中点数量一致。而fbx中normal数量、uv数量与vertices的点索引数量一致。
想要把fbx导入到游戏引擎中必须解决这些问题。将数据转化后才能在场景中生成正确的模型。