2016-06-19 1 views
0

Basé sur ce tutorial J'ai ajouté la physique de la balle dans mon moteur opengl. Les collisionneurs de cylindres entrent parfaitement en collision avec d'autres cylindres, mais ils ne semblent pas entrer en collision avec les collisionneurs de boîtes. Voici le code que j'utilisé pour configurer mon monde:Physique de la balle Collision de cylindre à boîte

btBroadphaseInterface* broadphase = new btDbvtBroadphase(); 
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); 
btCollisionDispatcher* collisionDispatcher = new btCollisionDispatcher(collisionConfiguration); 
btSequentialImpulseConstraintSolver* collisionSolver = new btSequentialImpulseConstraintSolver(); 
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(collisionDispatcher, broadphase, collisionSolver, collisionConfiguration); 
dynamicsWorld->setGravity(btVector3(0, -10, 0)); 

// create collision shapes: 
// the box is part of the terrain and cannot move, set mass to 0 for now 
btCollisionShape* box = new btBoxShape(btVector3(box_length.x, box_length.y, box_length.z)); 
btDefaultMotionState* box_motion_state = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(box_position.x, box_position.y, box_position.z))); 
btRigidBody* box_body = new btRigidBody(btRigidBody::btRigidBodyConstructionInfo(btScalar(0.0f), box_motion_state, box, btVector3(0, 0, 0))); 
dynamicsWorld->addRigidBody(box_body); 

// the cylinder can move. Mass = 1.0 for now 
btCollisionShape* cylinder = new btCylinderShape(btVector3(radius, height, radius)); 
btDefaultMotionState* cylinder_motion_state = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(cylinder_position.x, cylinder_position.y, cylinder_position.z))); 
btRigidBody* cylinder_body = new btRigidBody(btRigidBody::btRigidBodyConstructionInfo(btScalar(1.0f), cylinder_motion_state, cylinder, btVector3(0, 0, 0))); 
dynamicsWorld->addRigidBody(cylinder_body); 

// ... Carry out same process for every other shape in scene 

Je sais que ce code fait les formes correctement que ma classe btIDebugDraw est rendu toutes les formes de collision parfaitement. Encore une fois, les collisions entre les cylindres et les cylindres sont acceptables, mais je n'arrive pas à faire fonctionner les collisions entre cylindres.

Répondre

0

Je l'ai compris. Il s'avère que ma longueur z était négative. L'utilisation de la fonction mathématique absolue l'a corrigé.