从方向向量获取y轴旋转值

常用方案三进行模型控制

方案 1:直接用 lookAt

如果你的方向向量是从 A → B,那么可以用 lookAt

const dir = p2.clone().sub(p1).normalize(); // 世界方向向量
const target = p1.clone().add(dir);         // 方向目标点

mesh.lookAt(target); // 让模型的 -Z 轴朝向 target

⚠️ 注意:lookAt 默认让 物体的 -Z 轴 指向目标点(这是 Three.js 的约定)。
如果你希望模型的 +Z 轴 或 +X 轴 对齐,需要额外旋转一个偏移量。

 

方案 2:用四元数 setFromUnitVectors

如果你知道模型当前「前方」是哪个局部轴,可以用四元数来把它旋转到目标方向:

// 目标方向(XZ 平面,单位化)
const dir = p2.clone().sub(p1).setY(0).normalize();

// 假设模型的“前方”是 +Z 轴
const forward = new THREE.Vector3(0, 0, 1);

// 计算旋转四元数
const quat = new THREE.Quaternion().setFromUnitVectors(forward, dir);

// 应用到模型
mesh.quaternion.copy(quat);

这样 mesh 就会旋转到朝向 p1 → p2 的方向。

 

方案 3:限制在 XZ 平面(常见于角色控制器)

如果你只想控制 Y 轴旋转(比如角色在地面上转向),可以这样:

const dir = p2.clone().sub(p1).setY(0).normalize();

// 朝向角度(绕 Y 轴旋转)
const angle = Math.atan2(dir.x, dir.z); 

mesh.rotation.set(0, angle, 0); // 只改 Y

 

posted @ 2025-09-26 16:20  SimoonJia  阅读(7)  评论(0)    收藏  举报