1

世界の x 軸と y 軸を中心に球を回転させたいと思いました。私はこのコードでそれを成功させました:

// Update ball rotation.
var tempMat = new THREE.Matrix4();
tempMat.makeRotationAxis(new THREE.Vector3(0,1,0), stepX/ballRadius);
tempMat.multiplySelf(ballMesh.matrix);
ballMesh.matrix = tempMat;
tempMat = new THREE.Matrix4();
tempMat.makeRotationAxis(new THREE.Vector3(1,0,0), -stepY/ballRadius);
tempMat.multiplySelf(ballMesh.matrix);
ballMesh.matrix = tempMat;
ballMesh.rotation.getRotationFromMatrix(ballMesh.matrix);

ballMeshただし、(1,1,1) から何らかの方法でをスケーリングすると、説明が難しい方法で回転がうまくいきません。ここに jsfiddle の例を示します。

http://jsfiddle.net/pxTTv/26/ (矢印キーで回転)

スケール (jsfiddle コードに示されている) を (1,1,1) に戻すと、期待どおりに動作します。

何が原因で、どうすれば修正できますか?

4

1 に答える 1

2

scaleの呼び出しから引数を除外しましたvector.getRotationFromMatrix( matrix, scale )

また、何をしているのか本当によくわかっていない限り、オブジェクト マトリックスをいじらないことをお勧めします。代わりに、オブジェクトの回転、位置、およびスケールを設定し、ライブラリにマトリックスを更新させます。

あなたの場合、オブジェクトのマトリックスを上書きしていましたが、運が良ければ、レンダリング呼び出しで再計算されていました。

修正されたフィドルは次のとおりです。http://jsfiddle.net/pxTTv/27/

于 2012-07-23T02:47:26.893 に答える