从threejs中的单位向量设置网格四元数后,获得旋转正确

时间:2017-12-10 03:49:30

标签: javascript vector three.js rotation quaternions

我遇到了一个问题,我试图将模型的局部向量与另一个向量对齐,但我无法理解如何以正确的方式旋转对象。

我正在尝试使用网格的局部向量并将其定向为全局方向。

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)

0 个答案:

没有答案