1

ワールド軸を中心にオブジェクトを回転させようとしています。この質問を見つけました:軸の世界 three.js でオブジェクトを回転させるには?

しかし、この関数を使用しても問題は解決しませんでした:

var rotWorldMatrix;

// Rotate an object around an arbitrary axis in world space       
function rotateAroundWorldAxis(object, axis, radians) {
    rotWorldMatrix = new THREE.Matrix4();
    rotWorldMatrix.makeRotationAxis(axis.normalize(), radians);
    rotWorldMatrix.multiplySelf(object.matrix);        // pre-multiply
    object.matrix = rotWorldMatrix;
    object.rotation.getRotationFromMatrix(object.matrix, object.scale);
}

multiplySelf定義されてgetRotationFromMatrixいません(コンソールエラーが発生しています)。問題を解決するには?

アップデート

を使用しようとしましたQuaternionが、正しく動作しないようです。ユーザーのクリックに応じてオブジェクトを回転させようとしています。これは私が書いた関数です:

function mouseUp(event) {
    var x= event.clientX;
    var y= event.clientY;
    var dx= (x - xBegin);
    var dy= (y - yBegin);

    var quaternion= new THREE.Quaternion();
    quaternion.setFromAxisAngle(new THREE.Quaternion(dy,dx,0).normalize(),Math.sqrt(dx*dx+dy*dy)/250.0);
    object.quaternion.multiplyQuaternions(quaternion,object.quaternion);
}

オブジェクトが垂直または水平の位置にある限り正しく回転しますが、たとえば x 軸から 45 度の位置にある場合、非常にゆっくりと回転し、クリックの反対方向に回転します。

4

1 に答える 1

6

オブジェクトに回転した親がない限り、次のようにワールド軸を中心にオブジェクトを回転できます。

object.rotateOnWorldAxis( axis, angle );

axis正規化する必要があります (単位長があります)。angleはラジアンです。

three.js r.92

于 2013-10-15T17:03:37.050 に答える