3

threejs を使用した webgl アプリケーションがあります。TrackballControls を使用してカメラを制御します。シーンをリセットするために使用したいボタンがあるので、カメラを初期状態にする必要があります。私は現在これを持っています(jquery):

$('#reset').click(function() {
    camera.position.set(0, 0 , 400);
    camera.rotation.set(0, 0, 0);
});

しかし不思議なことに、位置と回転をログに記録すると、本来あるべき姿ではなく、カメラが正しい場所にありません。私は何を間違っていますか、これを行うためのより良い方法はありますか?

4

3 に答える 3

6

バグが修正されるまで (Yuval Adam の回答のコメントを参照)、有効な (汚い) 解決策は、シーンからカメラを削除してから、新しいカメラを作成し、それにコントロールを追加して、新しいカメラをシーンに追加することです。

更新: TrackballControls にreset()メソッドが追加されました。トゥイーンが完了した後にこれを呼び出すと、すべてがうまくいきます! ( https://github.com/mrdoob/three.js/commit/4f800f61809560c434bbbf12e76c3931e8e8c0fb )

于 2012-05-27T22:15:04.047 に答える
1

camera.position常に最新である必要があります。正しいものを見ているcameraことと、範囲外ではないことを確認してください。理想的には、ウィンドウ上のグローバル変数である必要があります。

に関してはcamera.rotation、カメラに次のものがあるかどうかを確認する必要があります。

camera.useQuaternion == true

一部のコントロールは、これを前提条件としてカメラに設定します。この場合、カメラアングルは、ではcamera.quaternionなく、によって設定されcamera.rotationます。確かに、TrackballControlsこの動作はありません(少なくとも、r49以降)。


編集:https://github.com/mrdoob/three.js/issues/821からわかるように、を手動で調整すると、実際にバグが発生しcameraますTrackballControls

于 2012-05-27T21:13:19.113 に答える