2016-04-18 7 views
2

cannonJS本体での移動のような宇宙船を実現したいと思います。 (私は本当に初心者です) 私はいくつかの例を見つけましたが、それらのどれも私が探しているものはまったくありません。四元数でcannonJSオブジェクトを3Dで移動する

私はオブジェクトを移動する正しい方法を知っているので、速度を変更することです。

これは私がここで行ったことです:http://codepen.io/Tomo0613/pen/xVjqqKenter code here しかし、私は間違いなくクォータニオンの理解に問題があります。

更新する方法はありますか?それを回転させると四元数に応じたボディのベクトル、またはそれは常に世界に関係しますか? 結果:ボディがZ軸上でのみ加速しているとき、ボディは常に向いている方向に移動します。

答えて

2

ボディの速度は常にワールド座標になります。この場合、変数にローカル速度(たとえばvec(0,0,+1))を記録し、それをワールドの速度に変換し、回転が変わるたびにボディに適用することをお勧めします。

var localVelocity = new CANNON.Vec3(0, 0, 1); 
var worldVelocity = body.quaternion.vmult(localVelocity); 
body.velocity.copy(worldVelocity); 

あるいは、同じコードの高速ですが、難しく、読み版:

var localVelocity = new CANNON.Vec3(0, 0, 1); 
body.quaternion.vmult(localVelocity, body.velocity); 
+0

実は私は解決策のようなものを作った[http://codepen.io/Tomo0613/full/PzwgxV /]今私はより明確に見ていますが、これにもかかわらず私はまだ数学と闘っています。 あなたの答えをありがとう! –

+0

こんにちは、私はlocalVelocityが何であるのだろうか?どうか説明できますか? –

+1

@SébastienGarcia-Roméoボールが「1000,0,0」で移動している宇宙船上で速度「0,0,1」で回転している場合、ボールの実際の(世界)速度は「1000,0,1」です。 'localVelocity'は、宇宙船との衝突にそれを使用する方が簡単であるため、宇宙船に対する相対速度を記録する方法に過ぎません。 '0,0,1'。上記の例では、宇宙船が動かずに回転しているのと同じように見えますが、同じ考えです。 –

関連する問題