2013-01-10 16 views
10

私はthree.jsと3Dプログラミングには一般的ではないので、これは非常に単純な質問のようです。理想的には、その答えが根本的な原則を理解するのに役立つことを願っています。Three.js - オブジェクトを回転させて1点を探して別の方向に向ける方法

Object3D.lookAt(point)機能で簡単に実行できる別のポイント(この場合は、原点)を「ポイント」する必要があるオブジェクトがあります。これは、オブジェクトのZ軸がその点にきちんと向いていることを示します。

また、lookerというオブジェクトをそのZ軸の周りに回転させて、そのX軸が一般に別のオブジェクトの方向を指すようにしたいとします。refObjそのオブジェクトが起点と直角にならない限り、X軸は直接refObjを指すことはできません。私は、下記の図式化として、originrefObjlookerによって作成された平面上にあるようにlookerのX軸が欲しい:

diagram of problem

回転を行うための最も簡単な方法は、looker.rotation.zを変更するように見えるだろうが、私値が何であるべきかを計算する方法を知らない。

一般に、lookAt関数の拡張バージョンは、X軸が向く第2の座標を取ります。このような何か:

function lookAtAndOrient(objectToAdjust, pointToLookAt, pointToOrientXTowards) 
{ 
    // First we look at the pointToLookAt 
    objectToAdjust.lookAt(pointToLookAt); 

    // Then we rotate the object 
    objectToAdjust.rotation.z = ??; 
} 

私はあなたが本当にあなたがオブジェクト(オブジェクトのup - ベクトル)のy軸は平面に直交するようにしたいと言っている何jsFiddle with the example diagramed above

答えて

14

を作成しました。

lookAt(origin)に電話する前に、オブジェクトのup-ベクターを設定するだけです。

upベクトルは、平面上にあることがわかっている2つのベクトルの外積をとって計算します。 http://jsfiddle.net/rQasN/43/

注意があなたの問題には2つの解決策は、計算されたベクトルの両方として、であり、それは否定は平面に直交するだろうということ:ここでは

は作業フィドルです。

EDIT:fiddleが3に更新されました.js r.71

関連する問題