merged most of the changes from the branch into trunk, except for COLLADA, libxml and glut glitches.
Still need to verify to make sure no unwanted renaming is introduced.
This commit is contained in:
@@ -22,37 +22,37 @@ subject to the following restrictions:
|
||||
#include "btPointCollector.h"
|
||||
|
||||
|
||||
GjkConvexCast::GjkConvexCast(ConvexShape* convexA,ConvexShape* convexB,SimplexSolverInterface* simplexSolver)
|
||||
btGjkConvexCast::btGjkConvexCast(btConvexShape* convexA,btConvexShape* convexB,btSimplexSolverInterface* simplexSolver)
|
||||
:m_simplexSolver(simplexSolver),
|
||||
m_convexA(convexA),
|
||||
m_convexB(convexB)
|
||||
{
|
||||
}
|
||||
|
||||
bool GjkConvexCast::calcTimeOfImpact(
|
||||
const SimdTransform& fromA,
|
||||
const SimdTransform& toA,
|
||||
const SimdTransform& fromB,
|
||||
const SimdTransform& toB,
|
||||
bool btGjkConvexCast::calcTimeOfImpact(
|
||||
const btTransform& fromA,
|
||||
const btTransform& toA,
|
||||
const btTransform& fromB,
|
||||
const btTransform& toB,
|
||||
CastResult& result)
|
||||
{
|
||||
|
||||
|
||||
MinkowskiSumShape combi(m_convexA,m_convexB);
|
||||
MinkowskiSumShape* convex = &combi;
|
||||
btMinkowskiSumShape combi(m_convexA,m_convexB);
|
||||
btMinkowskiSumShape* convex = &combi;
|
||||
|
||||
SimdTransform rayFromLocalA;
|
||||
SimdTransform rayToLocalA;
|
||||
btTransform rayFromLocalA;
|
||||
btTransform rayToLocalA;
|
||||
|
||||
rayFromLocalA = fromA.inverse()* fromB;
|
||||
rayToLocalA = toA.inverse()* toB;
|
||||
|
||||
|
||||
SimdTransform trA,trB;
|
||||
trA = SimdTransform(fromA);
|
||||
trB = SimdTransform(fromB);
|
||||
trA.setOrigin(SimdPoint3(0,0,0));
|
||||
trB.setOrigin(SimdPoint3(0,0,0));
|
||||
btTransform trA,trB;
|
||||
trA = btTransform(fromA);
|
||||
trB = btTransform(fromB);
|
||||
trA.setOrigin(btPoint3(0,0,0));
|
||||
trB.setOrigin(btPoint3(0,0,0));
|
||||
|
||||
convex->SetTransformA(trA);
|
||||
convex->SetTransformB(trB);
|
||||
@@ -62,38 +62,38 @@ bool GjkConvexCast::calcTimeOfImpact(
|
||||
|
||||
float radius = 0.01f;
|
||||
|
||||
SimdScalar lambda = 0.f;
|
||||
SimdVector3 s = rayFromLocalA.getOrigin();
|
||||
SimdVector3 r = rayToLocalA.getOrigin()-rayFromLocalA.getOrigin();
|
||||
SimdVector3 x = s;
|
||||
SimdVector3 n;
|
||||
btScalar lambda = 0.f;
|
||||
btVector3 s = rayFromLocalA.getOrigin();
|
||||
btVector3 r = rayToLocalA.getOrigin()-rayFromLocalA.getOrigin();
|
||||
btVector3 x = s;
|
||||
btVector3 n;
|
||||
n.setValue(0,0,0);
|
||||
bool hasResult = false;
|
||||
SimdVector3 c;
|
||||
btVector3 c;
|
||||
|
||||
float lastLambda = lambda;
|
||||
|
||||
//first solution, using GJK
|
||||
|
||||
//no penetration support for now, perhaps pass a pointer when we really want it
|
||||
ConvexPenetrationDepthSolver* penSolverPtr = 0;
|
||||
btConvexPenetrationDepthSolver* penSolverPtr = 0;
|
||||
|
||||
SimdTransform identityTrans;
|
||||
btTransform identityTrans;
|
||||
identityTrans.setIdentity();
|
||||
|
||||
SphereShape raySphere(0.0f);
|
||||
btSphereShape raySphere(0.0f);
|
||||
raySphere.SetMargin(0.f);
|
||||
|
||||
SimdTransform sphereTr;
|
||||
btTransform sphereTr;
|
||||
sphereTr.setIdentity();
|
||||
sphereTr.setOrigin( rayFromLocalA.getOrigin());
|
||||
|
||||
result.DrawCoordSystem(sphereTr);
|
||||
{
|
||||
PointCollector pointCollector1;
|
||||
GjkPairDetector gjk(&raySphere,convex,m_simplexSolver,penSolverPtr);
|
||||
btPointCollector pointCollector1;
|
||||
btGjkPairDetector gjk(&raySphere,convex,m_simplexSolver,penSolverPtr);
|
||||
|
||||
GjkPairDetector::ClosestPointInput input;
|
||||
btGjkPairDetector::ClosestPointInput input;
|
||||
input.m_transformA = sphereTr;
|
||||
input.m_transformB = identityTrans;
|
||||
gjk.GetClosestPoints(input,pointCollector1,0);
|
||||
@@ -107,7 +107,7 @@ bool GjkConvexCast::calcTimeOfImpact(
|
||||
|
||||
if (hasResult)
|
||||
{
|
||||
SimdScalar dist;
|
||||
btScalar dist;
|
||||
dist = (c-x).length();
|
||||
if (dist < radius)
|
||||
{
|
||||
@@ -120,7 +120,7 @@ bool GjkConvexCast::calcTimeOfImpact(
|
||||
{
|
||||
|
||||
n = x - c;
|
||||
SimdScalar nDotr = n.dot(r);
|
||||
btScalar nDotr = n.dot(r);
|
||||
|
||||
if (nDotr >= -(SIMD_EPSILON*SIMD_EPSILON))
|
||||
return false;
|
||||
@@ -135,9 +135,9 @@ bool GjkConvexCast::calcTimeOfImpact(
|
||||
|
||||
sphereTr.setOrigin( x );
|
||||
result.DrawCoordSystem(sphereTr);
|
||||
PointCollector pointCollector;
|
||||
GjkPairDetector gjk(&raySphere,convex,m_simplexSolver,penSolverPtr);
|
||||
GjkPairDetector::ClosestPointInput input;
|
||||
btPointCollector pointCollector;
|
||||
btGjkPairDetector gjk(&raySphere,convex,m_simplexSolver,penSolverPtr);
|
||||
btGjkPairDetector::ClosestPointInput input;
|
||||
input.m_transformA = sphereTr;
|
||||
input.m_transformB = identityTrans;
|
||||
gjk.GetClosestPoints(input,pointCollector,0);
|
||||
|
||||
Reference in New Issue
Block a user