One of the last parts of the refactoring (hopefully), made most members of btCollisionObject protected.
Also did some work on improving the constraint solver.
This commit is contained in:
@@ -12,7 +12,6 @@ subject to the following restrictions:
|
||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
//#define USE_KINEMATIC_GROUND 1
|
||||
//#define PRINT_CONTACT_STATISTICS 1
|
||||
//#define REGISTER_CUSTOM_COLLISION_ALGORITHM 1
|
||||
@@ -82,7 +81,7 @@ btCollisionShape* shapePtr[numShapes] =
|
||||
///Please don't make the box sizes larger then 1000: the collision detection will be inaccurate.
|
||||
///See http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=346
|
||||
|
||||
#define USE_GROUND_PLANE 1
|
||||
//#define USE_GROUND_PLANE 1
|
||||
#ifdef USE_GROUND_PLANE
|
||||
new btStaticPlaneShape(btVector3(0,1,0),10),
|
||||
#else
|
||||
@@ -164,6 +163,19 @@ void CcdPhysicsDemo::clientMoveAndDisplay()
|
||||
|
||||
if (m_dynamicsWorld)
|
||||
{
|
||||
|
||||
//swap solver
|
||||
#ifdef COMPARE_WITH_QUICKSTEP
|
||||
if (m_debugMode & btIDebugDraw::DBG_DisableBulletLCP)
|
||||
{
|
||||
m_dynamicsWorld->setConstraintSolver( new OdeConstraintSolver());
|
||||
} else
|
||||
{
|
||||
m_dynamicsWorld->setConstraintSolver( new btSequentialImpulseConstraintSolver());
|
||||
}
|
||||
#endif //COMPARE_WITH_QUICKSTEP
|
||||
|
||||
|
||||
//during idle mode, just run 1 simulation step maximum
|
||||
int maxSimSubSteps = m_idle ? 1 : 1;
|
||||
if (m_idle)
|
||||
@@ -356,10 +368,10 @@ void CcdPhysicsDemo::initPhysics()
|
||||
|
||||
|
||||
// Only do CCD if motion in one timestep (1.f/60.f) exceeds CUBE_HALF_EXTENTS
|
||||
body->m_ccdSquareMotionThreshold = CUBE_HALF_EXTENTS;
|
||||
body->setCcdSquareMotionThreshold( CUBE_HALF_EXTENTS );
|
||||
|
||||
//Experimental: better estimation of CCD Time of Impact:
|
||||
body->m_ccdSweptSphereRadius = 0.2*CUBE_HALF_EXTENTS;
|
||||
body->setCcdSweptSphereRadius( 0.2*CUBE_HALF_EXTENTS );
|
||||
|
||||
#ifdef USER_DEFINED_FRICTION_MODEL
|
||||
///Advanced use: override the friction solver
|
||||
|
||||
@@ -543,9 +543,9 @@ void ColladaConverter::prepareConstraints(ConstraintInput& input)
|
||||
|
||||
for (int i=0;i<m_numObjects;i++)
|
||||
{
|
||||
if (m_rigidBodies[i]->m_userObjectPointer)
|
||||
if (m_rigidBodies[i]->getUserPointer())
|
||||
{
|
||||
char* bodyName = (char*)m_rigidBodies[i]->m_userObjectPointer;
|
||||
char* bodyName = (char*)m_rigidBodies[i]->getUserPointer();
|
||||
if (!strcmp(bodyName,orgUri0))
|
||||
{
|
||||
body0=m_rigidBodies[i];
|
||||
@@ -707,7 +707,7 @@ void ColladaConverter::PreparePhysicsObject(struct btRigidBodyInput& input, bool
|
||||
if (body)
|
||||
{
|
||||
//bodyName is used as identifier for constraints
|
||||
body->m_userObjectPointer = (void*)input.m_bodyName;
|
||||
body->setUserPointer((void*)input.m_bodyName);
|
||||
m_rigidBodies[m_numObjects] = body;
|
||||
m_numObjects++;
|
||||
}
|
||||
@@ -737,7 +737,7 @@ bool ColladaConverter::saveAs(const char* filename)
|
||||
|
||||
{
|
||||
|
||||
btVector3 np = m_rigidBodies[i]->m_worldTransform.getOrigin();
|
||||
btVector3 np = m_rigidBodies[i]->getWorldTransform().getOrigin();
|
||||
domFloat3 newPos = m_colladadomNodes[i]->getTranslate_array().get(0)->getValue();
|
||||
newPos.set(0,np[0]);
|
||||
newPos.set(1,np[1]);
|
||||
|
||||
@@ -65,8 +65,8 @@ void CollisionInterfaceDemo::initPhysics()
|
||||
btMatrix3x3 basisB;
|
||||
basisB.setIdentity();
|
||||
|
||||
objects[0].m_worldTransform.setBasis(basisA);
|
||||
objects[1].m_worldTransform.setBasis(basisB);
|
||||
objects[0].getWorldTransform().setBasis(basisA);
|
||||
objects[1].getWorldTransform().setBasis(basisB);
|
||||
|
||||
//btPoint3 points0[3]={btPoint3(1,0,0),btPoint3(0,1,0),btPoint3(0,0,1)};
|
||||
//btPoint3 points1[5]={btPoint3(1,0,0),btPoint3(0,1,0),btPoint3(0,0,1),btPoint3(0,0,-1),btPoint3(-1,-1,0)};
|
||||
@@ -78,8 +78,8 @@ void CollisionInterfaceDemo::initPhysics()
|
||||
//ConvexHullShape hullB(points1,4);
|
||||
//hullB.setLocalScaling(btVector3(4,4,4));
|
||||
|
||||
objects[0].m_collisionShape = boxA;//&hullA;
|
||||
objects[1].m_collisionShape = boxB;//&hullB;
|
||||
objects[0].setCollisionShape(boxA);//&hullA;
|
||||
objects[1].setCollisionShape(boxB);//&hullB;
|
||||
|
||||
btCollisionDispatcher* dispatcher = new btCollisionDispatcher;
|
||||
btVector3 worldAabbMin(-1000,-1000,-1000);
|
||||
@@ -130,7 +130,7 @@ void CollisionInterfaceDemo::displayCallback(void) {
|
||||
btPersistentManifold* contactManifold = collisionWorld->getDispatcher()->getManifoldByIndexInternal(i);
|
||||
btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
|
||||
btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
|
||||
contactManifold->refreshContactPoints(obA->m_worldTransform,obB->m_worldTransform);
|
||||
contactManifold->refreshContactPoints(obA->getWorldTransform(),obB->getWorldTransform());
|
||||
|
||||
int numContacts = contactManifold->getNumContacts();
|
||||
for (int j=0;j<numContacts;j++)
|
||||
@@ -161,17 +161,17 @@ void CollisionInterfaceDemo::displayCallback(void) {
|
||||
for (i=0;i<numObjects;i++)
|
||||
{
|
||||
|
||||
objects[i].m_worldTransform.getOpenGLMatrix( m );
|
||||
GL_ShapeDrawer::drawOpenGL(m,objects[i].m_collisionShape,btVector3(1,1,1),getDebugMode());
|
||||
objects[i].getWorldTransform().getOpenGLMatrix( m );
|
||||
GL_ShapeDrawer::drawOpenGL(m,objects[i].getCollisionShape(),btVector3(1,1,1),getDebugMode());
|
||||
|
||||
}
|
||||
|
||||
|
||||
btQuaternion orn;
|
||||
orn.setEuler(yaw,pitch,roll);
|
||||
objects[1].m_worldTransform.setOrigin(objects[1].m_worldTransform.getOrigin()+btVector3(0,-0.01,0));
|
||||
objects[1].getWorldTransform().setOrigin(objects[1].getWorldTransform().getOrigin()+btVector3(0,-0.01,0));
|
||||
|
||||
objects[0].m_worldTransform.setRotation(orn);
|
||||
objects[0].getWorldTransform().setRotation(orn);
|
||||
|
||||
pitch += 0.005f;
|
||||
yaw += 0.01f;
|
||||
@@ -182,8 +182,8 @@ void CollisionInterfaceDemo::displayCallback(void) {
|
||||
|
||||
void CollisionInterfaceDemo::clientResetScene()
|
||||
{
|
||||
objects[0].m_worldTransform.setOrigin(btVector3(0.0f,3.f,0.f));
|
||||
objects[1].m_worldTransform.setOrigin(btVector3(0.0f,9.f,0.f));
|
||||
objects[0].getWorldTransform().setOrigin(btVector3(0.0f,3.f,0.f));
|
||||
objects[1].getWorldTransform().setOrigin(btVector3(0.0f,9.f,0.f));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -60,12 +60,12 @@ bool CustomMaterialCombinerCallback(btManifoldPoint& cp, const btCollisionObject
|
||||
float restitution0 = colObj0->getRestitution();
|
||||
float restitution1 = colObj1->getRestitution();
|
||||
|
||||
if (colObj0->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)
|
||||
if (colObj0->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)
|
||||
{
|
||||
friction0 = 1.0;//partId0,index0
|
||||
restitution0 = 0.f;
|
||||
}
|
||||
if (colObj1->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)
|
||||
if (colObj1->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)
|
||||
{
|
||||
if (index1&1)
|
||||
{
|
||||
@@ -161,10 +161,10 @@ void ConcaveDemo::initPhysics()
|
||||
|
||||
btRigidBody* staticBody = localCreateRigidBody(mass, startTransform,trimeshShape);
|
||||
|
||||
staticBody->m_collisionFlags |=btCollisionObject::CF_STATIC_OBJECT;
|
||||
staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_STATIC_OBJECT);
|
||||
|
||||
//enable custom material callback
|
||||
staticBody->m_collisionFlags |= btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK;
|
||||
staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK);
|
||||
|
||||
{
|
||||
for (int i=0;i<10;i++)
|
||||
|
||||
@@ -435,8 +435,8 @@ void DemoApplication::shootBox(const btVector3& destination)
|
||||
linVel.normalize();
|
||||
linVel*=m_ShootBoxInitialSpeed;
|
||||
|
||||
body->m_worldTransform.setOrigin(camPos);
|
||||
body->m_worldTransform.setRotation(btQuaternion(0,0,0,1));
|
||||
body->getWorldTransform().setOrigin(camPos);
|
||||
body->getWorldTransform().setRotation(btQuaternion(0,0,0,1));
|
||||
body->setLinearVelocity(linVel);
|
||||
body->setAngularVelocity(btVector3(0,0,0));
|
||||
}
|
||||
@@ -597,7 +597,7 @@ void DemoApplication::mouseFunc(int button, int state, int x, int y)
|
||||
//printf("removed constraint %i",gPickingConstraintId);
|
||||
m_pickConstraint = 0;
|
||||
pickedBody->ForceActivationState(ACTIVE_TAG);
|
||||
pickedBody->m_deactivationTime = 0.f;
|
||||
pickedBody->setDeactivationTime( 0.f );
|
||||
pickedBody = 0;
|
||||
}
|
||||
|
||||
@@ -690,7 +690,7 @@ void DemoApplication::renderme()
|
||||
myMotionState->m_graphicsWorldTrans.getOpenGLMatrix(m);
|
||||
} else
|
||||
{
|
||||
colObj->m_worldTransform.getOpenGLMatrix(m);
|
||||
colObj->getWorldTransform().getOpenGLMatrix(m);
|
||||
}
|
||||
|
||||
btVector3 wireColor(1.f,1.0f,0.5f); //wants deactivation
|
||||
@@ -720,7 +720,7 @@ void DemoApplication::renderme()
|
||||
}
|
||||
}
|
||||
|
||||
GL_ShapeDrawer::drawOpenGL(m,colObj->m_collisionShape,wireColor,getDebugMode());
|
||||
GL_ShapeDrawer::drawOpenGL(m,colObj->getCollisionShape(),wireColor,getDebugMode());
|
||||
}
|
||||
|
||||
|
||||
@@ -832,8 +832,8 @@ void DemoApplication::clientResetScene()
|
||||
{
|
||||
btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState();
|
||||
myMotionState->m_graphicsWorldTrans = myMotionState->m_startWorldTrans;
|
||||
colObj->m_worldTransform = myMotionState->m_graphicsWorldTrans;
|
||||
colObj->m_interpolationWorldTransform = myMotionState->m_startWorldTrans;
|
||||
colObj->setWorldTransform( myMotionState->m_graphicsWorldTrans );
|
||||
colObj->setInterpolationWorldTransform( myMotionState->m_startWorldTrans );
|
||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
||||
if (body && !body->isStaticObject())
|
||||
{
|
||||
|
||||
@@ -123,7 +123,7 @@ void UserCollisionAlgorithm::initPhysics()
|
||||
|
||||
btRigidBody* staticBody= localCreateRigidBody(mass, startTransform,trimeshShape);
|
||||
//enable custom material callback
|
||||
staticBody->m_collisionFlags |= btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK;
|
||||
staticBody->setCollisionFlags(staticBody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK);
|
||||
|
||||
{
|
||||
for (int i=0;i<10;i++)
|
||||
|
||||
Reference in New Issue
Block a user