void Tutorial::tutorialSolveContactConstraintUpdate(float deltaTime,LWContactPoint& contact) { ComputeClosestPointsSphereSphere(m_bodies[0]->m_collisionShape.m_sphere, m_bodies[0]->m_worldPose, m_bodies[1]->m_collisionShape.m_sphere, m_bodies[1]->m_worldPose, contact); }
void Tutorial::tutorialCollisionUpdate(float deltaTime,LWContactPoint& contact) { m_bodies[1]->m_worldPose.m_position.z = 3; ComputeClosestPointsSphereSphere(m_bodies[0]->m_collisionShape.m_sphere, m_bodies[0]->m_worldPose, m_bodies[1]->m_collisionShape.m_sphere, m_bodies[1]->m_worldPose, contact); switch (m_stage) { case 0: { m_bodies[0]->m_angularVelocity=b3MakeVector3(0,0,0); m_bodies[0]->m_linearVelocity=b3MakeVector3(1,0,0); break; } case 1: { m_bodies[0]->m_linearVelocity=b3MakeVector3(-1,0,0); break; } case 2: { m_bodies[0]->m_linearVelocity=b3MakeVector3(0,1,0); break; } case 3: { m_bodies[0]->m_linearVelocity=b3MakeVector3(0,-1,0); break; } case 4: { m_bodies[0]->m_linearVelocity=b3MakeVector3(0,0,1); break; } case 5: { m_bodies[0]->m_linearVelocity=b3MakeVector3(0,0,-1); break; } default:{} }; m_counter++; if (m_counter>120) { m_counter=0; m_stage++; if (m_stage>5) m_stage=0; } }
B3_FORCE_INLINE void detectCollisionSphereSphere(RTB3CollisionWorld* world, int colA, int shapeIndexA, int colB, int shapeIndexB, plContactCache* contactCache) { const b3Scalar radiusA = world->m_childShapes[shapeIndexA].m_radius; const b3Scalar radiusB = world->m_childShapes[shapeIndexB].m_radius; const b3Transform& trA = world->m_collidableTransforms[colA]; const b3Vector3& sphereALocalPos = world->m_childShapes[shapeIndexA].m_childPosition; b3Vector3 spherePosAWorld = trA(sphereALocalPos); //b3Vector3 spherePosAWorld = b3QuatRotate( world->m_collidableOrientations[colA], sphereALocalPos ) + (world->m_collidablePositions[colA]); const b3Transform& trB = world->m_collidableTransforms[colB]; const b3Vector3& sphereBLocalPos = world->m_childShapes[shapeIndexB].m_childPosition; b3Vector3 spherePosBWorld = trB(sphereBLocalPos); //b3Vector3 spherePosBWorld = b3QuatRotate( world->m_collidableOrientations[colB], sphereBLocalPos ) + (world->m_collidablePositions[colB]); ComputeClosestPointsSphereSphere(radiusA, spherePosAWorld, radiusB, spherePosBWorld, contactCache); }