//----------------------------------------------------------------------------- // Transforms a point in world space to normalized space //----------------------------------------------------------------------------- const Vector & CCollisionProperty::WorldToNormalizedSpace( const Vector &in, Vector *pResult ) const { Vector vecCollisionSpace; WorldToCollisionSpace( in, &vecCollisionSpace ); CollisionToNormalizedSpace( vecCollisionSpace, pResult ); return *pResult; }
void CCollisionProperty::CalcNearestPoint(const Vector& vecWorldPt, Vector *pVecNearestWorldPt) const { Vector localPt, localClosestPt; WorldToCollisionSpace(vecWorldPt, &localPt); CalcClosestPointOnAABB(this->m_vecMins.Get(), this->m_vecMaxs.Get(), localPt, localClosestPt); CollisionToWorldSpace(localClosestPt, pVecNearestWorldPt); }
//----------------------------------------------------------------------------- // Computes the nearest point in the OBB to a point specified in world space //----------------------------------------------------------------------------- float CCollisionProperty::CalcDistanceFromPoint( const Vector &vecWorldPt ) const { // Calculate physics force Vector localPt, localClosestPt; WorldToCollisionSpace( vecWorldPt, &localPt ); CalcClosestPointOnAABB( m_vecMins.Get(), m_vecMaxs.Get(), localPt, localClosestPt ); return localPt.DistTo( localClosestPt ); }
//----------------------------------------------------------------------------- // Computes the nearest point in the OBB to a point specified in world space //----------------------------------------------------------------------------- void CCollisionProperty::CalcNearestPoint( const Vector &vecWorldPt, Vector *pVecNearestWorldPt ) const { // Calculate physics force Vector localPt, localClosestPt; WorldToCollisionSpace( vecWorldPt, &localPt ); CalcClosestPointOnAABB( m_vecMins.Get(), m_vecMaxs.Get(), localPt, localClosestPt ); CollisionToWorldSpace( localClosestPt, pVecNearestWorldPt ); }
//----------------------------------------------------------------------------- // Is a worldspace point within the bounds of the OBB? //----------------------------------------------------------------------------- bool CCollisionProperty::IsPointInBounds( const Vector &vecWorldPt ) const { Vector vecLocalSpace; WorldToCollisionSpace( vecWorldPt, &vecLocalSpace ); return ( ( vecLocalSpace.x >= m_vecMins.Get().x && vecLocalSpace.x <= m_vecMaxs.Get().x ) && ( vecLocalSpace.y >= m_vecMins.Get().y && vecLocalSpace.y <= m_vecMaxs.Get().y ) && ( vecLocalSpace.z >= m_vecMins.Get().z && vecLocalSpace.z <= m_vecMaxs.Get().z ) ); }