5

私は threeJS を試していて、カメラを配置してシーンの原点 (0,0,0) を見ています。そのカメラを原点に焦点を合わせたまま、設定した距離 (半径) で y 軸を中心に円を描くように動かしたいのですが、方程式の設定方法がわかりません。現在、オブジェクト自体を回転させているだけですが、代わりにカメラを回転させたいと考えています。メッシュを移動するコードは次のとおりです。

function checkRotation(){
    if (keyboard.pressed("left")){
        mesh.rotation.y += .05;
    }

    if (keyboard.pressed("right")){
        mesh.rotation.y -= .05;
    }
}

そして、これはカメラを動かすある種の例です:

カメラの位置.x = ??? (x 位置を移動する方程式) camera.position.z = ??? (z 位置を移動する方程式) camera.lookAt(mesh.position);

あなたが提供できるどんな助けも素晴らしいでしょう。ありがとう!

4

2 に答える 2

14

次の行に沿ってカメラの位置を手動で設定できます。

// let theta be the amount you want to rotate by
var x = camera.position.x;
var z = camera.position.z;

camera.position.x = x * Math.cos(theta) + z * Math.sin(theta);
camera.position.z = z * Math.cos(theta) - x * Math.sin(theta);
camera.lookAt(mesh.position); // or camera.lookAt(0, 0, 0);

x、y、z 軸を中心とした回転に相当する行列については、http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensionsを参照してください。

マウスではなくキーボードを使用するように TrackballControls を適応させることもできます。

デフォルトのトラックボールの動作: http://mrdoob.github.com/three.js/examples/misc_camera_trackball.html

注: これはまだテストしていません。仕事中です。

于 2012-04-26T22:40:59.833 に答える
2

少し遅い回答ですが、Three.js に付属の OrbitControls (examples/js/controls 内) を見たいと思う人もいるかもしれません。autoRotate に設定できます。それはあなたのために数学を処理します。

var controls = new THREE.OrbitControls(camera);
controls.autoRotate = true;
controls.autoRotateSpeed = [whatever speed you want]

camera.lookAt(new THREE.Vector3(0,0,0));

次に、requestAnimationFrame で呼び出される update 関数で...

controls.update();

ユーザーが自分でカメラの位置を制御できるようにしたくない場合は、それを無効にする方法を見つけるか、必要なコードを抽出するだけでよいと思います...

于 2013-01-19T19:03:58.207 に答える