fixes in raycasting

This commit is contained in:
Erwin Coumans 2006-04-24 04:58:37 +00:00
parent c781a840b2
commit 8291024b99
3 changed files with 12 additions and 7 deletions

@ -54,8 +54,11 @@ bool SubsimplexConvexCast::calcTimeOfImpact(
//float radius = 0.01f;
SimdScalar lambda = 0.f;
SimdVector3 s = rayFromLocalA.getOrigin();
SimdVector3 r = rayToLocalA.getOrigin()-rayFromLocalA.getOrigin();
//todo: need to verify this:
//because of minkowski difference, we need the inverse direction
SimdVector3 s = -rayFromLocalA.getOrigin();
SimdVector3 r = -(rayToLocalA.getOrigin()-rayFromLocalA.getOrigin());
SimdVector3 x = s;
SimdVector3 v;
SimdVector3 arbitraryPoint = convex->LocalGetSupportingVertex(r);
@ -120,7 +123,7 @@ bool SubsimplexConvexCast::calcTimeOfImpact(
//int numiter = MAX_ITERATIONS - maxIter;
// printf("number of iterations: %d", numiter);
result.m_fraction = lambda;
result.m_normal = -n;
result.m_normal = n;
return true;
}

@ -508,6 +508,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
if (!SimdFuzzyZero(timeStep))
{
@ -1300,9 +1301,9 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* i
ConvexShape* convexShape = (ConvexShape*) body->GetCollisionShape();
VoronoiSimplexSolver simplexSolver;
//SubsimplexConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
SubsimplexConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
//GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
//ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
if (convexCaster.calcTimeOfImpact(rayFromTrans,rayToTrans,body->getCenterOfMassTransform(),body->getCenterOfMassTransform(),rayResult))
{

@ -508,6 +508,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
if (!SimdFuzzyZero(timeStep))
{
@ -1300,9 +1301,9 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* i
ConvexShape* convexShape = (ConvexShape*) body->GetCollisionShape();
VoronoiSimplexSolver simplexSolver;
//SubsimplexConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
SubsimplexConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
//GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
//ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
if (convexCaster.calcTimeOfImpact(rayFromTrans,rayToTrans,body->getCenterOfMassTransform(),body->getCenterOfMassTransform(),rayResult))
{