48

lookAt とカメラの回転がわかりません。

xy平面上の[0,0,0]の周りに小さな球の円があります。

カメラは [0,0,30] に配置され、lookAt 後のカメラの回転は [0,0,0] です。円は上から見ているように表示されます (予想どおり)。

次に、カメラを [30,0,0] に移動し、lookAt の後、カメラの回転は [0,90deg,0] です。円は横向きに表示されますが、垂直ではなく、水平ではありません。カメラが y に対して 90 度回転するのはなぜですか?

その後、カメラを [0,30,0] に移動し、lookAt の後、カメラの回転は [-90deg,0,90deg] です。円は、水平ではなく垂直に横に表示されます。

カメラが回転するのはなぜですか?x軸とy軸自体にあるので、回転はまったくないと思いました。

助けてくれてありがとう!:-)

注: 当初はhttps://github.com/mrdoob/three.js/issues/2917に投稿されていましたが、Stack Overflow に来るように言われました。

4

1 に答える 1

79

この問題を解決するには、lookAt() コマンドを実行する前にカメラのアップ ベクトルを指定します。

// Place camera on x axis
camera.position.set(30,0,0);
camera.up = new THREE.Vector3(0,0,1);
camera.lookAt(new THREE.Vector3(0,0,0));

ベクターを必要に応じて変更します。負の値 (0,0,-1) を指定して、逆さまにすることもできます。lookAt() を使用する前にアップ ベクトルを設定することが重要です。

http://jsfiddle.net/VsWb9/991/に 2 つのキューブを含む完全な例を作成しました。小さい方が大きい方の上にあると想定されます (正の z 軸上)。

于 2013-05-04T09:20:16.570 に答える