From e585187b248f48b3c6e9247b49fa07c6565d65e5 Mon Sep 17 00:00:00 2001 From: maximius Date: Sat, 17 Oct 2009 15:51:44 -0700 Subject: *Backed out changeset 3be01fb200a5 --HG-- branch : trunk --- src/shared/vmap/BaseModel.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/shared/vmap/BaseModel.cpp') diff --git a/src/shared/vmap/BaseModel.cpp b/src/shared/vmap/BaseModel.cpp index 335a9a128e0..2ffd5672218 100644 --- a/src/shared/vmap/BaseModel.cpp +++ b/src/shared/vmap/BaseModel.cpp @@ -17,12 +17,16 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #include "BaseModel.h" #include "VMapTools.h" + using namespace G3D; + namespace VMAP { //========================================================== + void BaseModel::getMember(Array& pMembers) { for(unsigned int i=0; i0) iTreeNodes = new TreeNode[iNNodes]; if(iNTriangles >0) iTriangles = new TriangleBox[iNTriangles]; } + //========================================================== + void BaseModel::free() { if(getTriangles() != 0) delete [] getTriangles(); setNTriangles(0); if(getTreeNodes() != 0) delete [] getTreeNodes(); setNNodes(0); } + //========================================================== + void BaseModel::intersect(const G3D::AABox& pBox, const G3D::Ray& pRay, float& pMaxDist, G3D::Vector3& pOutLocation, G3D::Vector3& /*pOutNormal*/) const { bool isInside = false; + float d = MyCollisionDetection::collisionLocationForMovingPointFixedAABox( pRay.origin, pRay.direction, pBox, @@ -64,7 +76,9 @@ namespace VMAP pMaxDist = d; } } + //========================================================== + bool BaseModel::intersect(const G3D::AABox& pBox, const G3D::Ray& pRay, float& pMaxDist) const { // See if the ray will ever hit this node or its children @@ -73,9 +87,12 @@ namespace VMAP bool rayWillHitBounds = MyCollisionDetection::collisionLocationForMovingPointFixedAABox( pRay.origin, pRay.direction, pBox, location, alreadyInsideBounds); + bool canHitThisNode = (alreadyInsideBounds || (rayWillHitBounds && ((location - pRay.origin).squaredLength() < (pMaxDist * pMaxDist)))); + return canHitThisNode; } + } // VMAP -- cgit v1.2.3