16

Bullet 2.76 を使用して、オブジェクト (リジッド ボディ) をフリーズさせて、動きを即座に停止させようとしていますが、衝突には引き続き反応します。

アクティベーション状態を DISABLE_SIMULATION に設定しようとしましたが、他のオブジェクトには事実上存在しません。さらに、オブジェクトが無効になっているときにオブジェクトが「衝突」すると、奇妙なことが起こり始めます (オブジェクトが静的なボディを通り抜けるなど)。

一時的に静的な剛体に変換するとうまくいくと思いますが、Bullet側でこれを達成するための既存の「ネイティブ」な方法はありますか?

編集:特定のオブジェクトの重力をオフにする方法はありますか?

4

6 に答える 6

9

ドキュメントは少し不足していますが、以下の方法を使用して特定のボディの重力を無効にできると思われます。

void btRigidBody::setGravity(const btVector3 &acceleration)
于 2010-07-07T01:55:18.463 に答える
8

剛体の質量を 0 に設定するだけで、静的になります...

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

于 2013-02-18T11:15:31.263 に答える
6

特定の軸に沿った動きと特定の軸を中心とした回転をそれぞれ制限できるようにするbtRigidBodyとの関数がありますsetLinearFactor(x,y,z)setAngularFactor(x,y,z)all を引数として両方の関数を呼び出すと、すべて0の動きが停止します。すべて 's でそれらを再度呼び出す1と、モーションが再び許可されます。

于 2010-10-14T00:50:14.170 に答える
5

活性化状態をゼロに設定します。これは、オブジェクトが自然にスリープ状態になると発生します。重力などは、再び起こされるまで有効になりません。

rigidBody->setActivationState(0);

その後、眠っているオブジェクトと同じように、衝突または力を加えた場合に目覚めます。

于 2013-05-25T15:44:43.587 に答える
3

このメソッドでアクターを停止するには、更新フレームごとにこれを呼び出す必要があります。

void StopActor()
{
    m_pRigidBody->setLinearVelocity(btVector3(0,0,0));
}
于 2011-09-13T01:36:01.727 に答える
1

速度と運動量をゼロに設定し、質量を非常に大きな数値に設定します。

于 2010-06-15T12:55:24.893 に答える