[英]Three.js - Torus is not rotating around 0z axis
我尝试沿2轴旋转torus
:牛和奥兹。 我想用鼠标修改的滑块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
旋转不是这种情况。
我通过调用以下函数为torus进行旋转:
// 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';
我做了一个小提琴 ,证明所有三个mesh.rotation
组件都工作正常。 基于在三个源代码中可以找到的内容,当您设置Object3D(和Mesh)的旋转时,会出现以下情况:
quaternion.setFromEuler( rotation, false );
发生。 'XYZ'
。 this.matrix.compose( this.position, this.quaternion, this.scale );
呼叫。 所以说到你的问题:你在不同的轴上对圆环和相机应用旋转,这就是为什么相机不跟随圆环(圆环没有相对于世界空间固定然后你改变torus.rotation.z
)。 请记住,旋转是串联应用的。
如果通过插入虚拟对象和调整旋转顺序无法实现所需的行为 - 您可以构建自己的材质并将更多参数作为制服传递以在着色器程序中使用。 在这种情况下,它不需要。
如果这没有帮助,请构建一个演示您的问题的最小示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.