在JBullet中,我使用动态盒形物体进行碰撞.它们正确地相互碰撞。但我在周旋于建设世界,遇到了一些奇怪的问题。
当我试图使凸RigidBodies (BoxShape或TriangleShape)静态(通过将质量设置为0)时,碰撞只在(0,0,0)的某个点工作,而不是给定的形状。如果它是动态的,它就能正常工作。
另一个问题--也许还有一些链接:如果我使用BvhTriangleMeshShape或GImpactMeshShape,它只有在动态的情况下才能正常工作,而不是在静态的情况下与anyway0发生冲突(尽管事实上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;有人能帮帮我吗?我使用的是2010年10月10日的JBullet版本。提前谢谢。
发布于 2015-07-07 10:40:21
看来我发现了问题。我通过更换线路解决了这个问题
MotionState motion = new DefaultMotionState(new Transform());通过
Transform transform = new Transform();
transform.setIdentity();
MotionState motion = new DefaultMotionState(transform);看起来Transform的默认构造器不会像我预期的那样创建身份转换。
https://stackoverflow.com/questions/31249008
复制相似问题