2017-09-19 7 views
0

私は、球の周りの軌道上を回転するオブジェクトに続くカメラを作成しようとしています。しかし、カメラが軌道の極座標に達するたびに、方向が変わります。私はその二乗で別のフィドルを作成しましたhttp://jsfiddle.net/krw8nwLn/69/円の軌跡を描くカメラのセットアップ方法は?

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

ここで完全なフィドルだ:私はちょうど従う必要があり、その後lookAtを呼び出すとされているオブジェクトに応じてカメラの位置を設定しますhttp://jsfiddle.net/krw8nwLn/70/

+1

あなたの2つのリンクが同じURLを指しています –

+0

ああ、申し訳ありません!私は質問を更新しました:) – Slevin

答えて

0

カメラのlookAt機能は、常にカメラを水平面に合わせようとする(「上」の方向が常に(0,1,0)になるようにします)、いつあなたは楕円軌跡を描くと、カメラは瞬時に180°回転し、上方向がまだ上になります。もう一方の側の色が表示されるようにカメラキューブが回転するので、これを「望ましい動作」の例で見ることもできます。

解決策は、このようなフリップを行うカメラをサポートしていないため、このケースではlookAtを使用しないことです。代わりに、カメラのrotationベクトルを直接設定してください。 (これは数学を必要としますが、数学の男のように見えます)

+0

これはあまりにも真実になるでしょう... :-)しかし、正しい方向に私を指してくれてありがとう、私はいくつかの事をテストするつもりです! – Slevin