【发布时间】:2017-02-10 14:20:27
【问题描述】:
我尝试沿 2 个轴旋转 torus:Ox 和 Oz。我想用鼠标修改的滑块dat.gui 应用这种旋转。
我已经通过以下方式定义了torus:
var geometryTorus = new THREE.TorusGeometry( radius, 2*widthLine, 100, 100 );
var materialLine = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
torus = new THREE.Mesh( geometryTorus, materialLine );
scene.add(torus);
我的问题是沿Ox axis 的旋转工作正常,但沿Oz axis 旋转的情况并非如此。
我通过调用以下函数对圆环进行旋转:
// Change great circle parameters
function changeGreatCircle(thetax, thetaz) {
// Update rotation angles
torus.rotation.x = thetax;
torus.rotation.z = thetaz;
}
对于上述函数,我调用render('init') 函数来计算相机的位置。
如何使这个圆环沿Oz axis 旋转?为什么它沿Ox axis 旋转而不是沿Oz axis 旋转?
如果有人能提供线索,那就好了。
谢谢
更新 1:
我找到了解决方案,因为我没有考虑到 Euler angles,即 2 次旋转的顺序(围绕 X 和 Y 轴)。解决方案是设置torus.rotation.order = 'ZXY';
【问题讨论】:
-
我的理解如下。环面围绕其 Z 轴对称,该 Z 轴最初与“世界”(和相机)的 Z 轴重合。在将环面绕其 X 轴旋转 PI/2 后,其 Y 轴现在沿着世界坐标中的 Z 轴。这就是为什么当相机围绕 Z 轴旋转时,您必须围绕其 Y 轴旋转圆环以保持固定在屏幕上。
-
ConnorsFan:感谢您的帮助,我想我已经发现了问题所在,但我必须做其他测试才能确认。
-
@ConnorsFan:您能否删除您的 jsfiddle 的链接(在您的评论上方),即 jsfiddle.net/ztu3bjuu/5 。提前致谢
标签: javascript three.js rotation dat.gui