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

sun*_*ide 15 physics bullet game-physics

使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然响应碰撞.

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

我想,暂时将它转换为静态刚体可能会起作用,但是在Bullet的方面是否存在一种现有的"原生"方式来实现这一点?

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

小智 7

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

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


Sta*_*fan 6

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

void btRigidBody::setGravity(const btVector3 &acceleration)
Run Code Online (Sandbox Code Playgroud)


non*_*unk 5

有功能btRigidBody叫做setLinearFactor(x,y,z)setAngularFactor(x,y,z),让你沿着关于特定轴的特定轴和旋转分别限制运动.用all 0作为参数调用这两个函数应该停止所有动作.再次与他们一起召唤他们1将允许再次行动.


wes*_*ton 5

将激活状态设置为零。这就是对象自然睡眠时发生的情况。重力等直到再次被唤醒才会生效。

rigidBody->setActivationState(0);
Run Code Online (Sandbox Code Playgroud)

然后就像任何沉睡的物体一样,它会在碰撞或施加力时被唤醒。