|
Sorry for misunderstanding, I have two mesh shapes (one of them is staticMesh and the other one is dynamicMesh) In the for loop, I give the different position to the dynamic mesh. And loop count is 1000.
I do not have 1000 dynamic mesh shape, I have only two mesh shapes. I just want to get constraint forces for 1000 different position of my dynamic mesh shape.
My code is very very long. Here is the simplified source code: // I create the world. //... btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,overlappingPairCache,solver,collisionConfiguration);
// I create the static mesh and add the body to the dynamics world //... btConvexTriangleMeshShape* shapeStatic = new btConvexTriangleMeshShape(staticTrimesh); //... btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shapeStatic,localInertia); body = new btRigidBody(rbInfo); dynamicsWorld->addRigidBody(body);
// I create the dynamic mesh and add the dynamic body to the dynamics world btGImpactMeshShape* m_trimeshDynamic = new btGImpactMeshShape(dynamicTrimesh); btScalar mass(1.f); m_trimeshDynamic->calculateLocalInertia(mass,localInertia); collisionShapes.push_back(m_trimeshDynamic); btDefaultMotionState* myMotionState = new btDefaultMotionState(dynamicTransform); btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,m_trimeshDynamic,localInertia); dynamicBody = new btRigidBody(rbInfo); dynamicsWorld->addRigidBody(dynamicBody);
//Loop For The Path for (unsigned int i=0; i<path.size();) {
//update translation and rotation for dynamic object float basisValue0 = path[i][1]; float basisValue1 = path[i][5]; float basisValue2 = path[i][9]; float basisValue3 = path[i][2]; float basisValue4 = path[i][6]; float basisValue5 = path[i][10]; float basisValue6 = path[i][3]; float basisValue7 = path[i][7]; float basisValue8 = path[i][11]; //update translation float tempValue0 = path[i][4]; float tempValue1 = path[i][8]; float tempValue2 = path[i][12];
//column 1 basisDynamic[0][0]= basisValue0; basisDynamic[0][1]= basisValue1; basisDynamic[0][2]= basisValue2; //column 2 basisDynamic[1][0]= basisValue3; basisDynamic[1][1]= basisValue4; basisDynamic[1][2]= basisValue5; //column 3 basisDynamic[2][0]= basisValue6; basisDynamic[2][1]= basisValue7; basisDynamic[2][2]= basisValue8;
btVector3 vectorDynamic(tempValue0, tempValue1,tempValue2); btTransform ts; ts.setBasis(basisDynamic); ts.setOrigin(vectorDynamic);
dynamicBody->setWorldTransform(ts); //I just want to get constraint forces for 1000 different position of my dynamic mesh shape. But it did not wotk:( bulletStepSimulationTime = timeStep1.elapsed_time(); timeStep1.reset(); dynamicsWorld->stepSimulation(bulletStepSimulationTime, 1);
int numManifolds = dynamicsWorld->getDispatcher()->getNumManifolds(); for (int in=0;in<numManifolds;in++) { btPersistentManifold* manifold = dynamicsWorld->getDispatcher()->getManifoldByIndexInternal(in); if (!manifold->getNumContacts()) continue;
for (int p=0;p<manifold->getNumContacts();p++) impact = manifold->getContactPoint(p).m_appliedImpulse;
//...
|