Vector THREE.JS |如何找出两个向量之间的XYZ旋转?

Vector THREE.JS |如何找出两个向量之间的XYZ旋转?,vector,three.js,Vector,Three.js,这里是三点 我有一个网格,我想通过选择它的一个面来旋转它。基本上,我希望单击一个面,并对网格应用旋转,以便我单击的面面向网格当前所在的平面 下面是我的问题的一个形象: 我想单击一个面(黄色三角形)并旋转网格,使黄色三角形面对网格当前所在的平面。我确实有脸的法向量(即,myVector),我想应用旋转,使法向量在之后等于targetVector 我想知道为了实现我的目标,我需要在每个轴上分别旋转网格多少 提前感谢您,如果您需要更多信息,请询问我 您需要使用a,应用向量,然后通过a读取结果旋转:

这里是三点

我有一个网格,我想通过选择它的一个面来旋转它。基本上,我希望单击一个面,并对网格应用旋转,以便我单击的面面向网格当前所在的平面

下面是我的问题的一个形象:

我想单击一个面(黄色三角形)并旋转网格,使黄色三角形面对网格当前所在的平面。我确实有脸的法向量(即,
myVector
),我想应用旋转,使法向量在之后等于
targetVector

我想知道为了实现我的目标,我需要在每个轴上分别旋转网格多少

提前感谢您,如果您需要更多信息,请询问我

您需要使用a,应用向量,然后通过a读取结果旋转:

//设置起始和结束向量
var myVector=新的三个向量3(0.1,1.0,0.1);
var targetVector=新的三个向量3(0,0,-1);
//规范化向量以确保其长度为1
myVector.normalize();
targetVector.normalize();
//创建一个四元数,然后应用起始向量和结束向量
var四元数=新的三个四元数();
四元数。SetFromUnitVector(myVector,targetVector);
//四元数现在包含旋转数据。
//我们需要用一个3.Euler()
var euler=new THREE.euler();
euler.setFromQuaternion(四元数);
console.log(euler.toArray());
//生成的euler将以弧度为单位进行x、y、z旋转:
//[
//  0: -1.6704649792860586,
//  1: 0.09917726107940236,
//  2: 0.10956980436233299,
//3:“XYZ”
//]

我发现您的x、y、z世界轴不符合Three.js标准。这是你问题的要求吗?因为这将极大地改变
targetVector(0,0,-1)
@Marquizzo的重要性,所以我的XYZ轴不是常规的,不幸的是,我不得不保持这样。下面的解决方案还能用吗?嗯。。。这是一个完全不同的问题。我相信已经有人问过: