Beispiel #1
0
//-----------------------------------------------------------------------------
// Name: Bound::Collide
// Desc: collides this bound with a sphere
//-----------------------------------------------------------------------------
BOOL Bound::Collide( const Sphere& Sphere ) const
{
    switch( m_Type )
    {
        case Bound::Sphere_Bound:
            return IntersectSphereSphere( &GetSphere(), &Sphere );
        case Bound::Frustum_Bound:
            return ( BOOL )IntersectSphereFrustum( &Sphere, &GetFrustum() );
        case Bound::OBB_Bound:
            return IntersectSphereOrientedBox( &Sphere, &GetObb() );
        case Bound::AABB_Bound:
            return IntersectSphereAxisAlignedBox( &Sphere, &GetAabb() );
        case Bound::No_Bound:
            return TRUE;
    }

    return FALSE;
}
BOOL cCollision::CollisionSphereSphere( cSphere& SphereA,D3DXVECTOR3& vecA,cSphere& SphereB,D3DXVECTOR3& vecB )
{
	//둘다 멈춰있는 구라면 
	float LengthSqA=D3DXVec3LengthSq(&vecA);
	float LengthSqB=D3DXVec3LengthSq(&vecB);
	if ((LengthSqA==0)&&(LengthSqB==0))
	{	// 그냥 겹침검사
		return IntersectSphereSphere(SphereA,SphereB);
	}
	
	cLine LineA,LineB;
//	float CrossTA,CrossTB;

	if ((LengthSqA!=0.0f)&&(LengthSqB!=0.0f))
	{
		LineA.Make(SphereA.GetCenterPos(),SphereA.GetCenterPos()+vecA);
		LineB.Make(SphereB.GetCenterPos(),SphereB.GetCenterPos()+vecB);

		LineA.GetDirection();

	}
	else if (LengthSqA==0.0f)
	{
		LineB.Make(SphereB.GetCenterPos(),SphereB.GetCenterPos()+vecB);
	}
	else
	{ 
		LineA.Make(SphereA.GetCenterPos(),SphereA.GetCenterPos()+vecA);
	}

	

//	IntersectLineSphere()

	return TRUE;
}