После разрешения модели твердого тела единственное, что вам остается сделать, - это перестроить преобразования фреймов. Т. к. кости твердого тела куклы заданы в мировых координатах, нет необходимости просматривать все кости в иерархии и комбинировать все преобразования с родительским. Обычно все, что необходимо вам сделать, -это скопировать ориентацию кости (из состояния объекта) в комбинированную матрицу преобразования фрейма.
Единственной проблемой является то, что кость ориентируется и перемещается относительно координат центра тела, а не относительно координат точки соединения, как определено вектором vecJointOffset Вам необходимо преобразовать вектор vecJointOffset, используя ориентацию кости, и добавить результирующий вектор к положению кости, что даст вам корректные координаты для расположения кости. Комментарии, приведенные в RebuildHierarchy, должны объяснить все сложные моменты.
void cRagdoll::RebuildHierarchy()
{
if(!m_pFrame) return;
if(!m_NumBones || !m_Bones) return;
// Наложить вращательные матрицы костей на фреймы for(DWORD i=0;i<m_NumBones;i++) {
// Преобразовать смещение соединения в соответствии с положением фрейма
D3DXVECTOR3 vecPos;
D3DXVec3TransformCoord(&vecPos,
&m_Bones[i].m_vecJointOffset, &m_Bones[i].m_State.m_matOrientation);
// Добавить положение кости
vecPos += m_Bones[i].m_State.m_vecPosition;
/ / Ориентировать и расположить фрейм m_Bones[i].m_Frame->matCombined = m_Bones[i].m_State.m_matOrientation; m_Bones[i].m_Frame->matCombined._41 = vecPos.x; m_Bones[i].m_Frame->matCombined._42 = vecPos.y; m_Bones[i].m_Frame->matCombined._43 = vecPos.z;
}
}
Вот мы и закончили! Все что остается, это найти применение классу кукольной анимации в ваших проектах. Для этого вам просто необходимо создать экземпляр объекта cRagdoll, вызвать функцию Create для создания данных и непрерывно вызывать Resolve и RebuildHierarchy. Демонстрационная программа этой главы показывает, как просто это делается, так что я настоятельно рекомендую посмотреть ее исходный код, прежде чем продолжать.
Посмотрите демонстрационные программы
Как вы можете видеть, системы кукольной анимации являются всего лишь замаскированными моделями твердых тел. Зачем платить тысячи долларов за систему кукольной анимации, если вы видели, как просто создать ее самому? Демонстрационная программа этой главы содержит как раз такую систему кукольной анимации, которую вы можете использовать в ваших проектах.
Эта программа, изображенная на рис. 7.12, берет персонаж и подбрасывает его в воздух. Звучит не очень впечатляюще, так что для большего реализма было добавлено несколько объектов столкновений (сфер), от которых бедный персонаж отскакивает как тряпичная кукла.
Раздел физики твердого тела является, безусловно, привлекательным; если вы захотите получить больше информации, чем я привел тут, есть множество альтернативных источников.
Программы на компакт-диске
Для главы 7 создан только один проект, но поверьте мне, он замечательный! Вы можете обнаружить его в директории главы 7 компакт диска этой книги:
• Ragdoll. Этот проект иллюстрирует кукольную анимацию, показывая вам что случается, если бросить персонаж через поле плавающих сфер. Он расположен в \BookCode\Chap07\Ragdoll.

Рис. 7.12. Деревянная кукла встречает ужасную смерть, пролетев по воздуху и отскочив от плавающих сфер
Часть IV
Морфирующая анимация
8. Работа с морфирующей анимацией
9. Использование морфирующей анимации, основанной на ключевых кадрах
10. Комбинирование морфированных анимаций
11. Морфирование лицевой анимации
Глава 8
Работа с морфирующейанимацией
С громким лязгом стена, пересекающая компаунд, начинает скользить. Звуки крошащихся камней перемешиваются со свирепым ревом невиданных злобных созданий, которые притаились за уменьшающимся барьером. Я могу только догадываться, что сейчас обрушится на меня. Как только стена осела, началось нападение. Волна за волной пиксельных демонов лилась вперед только для того, чтобы встретить свою смерть от моей проверенной импульсной винтовки.
Со всеми этими бегающими демонами, скрежещущими зубами, кусочками летающей плоти, я уверен, что технология анимации не стоит во главе списка ваших приоритетов. Но если бы вам пришлось о ней задуматься, я уверен, что вам на ум пришли бы сложные скелетные структуры, иерархии фреймов, скелетные меши, разве нет? А будет ли для вас сюрпризом то, что все вышерассмотренные анимации могут быть воплощены при использовании системы морфирующей анимации? Так и есть, в играх, такого плана как Doom и Quake фирмы id, демонические твари анимируются при помощи морфирующей анимации, технологии, которая обеспечивает плавность и простоту проигрывания даже на медленных системах. Морфирующая анимация настолько проста в использовании, что вы спросите у себя, почему вы не рассмотрели ее раньше. Не расстраивайтесь, потому что эта глава и существует, чтобы помочь вам!
В этой главе вы научитесь:
• Определять морфируемые последовательности;
• Морфировать меши, используя время и скаляры;
• Визуализировать морфируемые меши;
• Улучшать морфирующие анимации при помощи вершинных шейдеров.
⇐Восстановление соединений костей || Оглавление || Морфинг в действии⇒