![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
3DS? [Delphi]
Goorus © (2005-08-11 06:58:00)Всё же не понимаю я этого формата, да похоже, что до конца мало кто понимает :) Я даже сишный ридер перевёл на делфи (ну не было у меня компилятора для си), это помогло увидеть проблему.
Так вот есть там данные о траектории объекта
CHUNK_KEYFRAMER = $B000; // [-] информация об анимации
CHUNK_AMBIENTKEY = $B001;
CHUNK_TRACKINFO = $B002; // [-] поведение объекта
CHUNK_TRACKOBJNAME = $B010; // [+] название этого объекта, номер родителя
CHUNK_TRACKPIVOT = $B013; // [+] центр вращения объекта
CHUNK_TRACKPOS = $B020; // [+] траектория объекта
CHUNK_TRACKROTATE = $B021; // [+] траектория вращения объекта
CHUNK_TRACKSCALE = $B022; // [+] масштаб объекта
CHUNK_TRACKMORPH = $B026;
CHUNK_TRACKHIDE = $B029;
CHUNK_OBJNUMBER = $B030; // [+] ???
в конце - ссылка на ридер + пример, запускать экзешник нужно с параметром, но можно просто ani_1.bat, там прописано.
1) Если посмотреть пример, то CHUNK_TRACKSCALE и CHUNK_TRACKROTATE описаны правильно, а вот в CHUNK_TRACKPOS (Position keys) нет 11-го, а два 10-х фрейма! Как понимать?
Файл я не редактировал, это всё было создано максом 6-ой версии.
2) CHUNK_TRACKPIVOT - как использовать? Вектор и угол, считанные в CHUNK_TRACKROTATE, используются для создания матрицы поворота, и, даже не знаю, каким боком CHUNK_TRACKPIVOT прицепить?
3) CHUNK_OBJNUMBER - что это? Номер объекта, о котором сейчас будут данные? Нет, т.к. дальше в CHUNK_TRACKOBJNAME название объекта не совпадает, кроме того, если объектов всего 4 (индексы от 0 до 3), то эта величина может принимать значение 4..
Вот исходник + экзешник + пример:
http://none.hoha.ru/delphi_3ds_reader.rar
XProger (2005-08-12 05:14:00) [1]Кефир87, приехали...
Есть треугольник. У треугольника 3 вершины (v1, v2, v3)
Получим из них векторы образующие 2 ребра треугольника
w1 = v2 - v1
w2 = v3 - v2
Затем находим векторное произведение этих w1 и w2. В итоге получим вектор перпендикулярный плоскости треугольника. Этот вектор будет нормалью, которую желательно привести к единичному виду поделив все её координаты на её длину.
3DS записыаает вершины в определённом порядке, чтобы знак векторного произведения не менялся. Также при желании в 3ds можно хранить нормали и группы сглаживания.
Кефир87 (2005-08-12 02:49:00) [2]Кстати, раз уж речь зашла... А что, правда что в 3DS нет нормалей?! Я про это ничего не нашел. Сделал экспортер, только для вершин, треугольников и текстурных координат... а вот нормали? Как с ними быть? Все лето, на отдыхе, пытался придумать как самому расчитать нормали и пришел к выводу что это не возможно. Переубедите меня если я не прав. 8)
Goorus (2005-08-11 13:52:00) [3]CHUNK_TRACKPIVOT - относительно мировой СК, либо относительно СК родительского объекта?
>>CHUNK_OBJNUMBER - скорее всего используется в качестве UID для объекта
Сомнительный способ. Почему в анимации, а не при описании точек объекта? Навряд ли. Да и не используется нигде.
Может где-нибудь есть подробное описание? Можно на английском.
Начал дальше разбираться, так там и с маштабированием чего-то намучено.
Скрипт для макса писать пока не хочется, надеюсь разобраться с 3DS, мне ведь не много надо: объекты, материалы, анимация.
Можно даже без материалов обойтись.
Goorus (2005-08-11 13:52:00) [4]CHUNK_TRACKPIVOT - относительно мировой СК, либо относительно СК родительского объекта?
>>CHUNK_OBJNUMBER - скорее всего используется в качестве UID для объекта
Сомнительный способ. Почему в анимации, а не при описании точек объекта? Навряд ли. Да и не используется нигде.
Может где-нибудь есть подробное описание? Можно на английском.
Начал дальше разбираться, так там и с маштабированием чего-то намучено.
Скрипт для макса писать пока не хочется, надеюсь разобраться с 3DS, мне ведь не много надо: объекты, материалы, анимация.
Можно даже без материалов обойтись.
XProger (2005-08-11 09:02:00) [5]CHUNK_TRACKPIVOT - позиция системы координат объекта относительно мировой.
CHUNK_TRACKROTATE - кватернион описывающий ориентацию объекта в его системе координат.
CHUNK_OBJNUMBER - скорее всего используется в качестве UID для объекта, т.к. имена у объектов могут быть одинаковыми.
P.S.
Не проще ли будет написать скрипт для макса в свой формат, дабы не тащить/изучать все "прелести" 3ds за собой?
Goorus (2005-08-11 08:21:00) [6]Ну да ))
Хотелось бы разъяснений к формату хранения анимации.
Fosgen (2005-08-11 08:09:00) [7]Насколько я понял - стоит вопрос о анимированности 3ds формата из под Delphi?