Example #1
0
/////////////////////////////////////
// Purpose:	get the object's axis
//			aligned bounding box
//			(model space)
// Output:	pMin and pMax set
// Return:	none
/////////////////////////////////////
void IgfxObject::GetAABB(Vec3D *pMin, Vec3D *pMax)
{
	if(m_pCalModel)
	{
		CalSkeleton *pSkel = m_pCalModel->getSkeleton();
		pSkel->getBoneBoundingBox((f32*)(*pMin), (f32*)(*pMax));
	}
	else
	{
		gfxMesh *pMesh = m_mdl->GetXMesh();

		if(pMesh)
		{
			*pMin = pMesh->mins;
			*pMax = pMesh->maxs;
		}
	}
}
Example #2
0
/////////////////////////////////////
// Purpose:	get the object's axis
//			aligned bounding box
//			(world space)
// Output:	pMin and pMax set
// Return:	none
/////////////////////////////////////
void IgfxObject::GetAABBWorld(Vec3D *pMin, Vec3D *pMax)
{
	Vec3D sMin, sMax;

	if(m_pCalModel)
	{
		CalSkeleton *pSkel = m_pCalModel->getSkeleton();
		pSkel->getBoneBoundingBox((f32*)(*pMin), (f32*)(*pMax));
	}
	else
	{
		gfxMesh *pMesh = m_mdl->GetXMesh();

		if(pMesh)
		{
			*pMin = pMesh->mins;
			*pMax = pMesh->maxs;
		}
	}

	//set to world
	_ComputeWrldMtx();

	Vec3DTransformCoord(pMin, &m_wrldMtx[FXMTX_NORMAL], &sMin);
	Vec3DTransformCoord(pMax, &m_wrldMtx[FXMTX_NORMAL], &sMax);

	//set the AABB again
	if(sMin.x < sMax.x) { pMin->x = sMin.x; pMax->x = sMax.x; }
	else { pMax->x = sMin.x; pMin->x = sMax.x; }

	if(sMin.y < sMax.y) { pMin->y = sMin.y; pMax->y = sMax.y; }
	else { pMax->y = sMin.y; pMin->y = sMax.y; }

	if(sMin.z < sMax.z) { pMin->z = sMin.z; pMax->z = sMax.z; }
	else { pMax->z = sMin.z; pMin->z = sMax.z; }
}