我遇到了一个问题,我试图将模型的局部向量与另一个向量对齐,但我无法理解如何以正确的方式旋转对象。
我正在尝试使用网格的局部向量并将其定向为全局方向。
let localVector = new THREE.Vector3(0, 0, 1).normalize();
let otherVector = new THREE.Vector3(1, 1, 0).normalize();
mesh.quaternion.setFromUnitVectors(meshNormal, otherVector)
我可以做得很好,但我无法弄清楚如何计算它绕其他矢量轴旋转的距离。因为我希望我的对象保持平稳。
这是一个试图表明我的意思的jsfiddle。 https://jsfiddle.net/h20hnn3n/49/
左边是原型,中间是我想要的,但右边是我得到的。
我希望能够运行
mesh.rotateOnAxis(someVector, someRotation)
让它保持平稳。
我试图找出一种一致的方式,无论两个向量,我使用我可以让模型保持平坦。
有没有办法计算出正确的方法呢?
编辑: 为了澄清这个https://jsfiddle.net/hrdottgq/2/我试图找出代替
的内容let zUp = new THREE.Vector3(0,1,0)
zUp.applyQuaternion(new THREE.Quaternion().setFromUnitVectors(otherVector, meshNormal))
let angle = -Math.atan2(zUp.x, zUp.z);
为了在轴上旋转
rotated.rotateOnAxis(new THREE.Vector3(0, 1, 0), angle)