2013-04-10 45 views
5

回転に基づいてthree.jsでキューブを移動しようとしていますが、どのように移動するのかはわかりません。three.jsでの回転に基づいてオブジェクトを移動する

今のところ、A &のDキーを使用してキューブのZ回転を回転できます。そしてWキーを使って、私はそれを回転に関して相対的に前進させたいと思います。

は、2Dから私はそうの線に沿って何かになります。

float angle = GradToRad(obj.rotation); 
obj.x = obj.x + cos(angle) * velocity; 
obj.y = obj.y + sin(angle) * velocity; 

は、ここで現在の実装の画像です。 3D Cube three.js

three.jsで同様の方法を適用するにはどうすればよいですか?

答えて

7

オブジェクトは、正のZ軸を向いていると見なすことができます。だから、座標系、それに対する自身だ、前方の物体を移動するために、あなたは

Object3D.translateZ(distance); 

three.js r.57

+0

はい、Z軸に沿って平行移動するだけでは、オブジェクトがその回転に対して相対移動することはできません。私がオブジェクトの周りを回るとき、それがその "向いている"方向に動くことを望むという意味です。 – Placeable

+0

ローテーションベクトルが(0、0、0)のとき、あなたのオブジェクトはどの方向に「直面」しますか?これは回転が適用された後に移動するローカル方向です。 – WestLangley

+0

私はZ軸の周りに旋回します。 – Placeable

0

回転と平行移動の両方を単一の(均質な射影)4×4 matrixで表現するのが最も簡単かもしれません。 three.js内のObject3D.matrixのメンバーは既にそれを使用していますが、それを直接使用するにはmatrixAutoUpdatefalseに設定する必要があります。次に、translateメソッドを使用して、独自の参照フレームでオブジェクトを移動することができます。

+0

ユーザがオブジェクトマトリックスをthree.jsで直接混乱させることは非常にお勧めできません。あなたがしていることを本当に知っていて、図書館の内部の仕組みに精通している場合にのみ、そうしてください。 – WestLangley

0

を使用することができますあなたの2D方法は、私はthree.jsでそれをやった正確にどのようにあります。 Yポジションでは、私は地形の衝突テクニックを使用しています(まだ作業が必要です)。

関連する問題