3D场景中求两点间夹角后旋转,实现自动对焦。

以下代码可实现物体转向,

     let tempQuat: Quat = new Quat();
     Quat.rotateAroundLocal(tempQuat, startRot, axis, angle);
    Quat.normalize(tempQuat, tempQuat);
    this.node.setRotation(tempQuat);

其中,Quat.rotateAroundLocal(tempQuat, startRot, axis, angle); 有一个angle参数

目标:3D场景中有两个物体,让一个物体转一定角度,面向另一物体.

问题:如何求两个物体的角度?

以下两种尝试都不对:
一、去掉y轴,直接计算两个平面弧度
let source:Vec3 = new Vec3(this.enemy.getWorldPosition().x,0,this.enemy.getWorldPosition().z);
let target:Vec3 = new Vec3(this.node.getWorldPosition().x,0,this.node.getWorldPosition().z);
Vec3.normalize(source, source);
Vec3.normalize(target, target);
let angle:number = Math.atan2(target.z - source.z, target.x - source.x);

二、用let angle: number = Vec3.angle(target, source);

求解?

1赞

自动瞄准,没人有这样的需求吗?

直接用 destinationVec3.subtract(originVec3) 就可以得到方向向量了,然后归一化,最后使用 Quat.fromAxisAngle 来计算表示角度的 Quaternion

done!

楼主的代码看着很能看懂,大佬的代码就看不懂了。能详细说一下吗

请问这个带旋转方向或者符号嘛