如何设置遵循圆形路径的摄像机?

时间:2017-09-19 10:41:50

标签: three.js

我正在尝试创建一个跟随在围绕球体的轨道上旋转的对象的相机。但每次摄像机到达轨道的极坐标时,方向都会发生变化。我只是根据必须遵循的对象设置摄像机的位置,然后调用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/

1 个答案:

答案 0 :(得分:0)

相机的lookAt功能将始终尝试将相机与水平面对齐(以便“向上”方向始终为(0,1,0)。当您到达顶部时,会发生这种情况。在椭圆路径的底部,摄像机将瞬间旋转180°,以便向上移动。您还可以在“所需行为”示例中看到这一点,因为摄像机立方体旋转,以便显示另一侧的颜色。

解决方案是在这种情况下不使用lookAt,因为它不支持像这样翻转的摄像机。而是直接设置相机的rotation矢量。 (这需要一些数学,但你看起来像个数学家。)