本文整理汇总了C++中Box::BoxToAABBWorld方法的典型用法代码示例。如果您正苦于以下问题:C++ Box::BoxToAABBWorld方法的具体用法?C++ Box::BoxToAABBWorld怎么用?C++ Box::BoxToAABBWorld使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Box
的用法示例。
在下文中一共展示了Box::BoxToAABBWorld方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CheckStaticCollisions
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Function Name: CheckStaticCollisions()
// Purpose: Check collisions with all static objects
// Original Author: Ethan Pendergraft
// Creation Date: 6/13/2012
// Last Modification By:
// Last Modification Date:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CComponent_CrateCollision::CheckStaticCollisions( CComponent_Collision* pCurCollision, CCollisionVolume* pCurVolume, float fDT )
{
Box* BoxCollisionVolume = (Box*)m_pParent->GetCollidableObject();
vec2f Contact;
vec2f Direction;
switch( pCurVolume->GetVolumeType() )
{
case VMT_AABB:
{
// handle crate collision
// with world AABB
if ( BoxCollisionVolume->BoxToAABBWorld( *(AABB*)pCurVolume, Contact, Direction ) )
{
// Create an offset vector.
vec3f MoveDirection = vec3f (Direction.x, Direction.y, 0.0f);
//Save the last offset for use elsewhere.
m_fLastOffset = vec3f( Direction.x, Direction.y, 0.0f );
// If it has a physics Box.
//if(!m_bPlayed && !m_bCollideSoundCap)
//{
// if(m_nCollisionCount < 5)
// {
// m_pSoundComponent->PlaySound(SFX_CRATE_CRASH);
// m_bPlayed = true;
// ++m_nCollisionCount;
// }
// else
// {
// m_bCollideSoundCap = true;
// }
//}
////////// FRICTION
vec3f fCross;
cross_product( fCross, MoveDirection, vec3f( 0.0f, 0.0f, 1.0f ) );
float3 fProj = prjPoint2Line( m_pPhysicsBox->m_pPoints[0]->m_CurrPos, m_pPhysicsBox->m_pPoints[0]->m_PrevPos, m_pPhysicsBox->m_pPoints[0]->m_PrevPos + fCross );
float3 fPrevPush = fProj - m_pPhysicsBox->m_pPoints[0]->m_PrevPos;
fPrevPush *= -0.1f;
//////////
vec3f NormalizedDirection = vec3f (Direction.x, Direction.y, 0.0f).normalize();
float fDotProductUp = dot_product( NormalizedDirection, vec3f( 0.0f, 1.0f, 0.0f ) );
float fDotProductSide = dot_product( NormalizedDirection, vec3f( 1.0f, 0.0f, 0.0f ) );
if( fDotProductUp > 0.5f )
{
m_bCollidingGround = true;
}
if( abs( fDotProductSide ) > 0.5f )
{
fPrevPush = vec3f( 0.0f, 0.0f, 0.0f );
}
CleanOffset( vec2f( MoveDirection.x, MoveDirection.y ) );
CleanForce( vec2f( fPrevPush.x, fPrevPush.y ) + vec2f( MoveDirection.x, MoveDirection.y ) * 0.1f );
m_bCol = true;
}
break;
}
default:
break;
}
}