我正在尝试创建一个跟随在围绕球体的轨道上旋转的对象的相机。但每次摄像机到达轨道的极坐标时,方向都会发生变化。我只是根据必须遵循的对象设置摄像机的位置,然后调用lookAt
:
function render() {
rotation += 0.002;
// set the marker position
pt = path.getPoint( t );
// set the marker position
marker.position.set( pt.x, pt.y, pt.z );
marker.lookAt( new THREE.Vector3(0,0,0) );
// rotate the mesh that illustrates the orbit
mesh.rotation.y = rotation
// set the camera position
var cameraPt = cameraPath.getPoint( t );
camera.position.set( cameraPt.x, cameraPt.y, cameraPt.z );
camera.lookAt( marker.position );
t = (t >= 1) ? 0 : t += 0.002;
renderer.render( scene, camera );
}
这是一个完整的小提琴:http://jsfiddle.net/krw8nwLn/69/
我用第二个立方体创建了另一个小提琴,代表了所需的相机行为:http://jsfiddle.net/krw8nwLn/70/
答案 0 :(得分:0)
相机的lookAt
功能将始终尝试将相机与水平面对齐(以便“向上”方向始终为(0,1,0)。当您到达顶部时,会发生这种情况。在椭圆路径的底部,摄像机将瞬间旋转180°,以便向上移动。您还可以在“所需行为”示例中看到这一点,因为摄像机立方体旋转,以便显示另一侧的颜色。
解决方案是在这种情况下不使用lookAt
,因为它不支持像这样翻转的摄像机。而是直接设置相机的rotation
矢量。 (这需要一些数学,但你看起来像个数学家。)