盒子不会在 Bullet Physics 中滚动
Box doesn't roll in Bullet Physics
如图所示,The Box 不会滚动,而是在斜坡上滑动。
下面是我如何在代码中创建框,
config = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(config);
broadphase = new btDbvtBroadphase();
solver = new btSequentialImpulseConstraintSolver();
bWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, config);
bWorld->setGravity(btVector3(0, -9.8f, 0));
// ...
btTransform t;
t.setIdentity();
t.setOrigin(btVector3(position.x, position.y, position.z));
btBoxShape* box = new btBoxShape(btVector3(size.x, size.y, size.z));
btVector3 inertia(0, 0, 0);
float mass = 10.f;
box->calculateLocalInertia(mass, inertia);
btMotionState* mState = new btDefaultMotionState(t);
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, mState, box);
//cInfo.m_restitution = 0.4f;
//cInfo.m_friction = 0.5f;
btRigidBody* body = new btRigidBody(cInfo);
//body->setLinearFactor(btVector3(1,1,0));
//body->setAngularFactor(btVector3(0,0,1));
m_impl->bWorld->addRigidBody(body);
我尝试了摩擦和其他参数,但结果是一样的。让我知道我在这里做错了什么。
您需要将 inertia
向量传递给 btRigidBodyConstructionInfo
。
检查 btRigidBodyConstructionInfo
构造函数(具有默认值的那个)的第 4 个参数。
如图所示,The Box 不会滚动,而是在斜坡上滑动。
下面是我如何在代码中创建框,
config = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(config);
broadphase = new btDbvtBroadphase();
solver = new btSequentialImpulseConstraintSolver();
bWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, config);
bWorld->setGravity(btVector3(0, -9.8f, 0));
// ...
btTransform t;
t.setIdentity();
t.setOrigin(btVector3(position.x, position.y, position.z));
btBoxShape* box = new btBoxShape(btVector3(size.x, size.y, size.z));
btVector3 inertia(0, 0, 0);
float mass = 10.f;
box->calculateLocalInertia(mass, inertia);
btMotionState* mState = new btDefaultMotionState(t);
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, mState, box);
//cInfo.m_restitution = 0.4f;
//cInfo.m_friction = 0.5f;
btRigidBody* body = new btRigidBody(cInfo);
//body->setLinearFactor(btVector3(1,1,0));
//body->setAngularFactor(btVector3(0,0,1));
m_impl->bWorld->addRigidBody(body);
我尝试了摩擦和其他参数,但结果是一样的。让我知道我在这里做错了什么。
您需要将 inertia
向量传递给 btRigidBodyConstructionInfo
。
检查 btRigidBodyConstructionInfo
构造函数(具有默认值的那个)的第 4 个参数。