Чтение двоичных файлов Lightwave LWO, проблема с ультрафиолетом - PullRequest
0 голосов
/ 11 августа 2011

Хорошо, я пытаюсь создать конвертер 3D-модели CSHARP Lightwave, чтобы конвертировать мои LWO в объект Javascript. Пока у меня есть смелости программы, и я, пожалуйста. Но у меня возникли проблемы с экспортом UV из двоичного файла.

Это мой справочный материал для двоичного файла LWO: http://www.gpwiki.org/index.php/LWO

Для тестирования я использую модель с одним квадратом с двумя треугольниками с шестью точками. Итак, как вы, возможно, уже знакомы, я перехожу к фрагменту Texture 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 Single float.

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

Видите, это выглядит достаточно здорово, пока вы не сравните ультрафиолетовые позиции с фактическими позициями в 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

1 Ответ

1 голос
/ 11 августа 2011

Вы можете получить Lightwave SDK от http://www.newtek.com/lightwave/developers.php.Включает полную документацию в формате .lwo.

РЕДАКТИРОВАТЬ:

Lightwave хранит все свои данные в Big Endian.Поэтому вы должны поменять местами байты, прежде чем интерпретировать их как float.

...