12

私は一般的にthree.jsと3dプログラミングに慣れていないので、これは非常に単純な質問のように思えるかもしれません。理想的には、答えが根本的な原則を理解するのに役立つことを願っています。

別のポイント(この場合は、簡単にするために原点)を「ポイント」する必要があるオブジェクトがあります。これは、関数を使用して簡単に実行できObject3D.lookAt(point)ます。これにより、オブジェクトのZ軸が適切にポイントに向けられます。

lookerまた、X軸が一般的に別のオブジェクトを指すように、Z軸を中心にオブジェクトを回転させたいと思いますrefObjrefObjそのオブジェクトが原点と直角に発生しない限り、X軸が直接指すことはできないことを私は知っています。下の図のように、のX軸を、、、によってlooker作成された平面上に配置します。originrefObjlooker

問題の図

回転を行う最も簡単な方法は変更することのように思われますが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 = ??;
}

上図の例でjsFiddleを作成しました

4

1 に答える 1

19

あなたが本当に言っているのは、オブジェクトのy軸(オブジェクトのup-vector)を平面に直交させたいということです。

を呼び出す前に、オブジェクトのup-vectorを設定するだけですlookAt( origin )

up平面にあることがわかっている2つのベクトルの外積をとることにより、目的のベクトルを計算します。

これが実用的なフィドルです:http://jsfiddle.net/rQasN/43/

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

編集:フィドルがthree.jsr.71に更新されました

于 2013-01-10T04:51:19.297 に答える