我正在对游戏的 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
也没有多大意义。