在这种 3D 网格文件格式中,这是什么类型的数据?

逆向工程 二元分析
2021-06-12 20:04:34

我正在对游戏的 3d 文件格式进行逆向工程。我知道该文件是一个网格,因为我能够识别每个向量的 XYZ 坐标以及 MeshFaces。每个向量 XYZ 坐标有 3 个浮点数,如下所示:

[这是从实际文件中提取的]

41FC39C0 73480640 3AC87240 6038BF3E DF545D3F E620ACBE 00000000 0000403F

这是十六进制的浮点表示:

-2.9060214 2.0981719 3.7934709 = X Y Z
0.37347698 0.86457628 -0.3361885 0.0 0.75 = Not sure what this this is.

我想说前 2 个值可能是tU,tV值,但根据我对 DirectX 的了解,纹理坐标通常在 0 和 1 之间。即使这个文件,数字介于两者之间,我可以在第一个文件时调出另一个文件2 个数字类似于 -.50 甚至大于 1,所以我不能肯定地说它们是文本坐标。

最后 3 个值我不知道。

这个 3d 网格文件适用于使用自定义构建的 DirectX 9 引擎的在线游戏,从我目前收集的信息来看,它大致基于 Direct3D 的 .X 文件规范。

我能够将 XYZ 坐标提取到可以导入 Cinema 4D 的列表中,并且我已经根据绘制的对象确认 XYZ 是准确的。在这种情况下,一块石头。

这是此文件中前 3 个数据点的浮点数:

1. -2.9060214 2.0981719 3.7934709 0.37347698 0.86457628 -0.3361885 0.0 0.75
2. -2.7679636 2.0897043 2.6395969 0.16878456 0.98563963 5.1173517e-003 0.0 0.5
3. -2.7679636 6.2550635 2.7174740 0.20584901 -0.96193141 -0.17976092 1.0 0.5

根据我对逆向工程 3D 日期的经验,如果浮点数是指数的,则很可能是读错了,因此接近末尾的第二行的“5.1173517e-003”甚至可能不是浮点数,但是那么它的其他可能值:

INT8    117
UINT8   117
INT16   -20619
UINT16  44917
INT32   1000845173
UINT32  1000845172
HALF FLOAT -0.11651611

也没有多大意义。

1个回答

我认为三个浮点数的第二个向量是法线向量这基本上是顶点的正面方向。看起来长度是 1,所以它被归一化,这与你对法向量的期望很好地对应。我认为最后两个是用于纹理的UV 映射坐标,但如果没有完整的数据文件,很难确定。