THREE.js根据“设置矩形平行六面体旋转”;“正常”;它的两个面的向量
我在3d空间中有一个矩形平行六面体,如下所示: 假设将其放置在轴原点上,当其旋转为(0,0,0)时,其最大面(绿色)位于XY上,其最小面(蓝色)平行于YZ 假设我有两个(正交)向量,V1和V2 V1表示Object3d最大面(绿色面)的法线 V2是最小面(蓝色面)的法线 给定两个新向量,如何在三维空间中旋转这个平行六面体,使其面法线与这些新向量对齐 示例:THREE.js根据“设置矩形平行六面体旋转”;“正常”;它的两个面的向量,three.js,3d,rotation,quaternions,euler-angles,Three.js,3d,Rotation,Quaternions,Euler Angles,我在3d空间中有一个矩形平行六面体,如下所示: 假设将其放置在轴原点上,当其旋转为(0,0,0)时,其最大面(绿色)位于XY上,其最小面(蓝色)平行于YZ 假设我有两个(正交)向量,V1和V2 V1表示Object3d最大面(绿色面)的法线 V2是最小面(蓝色面)的法线 给定两个新向量,如何在三维空间中旋转这个平行六面体,使其面法线与这些新向量对齐 示例: const V1 = new Vector3(0, 1, 0); const V2 = new Vector3(0, 0, 1); co
const V1 = new Vector3(0, 1, 0);
const V2 = new Vector3(0, 0, 1);
const v1 = some_value;
const v2 = some_othen_value; // ortogonal to v1
const q1 = new Quaternion();
q1.setFromUnitVectors(new Vector3(1, 0, 0), v1);
const q2 = new Quaternion();
q2.setFromUnitVectors(new Vector3(0, 0, 1), v2);
parallelepiped.setRotationFromQuaternion(q2.multiply(q1));
在这个配置中,我希望有这个旋转(欧拉梯度):(-90,0,-90)
(生成的实体在XZ上的最大面朝下,在XY上的最小面朝下)
我所尝试的:
const V1 = new Vector3(0, 1, 0);
const V2 = new Vector3(0, 0, 1);
const v1 = some_value;
const v2 = some_othen_value; // ortogonal to v1
const q1 = new Quaternion();
q1.setFromUnitVectors(new Vector3(1, 0, 0), v1);
const q2 = new Quaternion();
q2.setFromUnitVectors(new Vector3(0, 0, 1), v2);
parallelepiped.setRotationFromQuaternion(q2.multiply(q1));
此方法适用于某些配置,但在其他配置中失败严重
失败示例:
V1 = new Vector3(1, 0, 0);
V2 = new Vector3(0, 0, 1);
在本例中,得到的旋转是(0,0,0),但我希望是(0,90,90)
你知道吗