Differential D1739 Diff 5899 extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
| Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | bool btSubsimplexConvexCast::calcTimeOfImpact( | ||||
| btVector3 supVertexA = fromA(m_convexA->localGetSupportingVertex(-r*fromA.getBasis())); | btVector3 supVertexA = fromA(m_convexA->localGetSupportingVertex(-r*fromA.getBasis())); | ||||
| btVector3 supVertexB = fromB(m_convexB->localGetSupportingVertex(r*fromB.getBasis())); | btVector3 supVertexB = fromB(m_convexB->localGetSupportingVertex(r*fromB.getBasis())); | ||||
| v = supVertexA-supVertexB; | v = supVertexA-supVertexB; | ||||
| int maxIter = MAX_ITERATIONS; | int maxIter = MAX_ITERATIONS; | ||||
| btVector3 n; | btVector3 n; | ||||
| n.setValue(btScalar(0.),btScalar(0.),btScalar(0.)); | n.setValue(btScalar(0.),btScalar(0.),btScalar(0.)); | ||||
| bool hasResult = false; | |||||
| btVector3 c; | btVector3 c; | ||||
| btScalar lastLambda = lambda; | |||||
| btScalar dist2 = v.length2(); | btScalar dist2 = v.length2(); | ||||
| #ifdef BT_USE_DOUBLE_PRECISION | #ifdef BT_USE_DOUBLE_PRECISION | ||||
| btScalar epsilon = btScalar(0.0001); | btScalar epsilon = btScalar(0.0001); | ||||
| #else | #else | ||||
| btScalar epsilon = btScalar(0.0001); | btScalar epsilon = btScalar(0.0001); | ||||
| #endif //BT_USE_DOUBLE_PRECISION | #endif //BT_USE_DOUBLE_PRECISION | ||||
| Show All 24 Lines | if ( VdotW > btScalar(0.)) | ||||
| lambda = lambda - VdotW / VdotR; | lambda = lambda - VdotW / VdotR; | ||||
| //interpolate to next lambda | //interpolate to next lambda | ||||
| // x = s + lambda * r; | // x = s + lambda * r; | ||||
| interpolatedTransA.getOrigin().setInterpolate3(fromA.getOrigin(),toA.getOrigin(),lambda); | interpolatedTransA.getOrigin().setInterpolate3(fromA.getOrigin(),toA.getOrigin(),lambda); | ||||
| interpolatedTransB.getOrigin().setInterpolate3(fromB.getOrigin(),toB.getOrigin(),lambda); | interpolatedTransB.getOrigin().setInterpolate3(fromB.getOrigin(),toB.getOrigin(),lambda); | ||||
| //m_simplexSolver->reset(); | //m_simplexSolver->reset(); | ||||
| //check next line | //check next line | ||||
| w = supVertexA-supVertexB; | w = supVertexA-supVertexB; | ||||
| lastLambda = lambda; | |||||
| n = v; | n = v; | ||||
| hasResult = true; | |||||
| } | } | ||||
| } | } | ||||
| ///Just like regular GJK only add the vertex if it isn't already (close) to current vertex, it would lead to divisions by zero and NaN etc. | ///Just like regular GJK only add the vertex if it isn't already (close) to current vertex, it would lead to divisions by zero and NaN etc. | ||||
| if (!m_simplexSolver->inSimplex(w)) | if (!m_simplexSolver->inSimplex(w)) | ||||
| m_simplexSolver->addVertex( w, supVertexA , supVertexB); | m_simplexSolver->addVertex( w, supVertexA , supVertexB); | ||||
| if (m_simplexSolver->closest(v)) | if (m_simplexSolver->closest(v)) | ||||
| { | { | ||||
| dist2 = v.length2(); | dist2 = v.length2(); | ||||
| hasResult = true; | |||||
| //todo: check this normal for validity | //todo: check this normal for validity | ||||
| //n=v; | //n=v; | ||||
| //printf("V=%f , %f, %f\n",v[0],v[1],v[2]); | //printf("V=%f , %f, %f\n",v[0],v[1],v[2]); | ||||
| //printf("DIST2=%f\n",dist2); | //printf("DIST2=%f\n",dist2); | ||||
| //printf("numverts = %i\n",m_simplexSolver->numVertices()); | //printf("numverts = %i\n",m_simplexSolver->numVertices()); | ||||
| } else | } else | ||||
| { | { | ||||
| dist2 = btScalar(0.); | dist2 = btScalar(0.); | ||||
| Show All 28 Lines | |||||