git-svn-id: https://reactphysics3d.googlecode.com/svn/trunk@328 92aac97c-a6ce-11dd-a772-7fcde58d38e6

This commit is contained in:
chappuis.daniel 2010-06-08 21:03:11 +00:00
parent 903e543695
commit 99de21bcaa
5 changed files with 16 additions and 10 deletions

View File

@ -154,7 +154,7 @@ inline void BodyState::setMassInverse(Kilogram massInverse) {
}
// Get the inverse of the inertia tensor
Matrix3x3 BodyState::getInertiaTensorInverse() const {
inline Matrix3x3 BodyState::getInertiaTensorInverse() const {
return inertiaTensorInverse;
}

View File

@ -63,10 +63,10 @@ class RigidBody : public Body {
void setInterpolationFactor(double factor); // Set the interpolation factor of the body
BodyState getInterpolatedState() const; // Compute and return the interpolated state
bool getIsMotionEnabled() const; // Return if the rigid body can move
void setIsMotionEnabled(bool isMotionEnabled); // Set the value to true if the body can move
void setIsMotionEnabled(bool isMotionEnabled); // Set the value to true if the body can move
void setLinearVelocity(const Vector3D& linearVelocity); // Set the linear velocity of the rigid body
void updatePreviousBodyState(); // Update the previous body state of the body
OBB getOBB() const; // Return the oriented bounding box of the rigid body
const OBB* const getOBB() const; // Return the oriented bounding box of the rigid body
void update(); // Update the rigid body in order to reflect a change in the body state
};
@ -128,8 +128,8 @@ inline void RigidBody::updatePreviousBodyState() {
}
// Return the oriented bounding box of the rigid body
inline OBB RigidBody::getOBB() const {
return obb;
inline const OBB* const RigidBody::getOBB() const {
return &obb;
}
// Update the rigid body in order to reflect a change in the body state

View File

@ -76,13 +76,13 @@ void CollisionDetection::computeBroadPhase() {
RigidBody* rigidBody2 = dynamic_cast<RigidBody*>(*it2);
if(rigidBody1 && rigidBody2 && rigidBody1 != rigidBody2) {
// Get the oriented bounding boxes of the two bodies
OBB obb1 = rigidBody1->getOBB();
OBB obb2 = rigidBody2->getOBB();
const OBB* obb1 = rigidBody1->getOBB();
const OBB* obb2 = rigidBody2->getOBB();
// Use the broad-phase algorithm to decide if the two bodies can collide
if(broadPhaseAlgorithm->testCollisionPair(&obb1, &obb2)) {
if(broadPhaseAlgorithm->testCollisionPair(obb1, obb2)) {
// If the broad-phase thinks that the two bodies collide, we add the in the possible collision pair list
possibleCollisionPairs.push_back(std::pair<const OBB*, const OBB*>(&obb1, &obb2));
possibleCollisionPairs.push_back(std::pair<const OBB*, const OBB*>(obb1, obb2));
}
}
}

View File

@ -20,6 +20,8 @@
// Libraries
#include "ContactInfo.h"
using namespace reactphysics3d;
// Constructor
ContactInfo::ContactInfo(const OBB* const obb1, const OBB* const obb2, const Vector3D& normal, double penetrationDepth)
: obb1(obb1), obb2(obb2), normal(normal), penetrationDepth(penetrationDepth) {

View File

@ -25,6 +25,7 @@
#include <algorithm>
#include <cfloat>
#include <cassert>
#include <iostream> // TODO : Delete this
// We want to use the ReactPhysics3D namespace
using namespace reactphysics3d;
@ -45,10 +46,12 @@ SATAlgorithm::~SATAlgorithm() {
// Return true and compute a contact info if the two bounding volume collide.
// The method returns false if there is no collision between the two bounding volumes.
bool SATAlgorithm::testCollision(const BoundingVolume* const boundingVolume1, const BoundingVolume* const boundingVolume2, ContactInfo*& contactInfo) {
assert(boundingVolume1 != boundingVolume2);
// If the two bounding volumes are OBB
//const OBB* const obb1 = dynamic_cast<const OBB* const>(boundingVolume1);
//const OBB* const obb2 = dynamic_cast<const OBB* const>(boundingVolume2);
const OBB* const obb1 = dynamic_cast<const OBB* const>(boundingVolume1);
const OBB* const obb2 = dynamic_cast<const OBB* const>(boundingVolume2);
@ -72,6 +75,7 @@ bool SATAlgorithm::testCollision(const BoundingVolume* const boundingVolume1, co
// normal of OBB 1 and Bj for the jth face normal of OBB 2.
bool SATAlgorithm::computeCollisionTest(const OBB* const obb1, const OBB* const obb2, ContactInfo*& contactInfo) const {
double center; // Center of a projection interval
double radius1; // Radius of projection interval [min1, max1]
double radius2; // Radius of projection interval [min2, max2]