JBullet - выпуклые фигуры не работают должным образом при статическом

Я использую динамические тела в форме коробок для столкновения в JBullet. Они правильно сталкиваются друг с другом. Но я возился с созданием мира и столкнулся с некоторыми странными проблемами.

Когда я пытаюсь сделать выпуклое RigidBodies (BoxShape или TriangleShape) статическим (установив массу на 0), столкновение работает только в некоторой точке в точке (0,0,0) вместо заданной формы. Если он динамический, он работает хорошо.

Дополнительная проблема и, возможно, есть какая-то ссылка: если я использую BvhTriangleMeshShape или GImpactMeshShape, он работает хорошо, только если он динамический и в любом случае не сталкивается, когда он статический (несмотря на то, что BvhTriangleMeshShape должен использоваться для статических тел).

Вот как я начинаю мир:

BroadphaseInterface broadphase = new DbvtBroadphase();
CollisionConfiguration collisionConfiguration = new DefaultCollisionConfiguration();
CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfiguration);
ConstraintSolver solver = new SequentialImpulseConstraintSolver();
dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
dynamicsWorld.setGravity(new Vector3f(0, 0, 0));
GImpactCollisionAlgorithm.registerAlgorithm(dispatcher);

Проблемный объект:

Vector3f inertia = new Vector3f(0, 0, 0);
MotionState motion = new DefaultMotionState(new Transform());

//BvhTriangleMeshShape shape = ShapeUtil.getShapeFromModel(testSphere);
//CompoundShape shape = ShapeUtil.getCompoundShapeFromModel(testSphere);
//GImpactMeshShape shape = ShapeUtil.getGImpactShapeFromModel(testSphere);
BoxShape shape = new BoxShape (new Vector3f(2,2,2));
//TriangleShape shape = new TriangleShape(new Vector3f(-20,0,-10), new Vector3f(20,20,-10), new Vector3f(20,-20,-10));

RigidBodyConstructionInfo constructionInfo = new RigidBodyConstructionInfo(0, motion, shape, inertia);
RigidBody body = new RigidBody(constructionInfo);
//body.setCollisionFlags(CollisionFlags.STATIC_OBJECT);

dynamicsWorld.addRigidBody(body);
this.bodies[64] = body;

Кто-нибудь может мне помочь, пожалуйста! Я использую версию JBullet от 10.10.2010. Заранее спасибо.

1 ответ

Решение

Кажется, я нашел проблему. Я решил это, заменив строку

MotionState motion = new DefaultMotionState(new Transform());

от

Transform transform = new Transform();
transform.setIdentity();
MotionState motion = new DefaultMotionState(transform);

Похоже, что конструктор Transform по умолчанию не будет создавать идентичность Transform, как я ожидал.

Другие вопросы по тегам