2011-08-10 96 views
0

好吧,所以我想讓CSHARP Lightwave 3D模型轉換器將我的LWO轉換爲Javascript對象。到目前爲止,我有程序工作的膽量,我很高興。但是我從二進制文件導出UV時遇到了麻煩。閱讀Lightwave LWO二進制文件,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位置與實際位置,這看起來足夠健康:

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

回答

1

您可以從http://www.newtek.com/lightwave/developers.php得到光波SDK。它包含.lwo格式的完整文檔。

編輯:

Lightwave將所有數據存儲在Big Endian中。所以你必須在將它們解釋爲float之前交換這些字節。您的快速反應

+0

謝謝,目前我正在使用不同的格式。但是我會在某個時候回到這裏! –