阅读Lightwave LWO二进制文件,UV问题

时间:2011-08-10 20:36:46

标签: binary-data ieee-754 chunks uv-mapping

好的,所以我正在尝试制作CSHARP Lightwave 3D模型转换器,将我的LWO转换为Javascript对象。到目前为止,我已经掌握了该计划的内容,我很高兴。但是我在从二进制文件中导出UV时遇到了麻烦。

这是我对LWO二进制文件的参考资料: http://www.gpwiki.org/index.php/LWO

出于测试目的,我使用具有两个三角形的单个方形模型,具有六个点。因此,您可能已经熟悉了,我在HEX中看到了这样的纹理UV块(带有带注释的逗号,并且译成了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 Single浮点数。

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

你可以看到,二进制文件并不是那么遥远,但它足以让一切变得不同,特别是当内容是导出数千个这些bugger时。现在我看不出这种不同的模式。

我目前的理论是这些数字不是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

1 个答案:

答案 0 :(得分:1)

您可以从http://www.newtek.com/lightwave/developers.php获取Lightwave sdk。 它包含.lwo格式的完整文档。

编辑:

Lightwave将所有数据存储在Big Endian中。因此,在将它们解释为float之前,必须交换字节。