Класс меша мягкого тела до мельчайших подробностей идентичен классу меша одежды, за исключением того, что в классе меша мягкого тела имеется дополнительная функция, которая восстанавливает исходную форму меша. Т. к. вы просто добавляете одну функцию, вы можете пропустить большую часть объявления класса мягкого тела и сразу перейти к функции, восстанавливающей меш мягкого тела.
// Создать производный класс мягкого тела class cSoftbodyMesh : public cClothMesh
public:
void Revert(float Stiffness, D3DXMATRIX *matTransform) {
// Проверка ошибок
if(!m_NumPoints || m_Points == NULL) return;
// Обработать силы мягкого тела (восстанавливающие форму) for(DWORD i=0;i<m_NumPoints;i++) {
// Обрабатывать только те точки, которые могут двигаться if(m_Points[i].m_Mass != 0.0f) {
// Преобразовать исходные координаты, если необходимо D3DXVECTOR3 vecPos = m_Points[i].m_vecOriginalPos; if(matTransform) D3DXVec3TransformCoord(&vecPos, &vecPos, matTransform);
// Создать вектор пружины из исходного положения точки (преобразованного)
// до ее текущего положения
D3DXVECTOR3 vecSpring = vecPos - m_Points[i].m_vecPos;
// Масштабировать пружину на значение жесткости vecSpring *= Stiffness;
// Непосредственно изменить скорость и положение m_Points[i].m_vecVelocity += vecSpring; m_Points[i].m_vecPos += vecSpring;
}
}
}
};
Как вы можете видеть из объявления класса cSoftbodyMesh, функция Revert просматривает все точки одежды, передвигает их к начальному положению и соответствующим образом корректирует скорость точки. Вы заметите, что значение жесткости, матрицу преобразования, применяемую к начальному положению точек до вычисления вектора пружины, можно задать при вызове Revert. Это позволяет точкам занимать корректные положения, а мешу - двигаться по миру.
Используя те же самые технологии, что и в классе меша одежды, вы можете работать с классом меша мягкого тела. Загрузка, установка сил, визуализация - у обоих классов они одинаковы. Единственным различием является то, что вам необходимо вызывать cSoftBodyMesh::Revert сразу после вызова cSoftBodyMesh::Resoive. Посмотрите демонстрационную программу меша мягкого тела, находящуюся на компакт-диске, чтобы увидеть, как использовать класс cSoftBodyMesh в ваших проектах.
Посмотрите демонстрационные программы
Фу, это была длинная глава, но безусловно, содержащаяся в ней информация стоила прочтения! После того, как вы увидели, как легко работать с моделированием одежды, я уверен, вам не терпится применить эти полученные знания в ваших проектах игр. Чтобы помочь вам понять, как использовать меши одежды и меши мягких тел в ваших проектах, я включил две демонстрационные программы в эту книгу.
Первый проект (С1оігіМе8Гі), показанный на рис. 13.8, иллюстрирует один из примеров использования одежды - развевающийся плащ супергероя.

Рис. 13.8. Супергерой летит по воздуху, а его плащ развевается у него за спиной
Второй проект, поставляемый с книгой, Softbody, иллюстрирует использования мешей мягких тел для придания персонажам дополнительного bounce при ходьбе. Посмотрите демонстрационную программу, о которой я говорю, или рис. 13.9.

Рис. 13.9. Урок карате! Меш мягкого тела придает дополнительные подрагивания при атаках мастера
Программы на компакт-диске
Классы меша мягкого тела и меша одежды этой главы находятся в двух файлах проекта, расположенных в директории главы 13 компакт-диска этой книги. Этими проектами являются:
• ОоШМеэп. Эта программа иллюстрирует использование класса меша одежды, разработанного в этой главе. Она расположена в \BookCode\Chap13\ClothMesh.
• 8о1Шос1у. Эта демонстрационная программа иллюстрирует использование класса меша мягкого тела в ваших проектах. Она расположена в \BookГлава 14
⇐Восстановление мешей мягких тел || Оглавление || Использование анимированных текстур⇒