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

Определение точек одежды и пружин

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

На самом деле необходимо использовать два значения, относящиеся к массе -первое для определения фактического значения массы и второе для определения значения единицы, деленной на массу. (Второе значение используется в некоторых вычислениях.)

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

class cClothPoint {

D3DXVECTOR3 m_vecPos; // трехмерные координаты точки

float m_Mass; // Масса точки (0=прикрепленная)

float m_OneOverMass; // 1 / Массу (0=прикрепленная к месту)

};

cClothPoint *ClothPoints = new cClothPoint[NumPoints];

Что же касается пружин, необходимо хранить два значения индексов точек (из массива точек), к которым присоединена пружина. Каждая пружина также имеет начальное расстояние между точками, называемое длиной покоя пружины. Значение длины покоя пружины является очень важным, т. к. оно используется для определения, была ли пружина растянута или сжата во время моделирования.

Наконец, необходимо определить значения жесткости и амортизации пружины. Эти значения очень важны, так как они определяют характер реакции пружины на действие внешней силы. Я скоро покажу вам, как использовать эти два значения; а пока просто определим их в виде двух вещественных переменных.

Вы можете определить класс, содержащий данные пружины и массив используемых объектов класса пружины, так:

class cClothSpring {

DWORD m_Point1; // первая точка пружины

DWORD m_Point2; // вторая точка пружины

float m_RestingLength; // длина покоя пружины

float m_Ks; // жесткость пружины

float m_Kd; // значение амортизации пружины

};

cClothSpring *ClothSprings = new cClothSpring[NumSprings];

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

Имитация одежды в ваших проектах || Оглавление || Получение данных одежды из мешей