好的,所以我正在尝试制作 CSHARP Lightwave 3D 模型转换器来将我的 LWO 转换为 Javascript 对象。到目前为止,我有足够的胆量来运行这个程序,我很高兴。但是我在从二进制文件中导出 UV 时遇到了麻烦。
这是我的 LWO 二进制文件的参考资料: http ://www.gpwiki.org/index.php/LWO
出于测试目的,我使用带有两个三角形的单方形模型,有六个点。所以你可能已经熟悉了,我来看看纹理 UV 块,它在 HEX 中看起来像这样(带注释的逗号,并翻译了 Ascii):
[V] [M] [A] [P]
00 00 00 4C
[T] [X] [U] [V]
00 02
[t] [e] [s] [t] [.] [p] [n] [g]
00 00
00 00, 3E FD FD FD, 3E FD FD FD,
00 01, 3F 2A FD FD, 3E FD FD FD,
00 02, 3E FD FD FD, 3F 2A FD FD,
00 03, 3F 2A FD FD, 3E FD FD FD,
00 04, 3F 2A FD FD, 3F 2A FD FD,
00 05, 3E FD FD FD, 3F 2A FD FD
现在,根据我链接的文档,可以转换为以下内容。如果您想自己翻译,我发现这是一个方便的工具,用于将 32 位 HEX 翻译成 IEEE 754 单浮点数。
http://www.h-schmidt.net/FloatApplet/IEEE754.html
LWO UV 二进制翻译:
VMAP
76
TXUV
2
test.png
0
0, 0.4960784, 0.4960784
1, 0.6679380, 0.4960784
2, 0.4960784, 0.6679380
3, 0.6679380, 0.4960784
4, 0.6679380, 0.6679380
5, 0.4960784, 0.6679380
看,这看起来足够健康,直到您将 UV 位置与 Lightwave 中的实际位置进行比较:
0, 0.3333333, 0.3333333 or (33.33333%)
1, 0.6666667, 0.3333333
2, 0.3333333, 0.6666667
3, 0.6666667, 0.3333333
4, 0.6666667, 0.6666667
5, 0.3333333, 0.6666667
你可以看到,二进制文件并没有那么遥远,但它足以让一切变得不同,尤其是当意图导出数千个这样的虫子时。现在我看不出这种差异有任何规律。
我目前的理论是这些数字不是 IEEE754 格式。但是所有其他值都是,所以为什么这些会有所不同。有什么我想念的吗?为了进一步的帮助,这里有一些其他的测试值。
Lightwave => Binary
0.00000000 => 0.00000000
0.25000000 => 0.49414062
0.40000000 => 0.49607840
0.50000000 => 0.50000000
0.70000000 => 0.70000000
1.00000000 => 1.97656250
似乎有些是正确的,而另一些只是……非常错误。感谢您花时间阅读这个问题,我很欣赏它非常长而且数字密集。任何帮助都会很棒!enter code here