從方向向量獲取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號