2016-06-19 3 views
0

Основываясь на этом tutorial Я добавил физику пули в мой двигатель opengl. Коллайдеры цилиндров отлично взаимодействуют с другими цилиндрами, но они, похоже, не сталкиваются с коробчатыми коллайдерами. Вот код, который я использовал для настройки моего мира:Физика пули Столкновение цилиндров с ящиком

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 

Я знаю, что этот код делает фигуры правильно, так как мой класс btIDebugDraw оказывает все формы столкновения отлично. Снова столкновение цилиндров с цилиндром хорошо, но я не могу заставить цилиндра столкнуться с столкновениями, чтобы работать.

ответ

0

Я понял. Оказывается, моя z-длина была отрицательной. Используя абсолютную математическую функцию, зафиксировал ее.

Смежные вопросы