javascript / threejs - 围绕中心y轴(在3D空间中)围绕圆圈移动对象的等式

时间:2012-04-26 21:19:36

标签: javascript math three.js 3d

我正在尝试使用threeJS,并且我已经安装了一个摄像头并查看场景的原点(0,0,0)。我希望以一定的距离(半径)绕y轴移动相机,同时保持其对原点的聚焦,但我不确定如何设置方程式。目前,我只是旋转物体本身,但我想转动相机。这是移动网格的代码:

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

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

这里有一些移动相机的例子:

camera.position.x = ??? (一些移动其x位置的等式) camera.position.z = ??? (某些方程式移动其z位置) camera.lookAt(mesh.position);

您可以提供的任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:13)

您可以沿以下行手动设置相机的位置:

// 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

注意:我还没有测试过 - 我在工作。

答案 1 :(得分: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中调用更新函数...

controls.update();

如果您不希望用户自己控制相机位置,我相信您可以找到一种方法来禁用它,或者只是提取您需要的代码......

相关问题