Установка сил

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

void cRagdoll::SetForces(DWORD BoneNum, D3DXVECTOR3 *vecGravity, float LinearDamping,

float AngularDamping)

{

// Получить указатель на кость cRagdollBone *Bone = &m_Bones[BoneNum] ;

// Получить указатель на текущее состояние cRagdollBoneState *BCState = &Bone->m_State;

// Установить гравитацию и очистить момент Bone->m_vecForce = ((*vecGravity) * Bone->m_Mass); Bone->m_vecTorque = D3DXVECTOR3(0.0f, 0.0f, 0.0f);

/ / Наложить амортизацию на силу и момент Bone->m_vecForce += (BCState->m_vecLinearVelocity * \

LinearDamping); Bone->m_vecTorque += (BCState->m_vecAngularVelocity * \ AngularDamping) ;

}

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

После того как вы установили силы, вы можете находить (интегрировать) движение заданной кости.

Вычисление ограничивающего параллелепипеда кости || Оглавление || Объединение костей