Класс меша мягкого тела до мельчайших подробностей идентичен классу меша одежды, за исключением того, что в классе меша мягкого тела имеется дополнительная функция, которая восстанавливает исходную форму меша. Т. к. вы просто добавляете одну функцию, вы можете пропустить большую часть объявления класса мягкого тела и сразу перейти к функции, восстанавливающей меш мягкого тела.

// Создать производный класс мягкого тела 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

Восстановление мешей мягких тел || Оглавление || Использование анимированных текстур