使用Bullet 2.76我试图冻结一个物体(刚体),使其立即停止移动,但仍然会对碰撞作出反应。
我尝试将其激活状态设置为DISABLE_SIMULATION,但实际上它对其他对象几乎不存在。此外,如果物体在被禁用时与其“碰撞”,则会发生奇怪的事情(物体通过静止物体落下等)。
我想,暂时将它转换为静态刚体可能会有效,但在Bullet的方面是否有现成的“原生”方法来实现这一目标?
编辑:有没有办法关闭特定对象的重力?
答案 0 :(得分:7)
只需将刚体的质量设置为0,然后它变为静态......
http://bullet.googlecode.com/svn/trunk/Demos/HelloWorld/HelloWorld.cpp
答案 1 :(得分:6)
文档有点缺乏,但可以假设下面的方法可用于禁用特定主体的重力:
void btRigidBody::setGravity(const btVector3 &acceleration)
答案 2 :(得分:5)
btRigidBody
有setLinearFactor(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)
将速度和动量设置为零,并将质量设置为非常大的数字。