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, как я ожидал.