Физика пули Столкновение цилиндра с коробкой

Основываясь на этом руководстве, я добавил физику пуль в свой 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 идеально отображает все формы столкновений. Еще раз столкновение цилиндра с цилиндром в порядке, но я не могу заставить работать столкновение цилиндра с коробкой.


person Jas    schedule 19.06.2016    source источник


Ответы (1)


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

person Jas    schedule 19.06.2016