void cPhysicsBodyNewton::AddImpulse(const cVector3f &a_vImpulse) { cVector3f vMassCentre = GetMassCentre(); if (vMassCentre != cVector3f(0,0,0)) { cVector3f vCentreOffset = cMath::MatrixMul(GetWorldMatrix().GetRotation(), vMassCentre); cVector3f vWorldPosition = GetWorldPosition() + vCentreOffset; NewtonBodyAddImpulse(m_pNewtonBody, a_vImpulse.v, vWorldPosition.v); } else NewtonBodyAddImpulse(m_pNewtonBody, a_vImpulse.v, GetWorldPosition().v); }
void cPhysicsBodyNewton::AddForceAtPosition(const cVector3f &a_vForce, const cVector3f &a_vPos) { m_vTotalForce += a_vForce; cVector3f vLocalPos = a_vPos - GetLocalPosition(); cVector3f vMassCentre = GetMassCentre(); if (vMassCentre != cVector3f(0,0,0)) { vMassCentre = cMath::MatrixMul(GetLocalMatrix().GetRotation(), vMassCentre); vLocalPos -= vMassCentre; } cVector3f vTorque = cMath::Vector3Cross(vLocalPos, a_vPos); m_vTotalTorque += vTorque; SetEnabled(true); }
void cPhysicsBodyNewton::AddForceAtPosition(const cVector3f &avForce, const cVector3f &avPos) { mvTotalForce += avForce; cVector3f vLocalPos = avPos - GetLocalPosition(); cVector3f vMassCentre = GetMassCentre(); if(vMassCentre != cVector3f(0,0,0)) { vMassCentre = cMath::MatrixMul(GetLocalMatrix().GetRotation(),vMassCentre); vLocalPos -= vMassCentre; } cVector3f vTorque = cMath::Vector3Cross(vLocalPos, avForce); mvTotalTorque += vTorque; SetEnabled(true); //Log("Added force %s\n",avForce.ToString().c_str()); }