btTriangleShape trishapeA(btVector3(p1[0], p1[1], p1[2]), btVector3(p2[0], p2[1], p2[2]), btVector3(p3[0], p3[1], p3[2])); btTriangleShape trishapeB(btVector3(q1[0], q1[1], q1[2]), btVector3(q2[0], q2[1], q2[2]), btVector3(q3[0], q3[1], q3[2])); btVoronoiSimplexSolver sGjkSimplexSolver; btGjkPairDetector convexConvex(&trishapeA ,&trishapeB,&sGjkSimplexSolver,0); btPointCollector gjkOutput; btGjkPairDetector::ClosestPointInput input; btTransform tr; tr.setIdentity(); input.m_transformA = tr; input.m_transformB = tr; convexConvex.getClosestPoints(input, gjkOutput, 0); if (gjkOutput.m_hasResult) { VECCOPY(pa, gjkOutput.m_pointInWorld); VECCOPY(pb, gjkOutput.m_pointInWorld); VECADDFAC(pb, pb, gjkOutput.m_normalOnBInWorld, gjkOutput.m_distance); if(!real) { if(gjkOutput.m_distance < 0.0f) gjkOutput.m_distance *= -1.0f; } return gjkOutput.m_distance; }