예제 #1
0
파일: Tutorial.cpp 프로젝트: 20-sim/bullet3
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);
	
}
예제 #2
0
파일: Tutorial.cpp 프로젝트: 20-sim/bullet3
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);
}