13

Three.js では、THREE.quaternion を使用して、カメラ オブジェクトを選択したオブジェクトに回転させたいと考えています。

Web を検索しましたが、このクォータニオン クラスの使用方法に関する例/デモやドキュメントは見つかりませんでした。

次のコードで運試しをします。

    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.y = 10;
    camera.position.z = 0;
    camera.position.x = radious;
    camera.useQuaternion = true;

   // I did use the TrackballTrackballControls. Maybe it causes the problem so I put it here
    controls = new THREE.TrackballControls( camera, document.getElementById(_canvasElement) );

    // function to make the camera rotate to the object
    function focusOn3DObject(obj){  
        obj.useQuaternion = true;
        obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);

        var newQuaternion = new THREE.Quaternion();
        THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.07);
        camera.quaternion = newQuaternion;
    }

しかし、うまくいきません。私は何か見落としてますか?助けてください。前もって感謝します。

4

5 に答える 5

18

Slerpはとても簡単です。4 つのパラメーターが必要です。

  • targetRotation実際のカメラの回転
  • destinationRotationオブジェクトの回転
  • destinationRotation新しいカメラの回転となる新しいクォータニオン
  • percentOfRotationこのパラメーターは遊び場です。私は今ここで 0.07 を使用しています。値は 0 (0%) から 1 (100%) の間である可能性があります。

これは私の回転方法です:

var qm = new THREE.Quaternion();
THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07);
camera.quaternion = qm;
camera.quaternion.normalize();

うまくいけば、これはあなたを助けるでしょう. 気にしないでください、私も完璧なカメラ フォローイングに数週間取り組みました。

于 2012-08-06T13:53:27.000 に答える