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

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

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

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

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

// SpringStiffness = вещественное значение, содержащее жесткость, // необходимую для возвращения точек в начальное положение for(DWORD i=0;i<NumPoints;i++) {

// получить вектор разности между текущим и начальным положениями D3DXVECTOR3 vecDiff = ClothPoints[i].m_vecInitialPos - \ ClothPoints[i].m_vecPos;

// Применить значение жесткости к вектору пружины vecDiff *= SpringStiffness;

// Применить вектор пружины к векторам скорости и положения ClothPoints[i].m_vecPos += vecDiff; ClothPoints[i].vecVelocity += vecDiff;

Быстро и легко предыдущий код вычисляет вектор разности между текущим и начальным положениями точки одежды. Этот вектор разности потом масштабируется на заданное значение жесткости пружины. В отличие от пружин показанных ранее, значение жесткости пружины мягкого тела должно оставаться маленьким, скажем от 0.05 до 0.4. Величина жесткости зависит от величины времени, заданного в качестве параметра функции базового класса UpdateForces. Лично я использую значение жесткости 0.2 для каждых обрабатываемых 20-30 миллисекунд.

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

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