JavaScript / ThreeJS - 围绕中心Y轴(在3D空间中)在圆圈中移动对象的方程式
javascript / threejs - equation to move an object in a circle around a central y axis (in 3D space)
我正在试验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);
您可以提供的任何帮助都会很棒。谢谢!
您可以按照以下行手动设置摄像机的位置:
// 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。
您还可以调整轨迹球控件以使用键盘而不是鼠标。
默认轨迹球行为:http://mrdoob.github.com/three.js/examples/misc_camera_trackball.html
注意:我还没有测试过这个 - 我在工作。
答案有点晚,但其他人可能希望看看 Three.js 附带的 OrbitControls(在 examples/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));
然后在您的请求中动画帧调用更新函数...
controls.update();
如果您不希望用户能够自己控制相机位置,我相信您可以找到一种方法来禁用它,或者只是提取您需要的代码......
相关文章:
- JavaScript名称空间和对象创建
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 具有大型几何图形的基于沙发的空间查询
- 如何使用javascript命名空间
- JSDoc:模块和名称空间之间的关系是什么
- Highcharts 3d调整zindex错误
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 动画制作/减缓元素填充移除元素留下的空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 在IndexedDB中保留空间
- HighCharts:3D柱形图在选择时更改边框颜色
- 3d上的深度比例错误
- 3d数学:屏幕空间到世界空间
- JavaScript / ThreeJS - 围绕中心Y轴(在3D空间中)在圆圈中移动对象的方程式
- Three.js如何在用户看不到3d空间时停止渲染
- 如何在WebGL 3d空间中从鼠标点击坐标获取对象