Bullet物理引擎,如何冻结对象?

时间:2010-06-10 13:52:59

标签: physics game-physics bullet

使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然会对碰撞作出反应。

我尝试将其激活状态设置为DISABLE_SIMULATION,但实际上它对其他对象几乎不存在。此外,如果物体在被禁用时与其“碰撞”,则会发生奇怪的事情(物体通过静止物体落下等)。

我想,暂时将它转换为静态刚体可能会有效,但在Bullet的方面是否有现成的“原生”方法来实现这一目标?

编辑:有没有办法关闭特定对象的重力?

6 个答案:

答案 0 :(得分:7)

只需将刚体的质量设置为0,然后它变为静态......

http://bullet.googlecode.com/svn/trunk/Demos/HelloWorld/HelloWorld.cpp

答案 1 :(得分:6)

文档有点缺乏,但可以假设下面的方法可用于禁用特定主体的重力:

void btRigidBody::setGravity(const btVector3 &acceleration)

答案 2 :(得分:5)

btRigidBodysetLinearFactor(x,y,z)setAngularFactor(x,y,z)的函数可以限制沿特定轴的运动和围绕特定轴的旋转。使用所有0作为参数调用这两个函数应该停止所有运动。使用所有1再次调用它们将允许再次运动。

答案 3 :(得分:3)

将激活状态设置为零。当对象自然地睡觉时会发生这种情况。重力等等在再次被唤醒之前不会生效。

rigidBody->setActivationState(0);

然后就像任何睡眠物体一样,它会在碰撞时被唤醒,或者如果你对它施加一个力量。

答案 4 :(得分:2)

要使此方法停止演员,您必须在每个更新框架中调用此方法。

void StopActor()
{
    m_pRigidBody->setLinearVelocity(btVector3(0,0,0));
}

答案 5 :(得分:1)

将速度和动量设置为零,并将质量设置为非常大的数字。

相关问题