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

javascript/threejs-在围绕中心y轴的圆中移动对象的方程式(在3D空间中),javascript,math,three.js,3d,Javascript,Math,Three.js,3d,我正在试验threeJS,我已经放置了一个摄像头,并观察场景的原点(0,0,0)。我想以设定的距离(半径)围绕y轴旋转一圈,同时保持其焦点在原点上,但我不确定如何设置方程式。目前,我只是旋转物体本身,但我想改为旋转相机。以下是我移动网格的代码: function checkRotation(){ if (keyboard.pressed("left")){ mesh.rotation.y += .05; } if (keyboard.pressed("r

我正在试验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位置的一些等式) 摄像机。位置。z=???(移动其z位置的某些方程式) 摄像机。注视(网格。位置)


你能提供的任何帮助都会很好。谢谢

您可以沿以下线路手动设置摄像头的位置:

// 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轴旋转的等效矩阵,请参见

您还可以调整轨迹球控件以使用键盘而不是鼠标

默认轨迹球行为:


注意:我还没有测试过这一点-我正在工作。

回答有点晚,但其他人可能希望看看Three.js附带的OrbitControls(在示例/js/controls中)。您可以将其设置为自动旋转。它会帮你解决数学问题

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();

如果你不想让用户自己控制摄像机的位置,我相信你可以找到一种方法来禁用它,或者只是提取你需要的代码…

我不知道javascript或threeJS,但等式非常简单:x'=cos(t)x-sin(t)y,y'=sin(t)x+cos(t)是的,我想我正在努力解决的是时间问题。我需要它基于之前的x和z值递增,而不是作为时间的函数。我说:timer=Date.now()*0.0005;camera.position.x=((数学cos(计时器)*5)*5);camera.position.z=((数学sin(计时器)*5)*5);-但这意味着,如果他们不再按按钮,那么下次他们按我的建议时,这个东西就会跳起来。我相信对threejs的一个新的改变是,在更新相机统计数据之前,你必须调用“lookat”。对于他的用例,我猜它总是在看0,0,0。