从方向向量获取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

浙公网安备 33010602011771号