Creator 3D 已知一个方向向量,如何计算对应的欧拉旋转向量或者四元数

比如说:
目标方向是 let target: cc.Vec3;
目标节点是let node3d: cc.Node;
我想通过设置 node3d.eulerAngles 属性使目标节点指向 target 方向,
如何计算此时的欧拉旋转向量 eulerAngles ?

如果想要调用 setRotation ,传入参数 q 设置 node3d 的姿态,使其指向 target 方向,
如何计算此时需要传入的四元数 q ?

我数学水平有限,研究了一下午还没弄明白,还请大佬答疑解惑,先谢过了。

有大佬看一下吗

周末没人,工作日顶上来,3D大佬帮帮忙。

1赞

找到引擎源码文件夹中的value-types文件夹下的quat.js。
在lerp函数下方新增一个上述截图代码中的函数。
之后编译引擎。
该函数使用方法:
返回节点欧拉角旋转后的四元数。

使用范例 this.node.quat = this.node.quat.rotateAround(this.node.quat, cc.v3(0,1,0),Math.PI * 0.5,new cc.Quat());
参数:
rot:节点quat
axis:方向
rad:角度
out:传递的变量

试过了,不行啊。
我的代码是这样的
let p1: cc.Vec3; // 物体运动的上一个位置
let p2: cc.Vec3; // 物体运动的下一个位置
let d: cc.Vec3 = p2.sub(pq); // 计算出物体位于 p1 时的方向向量
node.setRotation(rotateAround(node.getRotation(), d, 0, new cc.Quat())); // 通过方向向量设置物体位于 p1 的姿态
这样做之后姿态并不对

不要沉鸭

你看下我写的那个使用范例

请问你解决没?

并没有

你是想自身旋转?还有 什么?

可以这样理解,我有一组由许多三维空间中的点组成的路径,现在需要使一个飞机依次经过这些点,要求飞机头部始终指向运动的方向,并且飞机的背部永远不朝向地面

持续关注中…

我也来学习下,3d空间的位移和旋转计算