[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Custom egg exporter: нужна помощь в экспорте анимации
WiedzminДата: Понедельник, 06.08.2012, 01:06 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Привет ру.панда3д!

На досуге пишу экспорт в egg из Poser, в кои то веки дошел до экспорта анимации и застрял. Структура записей в XfmAnim в общем то понятна - неясно относительно чего нужно отдавать данные для параметров - относительно родителя в иерархии, относительно начального положения jointа, или относительно model origin? Пробовал и так и так, кракозябры получаются.
Ninth в процессе разработки yabee как-то это решил, был бы очень признателен за совет.

Спасиб!
 
ninthДата: Понедельник, 06.08.2012, 08:33 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Ох, ещё бы вспомнить как я это делал ))

Кости самого скелета у меня считаются так:
Code
        if not obj.parent:
                 self.transform_matrix = arm_owner.matrix_world * obj.matrix_local
             else:
                 self.transform_matrix = obj.parent.matrix_local.inverted() * obj.matrix_local

т.е. если нет родителя, то мировая матрица скелетона * локальную матрицу кости
если есть родитель, то инвертированная локальная матрица родительской кости на локальную матрицу рассчитываемой кости.

Анимация для костей считается примерно так же, только для анимации я полученную матрицу перевожу в углы эйлера и позицию, и записываю именно их.
Code

                     if bone.parent:
                         matrix = bone.parent.matrix.inverted() * bone.matrix
                     else:
                         matrix = arm.matrix_world * bone.matrix

                     p, r, h = matrix.to_euler()
                     anim_dict[bone.name]['p'].append(p/pi*180)
                     anim_dict[bone.name]['r'].append(r/pi*180)
                     anim_dict[bone.name]['h'].append(h/pi*180)
                     x, y, z = matrix.to_translation()
                     anim_dict[bone.name]['x'].append(x)
                     anim_dict[bone.name]['y'].append(y)
                     anim_dict[bone.name]['z'].append(z)
 
WiedzminДата: Понедельник, 06.08.2012, 15:23 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Ага, то есть таки учитывать родителя нужно!
Я изначально думал, что если не указать данные в XfmAnim, то панда их возьмет из матриц jointов, а нет - все что не указано прямо, инициализируется нулями и все схлопывается.
Буду пробовать дома, спасибо.
 
  • Страница 1 из 1
  • 1
Поиск: