Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DirectX. Продвинутая Анимация (2004) [rus].pdf
Скачиваний:
335
Добавлен:
16.08.2013
Размер:
8.39 Mб
Скачать

Имитирование одежды и анимация мешей мягких тел

Использование мешей мягких тел

Меши мягких тел становятся все более популярными в современных играх. Они позволяют представляться объектам мягкими, эластичными и/или растягивающимися. Объекты могут изгибаться, скручиваться, подрагивать множеством различных способов, после чего принимать исходную форму.

Что могут сделать меши мягких тел в вашей игре? Ну, давайте посмотрим на современные игры, использующие их. Baldur's Gate: Dark Alliance фирмы Interplay использует меши мягких тел при анимировании персонажей, придавая женским персонажам дополнительные...м... подрагивания при ходьбе.

Меши мягких тел также могут быть использованы для моделирования волос персонажа. Если волосы персонажа взметнулись вверх, со временем они восстанавливают начальную форму. Использование мешей мягких тел также может быть полезно в картах и уровнях игры. Представьте уровень игры, который изгибается и закручивается в соответствии с действиями персонажа, как если бы персонаж шел по горячему воздушному шару. Привлекательно!

Я знаю, что вам интересно, почему я поместил моделирование одежды и анимацию мешей мягких тел в одну главу. Ответ прост - меши мягких тел являются мешами одежды! Да, вы меня правильно расслышали - меши мягких тел практически идентичны мешам одежды, за единственным исключением. Меши мягких тел всегда восстанавливают начальную форму со временем, вместо того, чтобы висеть подобно частям ткани.

Восстановление мешей мягких тел

Вотличие от своего двоюродного брата, меша одежды, меш мягкого тела медленно восстанавливает начальную форму со временем. Если вы подумаете об этом, то поймете, что восстановление меша мягкого тела настолько просто, насколько необходимо рассчитать силы, нужные, чтобы вернуть вершины меша в начальное положение. Так что вместо того, чтобы рассчитывать пружины меша, необходимо рассчитывать его точки.

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

Помните, мы сохраняли начальное положение каждой точки? Применив константу пружины к расстоянию между начальным положением точки и конечным, можно определить силу, которую необходимо прибавить к векторам положения и скорости каждой точки.

Имитирование одежды и анимация мешей мягких тел

// Проверка ошибок

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::Resolve. Посмотрите демонстрационную программу меша мягкого тела, находящуюся на ком- пакт-диске, чтобы увидеть, как использовать класс cSoftBodyMesh в ваших проектах.

Соседние файлы в предмете Программирование на C++