From 298b66ef2a483b3cb9a5261450f056d860a443dd Mon Sep 17 00:00:00 2001 From: "chappuis.daniel" Date: Sat, 6 Feb 2010 19:39:19 +0000 Subject: [PATCH] git-svn-id: https://reactphysics3d.googlecode.com/svn/trunk@267 92aac97c-a6ce-11dd-a772-7fcde58d38e6 --- .../collision/CollisionDetection.cpp | 15 ++++---- .../collision/CollisionDetection.h | 8 ++-- .../reactphysics3d/collision/SATAlgorithm.cpp | 37 ------------------- 3 files changed, 11 insertions(+), 49 deletions(-) diff --git a/sources/reactphysics3d/collision/CollisionDetection.cpp b/sources/reactphysics3d/collision/CollisionDetection.cpp index c753dd94..63fd9526 100644 --- a/sources/reactphysics3d/collision/CollisionDetection.cpp +++ b/sources/reactphysics3d/collision/CollisionDetection.cpp @@ -34,7 +34,7 @@ CollisionDetection::CollisionDetection() { // Construct the broad-phase algorithm that will be used (Separating axis with AABB) broadPhaseAlgorithm = new NoBroadPhaseAlgorithm(); - // Construct the narrow-phase algorithm that will be used (Separating axis with OBB) + // Construct the narrow-phase algorithm that will be used (Separating axis algorithm) narrowPhaseAlgorithm = new SATAlgorithm(); } @@ -43,15 +43,14 @@ CollisionDetection::~CollisionDetection() { } -// Compute the collision detection for the time interval [0, timeMax] -// The method returns true if a collision occurs in the time interval [0, timeMax] -bool CollisionDetection::computeCollisionDetection(CollisionWorld* collisionWorld) { +// Compute the collision detection +bool CollisionDetection::computeCollisionDetection(PhysicsWorld* world) { bool existsCollision = false; // True if a collision is found in the time interval [0, timeMax] - // For each pair of bodies in the collisionWorld - for(std::vector::const_iterator it1 = collisionWorld->getBodyListStartIterator(); it1 != collisionWorld->getBodyListEndIterator(); ++it1) { - for(std::vector::const_iterator it2 = it1; it2 != collisionWorld->getBodyListEndIterator(); ++it2) { + // For each pair of bodies in the physics world + for(std::vector::const_iterator it1 = world->getBodyListStartIterator(); it1 != world->getBodyListEndIterator(); ++it1) { + for(std::vector::const_iterator it2 = it1; it2 != world->getBodyListEndIterator(); ++it2) { // If both bodies are RigidBody and are different RigidBody* rigidBody1 = dynamic_cast(*it1); RigidBody* rigidBody2 = dynamic_cast(*it2); @@ -72,7 +71,7 @@ bool CollisionDetection::computeCollisionDetection(CollisionWorld* collisionWorl Vector3D test = contact->getNormal(); // TODO : Delete this // Add the new collision contact into the collision world - collisionWorld->addConstraint(contact); + world->addConstraint(contact); } } } diff --git a/sources/reactphysics3d/collision/CollisionDetection.h b/sources/reactphysics3d/collision/CollisionDetection.h index fdfa3fd8..cb066b30 100644 --- a/sources/reactphysics3d/collision/CollisionDetection.h +++ b/sources/reactphysics3d/collision/CollisionDetection.h @@ -24,7 +24,7 @@ #include "BroadPhaseAlgorithm.h" #include "NarrowPhaseAlgorithm.h" #include "../body/Body.h" -#include "../engine/CollisionWorld.h" +#include "../engine/PhysicsWorld.h" #include // ReactPhysics3D namespace @@ -44,14 +44,14 @@ class CollisionDetection { BroadPhaseAlgorithm* broadPhaseAlgorithm; // Broad-phase algorithm NarrowPhaseAlgorithm* narrowPhaseAlgorithm; // Narrow-phase algorithm - void addPossibleCollisionPair(Body* body1, Body* body2); // Add a possible collision pair of bodies in the possibleCollisionPairList - void initPossibleCollisionPairList(); // Initialize the possibleCollisionPairList + void addPossibleCollisionPair(Body* body1, Body* body2); // Add a possible collision pair of bodies in the possibleCollisionPairList + void initPossibleCollisionPairList(); // Initialize the possibleCollisionPairList public : CollisionDetection(); // Constructor ~CollisionDetection(); // Destructor - bool computeCollisionDetection(CollisionWorld* collisionWorld); // Compute the collision detection + bool computeCollisionDetection(PhysicsWorld* world); // Compute the collision detection }; // Add a possible collision pair of bodies in the possibleCollisionPairList diff --git a/sources/reactphysics3d/collision/SATAlgorithm.cpp b/sources/reactphysics3d/collision/SATAlgorithm.cpp index 84f8ca02..c442996c 100644 --- a/sources/reactphysics3d/collision/SATAlgorithm.cpp +++ b/sources/reactphysics3d/collision/SATAlgorithm.cpp @@ -29,8 +29,6 @@ // We want to use the ReactPhysics3D namespace using namespace reactphysics3d; -// TODO : Remove all the std::cout - // TODO : Check and modify all comments on this file in order that //  everything have to do with the new SAT algorithm @@ -128,14 +126,7 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const normal = computeContactNormal(obb1->getAxis(0), boxDistance); // Compute the contact normal with the correct sign } - // TODO : Delete this - std::cout << "min1 : " << min1 << std::endl; - std::cout << "max1 : " << max1 << std::endl; - std::cout << "min2 : " << min2 << std::endl; - std::cout << "max2 : " << max2 << std::endl; - // Axis A1 - //std::cout << "----- AXIS A1 -----" << std::endl; for (int i=0; i<3; ++i) { c[1][i] = obb1->getAxis(1).scalarProduct(obb2->getAxis(i)); absC[1][i] = fabs(c[1][i]); @@ -161,12 +152,6 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const normal = computeContactNormal(obb1->getAxis(1), boxDistance); // Compute the contact normal with the correct sign } - // TODO : Delete this - std::cout << "min1 : " << min1 << std::endl; - std::cout << "max1 : " << max1 << std::endl; - std::cout << "min2 : " << min2 << std::endl; - std::cout << "max2 : " << max2 << std::endl; - // Axis A2 for (int i=0; i<3; ++i) { c[2][i] = obb1->getAxis(2).scalarProduct(obb2->getAxis(i)); @@ -193,12 +178,6 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const normal = computeContactNormal(obb1->getAxis(2), boxDistance); // Compute the contact normal with the correct sign } - // TODO : Delete this - std::cout << "min1 : " << min1 << std::endl; - std::cout << "max1 : " << max1 << std::endl; - std::cout << "min2 : " << min2 << std::endl; - std::cout << "max2 : " << max2 << std::endl; - // Axis B0 udc2[0] = obb2->getAxis(0).scalarProduct(boxDistance); center = udc2[0]; @@ -219,7 +198,6 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const } // Axis B1 - //std::cout << "----- AXIS B1 -----" << std::endl; udc2[1] = obb2->getAxis(1).scalarProduct(boxDistance); center = udc2[1]; radius1 = obb1->getExtent(0)*absC[0][1] + obb1->getExtent(1)*absC[1][1] + obb1->getExtent(2) * absC[2][1]; @@ -228,10 +206,6 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const max1 = radius1; min2 = center - radius2; max2 = center + radius2; - std::cout << "min1 : " << min1 << std::endl; - std::cout << "max1 : " << max1 << std::endl; - std::cout << "min2 : " << min2 << std::endl; - std::cout << "max2 : " << max2 << std::endl; penetrationDepth = computePenetrationDepth(min1, max1, min2, max2, sideTemp); if (penetrationDepth < 0) { // We have found a separation axis, therefore the two OBBs don't collide return false; @@ -261,16 +235,10 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const normal = computeContactNormal(obb2->getAxis(2), boxDistance); // Compute the contact normal with the correct sign } - // If there exists a parallel pair of face normals if (existsParallelPair) { // There exists a parallel pair of face normals and we have already checked all the face // normals for separation. Therefore the OBBs must intersect - //std::cout << "PARALLEL PAIR" << std::endl; - //std::cout << "Current -- 1 -- MIN Points : " << currentInterval1.getMinProjectedPoints().size() << " MAX : " << currentInterval1.getMaxProjectedPoints().size() << std::endl; - //std::cout << "Current -- 1 -- min : " << currentInterval1.getMin() << std::endl; - //std::cout << "Timefirst : " << timeFirst.getValue() << std::endl; - std::cout << "CONTACT FOUND " << std::endl; // Compute the collision contact computeContact(obb1, obb2, normal.getUnit(), minPenetrationDepth, obb1->getExtremeVertices(normal), obb2->getExtremeVertices(normal.getOpposite()), contact); @@ -440,11 +408,6 @@ bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const normal = computeContactNormal(obb1->getAxis(2).crossProduct(obb2->getAxis(2)), boxDistance); // Compute the contact normal with the correct sign } - // TODO : Delete this - //(*contact) = new Contact(obb1->getBodyPointer(), obb2->getBodyPointer(), Vector3D(1,0,0), timeFirst); - std::cout << "Contact2 : " << contact << std::endl; - std::cout << "CONTACT FOUND" << std::endl; - // Compute the collision contact computeContact(obb1, obb2, normal.getUnit(), minPenetrationDepth, obb1->getExtremeVertices(normal), obb2->getExtremeVertices(normal.getOpposite()), contact);