///////////////////////////////////// // 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; } } }
///////////////////////////////////// // 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; } }