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 回答