Bullet その6 スライダージョイント

Bulet その6はBulletで使えるジョイントのひとつである、スライダージョイントを扱います。

スライダージョイントは、任意の軸に沿った移動しか出来ないように制限するものです。
カーテンレールなどを思い浮かべてもらえれば分かりやすいと思います。

以下実装

追加のヘッダ
#include <BulletDynamics/ConstraintSolver/btSliderConstraint.h>

生成方法
btRigidBody body1; //剛体1
btRigidBody body2; //剛体2

btTransform local1; //剛体1のローカル行列
btTransform local2; //剛体2のローカル行列
btTypedConstraint* constraint = new btSliderConstraint( body1, body2, local1, local2 );
constaint->buldJacobian();

g_World->addConstraint( constraint );

削除方法
ポイントジョイントと同じ

制限のかけ方
移動制限のかけ方は setUpperLinLimit と setLowerLinLimit を使って設定します。

回転制限のかけ方は setUpperAngLimit と setLowerAngLimit を使って設定します。

関数名から分かるとおり Upper が上限 Lower が下限の設定を行います。
回転制限は0~180まで、それ以上は制限なしとみなされます。
度数ではなく、ラジアンで設定してください。

モータとして使う
このジョイントは、モーターとしても使うことが出来ます。
移動モーターを有効にするには setPoweredLinMotor( true ) としてください。
 移動速度は、setTargetLinMotorVelocity 最大速度は、setMaxLinMotorForceを使って設定が出来ます。

回転モーターを有効にするには、setPoweredAngMotor( true )としてください。
 回転速度は、setTargetAngMotorVelocity 最大速度は、setMaxAngMotorForceを使って設定が出来ます。

動作などの確認はポイントジョイントの時と同じようにするといいでしょう。

任意の軸を設定するには、剛体1のローカル行列に任意の回転行列を設定すると出来ます。

2011/02/07 制限のかけ方などを書いていなかったので追記

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月07日 23:42
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。