2010-08-22 4 views
1

Я пытаюсь внедрить скелетную анимацию в игровом движке. Я в настоящее время кодирую свою практику в школе. Двигатель закодирован в C++ и directx 10 с использованием правой системы.Collada и Skeletal Animation

В настоящее время я использую collada для импорта и загрузки сеток (я знаю, что это не лучшее решение). В используемой нами настройке используются кватернионы для вращения, которые я конвертирую в матрицы, прежде чем передавать данные в gpu для скинов gpu. Я использую softimage для создания тестовых сеток для тестирования различных аспектов кода анимации.

Вопрос, который у меня возникает, касается значений вращения. Я использую D3DXQuaternionRotationYawPitchRoll для преобразования значений вращения с углов Эйлера в кватернионы. Проблема в том, что в настоящее время анимация находится на неправильной оси. то, что должно быть вращением вокруг оси y, является поворот вокруг оси x. Для правильной анимации я должен поменять значения x и y и отрицать значение y. Это на простом экструдированном ящике с ветвями. Для каждой анимированной кости я сейчас вычисляю ее локальную матрицу преобразования (матрицу поворота, умноженную на матрицу перевода), которая затем умножаю родительскую матрицу на текущую локальную матрицу, чтобы получить окончательную преобразованную матрицу относительно ее родителя.

Есть ли какой-то секрет для правильного вращения коллады? все, что я проверил, показывает правильность значений перед умножением каждой кости на родителя. Подмена порядка матричных умножений не привела к заметному улучшению. Любая помощь очень ценится, в то же время я буду работать над другими разделами движка, поскольку я провел слишком много времени, в настоящее время работая в кругах.

ответ

0

Уголов Эйлера недостаточно, чтобы описать, что вы пытаетесь сделать. Вы должны использовать кватернионы как источник ваших ключевых кадров анимации; в кватернионе есть больше информации, чем в триплее углов Эйлера.

Смежные вопросы