feat: 旋转单位改为度并支持轨迹点拖拽

统一数据模型中的旋转为度数并在渲染时转弧度,新增 InspectorAngleField 角度控件,为场景与轨迹点提供滑块和重置按钮;选中轨迹点时角色预览到该点并支持拖拽 gizmo 调整位置;机位点击统一走 selectObject 以正确切换右侧属性卡片。
This commit is contained in:
tongtong committed 2026-09-17 11:18:58 +08:00
1 parent e74cf6d28b
commit 0794486857
21 files changed
+659 -99

No files matched your search

+5 -3
View File
@@ -1,4 +1,5 @@
import { Euler, Quaternion } from "three";
import { degreesToRadians, radiansToDegrees } from "./directorProject";
export type TransformTuple = [number, number, number];
@@ -100,11 +101,12 @@ const _tmpEuler = new Euler();
function slerpRotation(a: TransformTuple, b: TransformTuple, t: number): TransformTuple {
if (a[0] === b[0] && a[1] === b[1] && a[2] === b[2]) return [a[0], a[1], a[2]];
_qa.setFromEuler(_tmpEuler.set(a[0], a[1], a[2]));
_qb.setFromEuler(_tmpEuler.set(b[0], b[1], b[2]));
// 关键帧里存的是度数;四元数插值要弧度,插完再转回度数,保持数据模型单位一致
_qa.setFromEuler(_tmpEuler.set(degreesToRadians(a[0]), degreesToRadians(a[1]), degreesToRadians(a[2])));
_qb.setFromEuler(_tmpEuler.set(degreesToRadians(b[0]), degreesToRadians(b[1]), degreesToRadians(b[2])));
_qr.slerpQuaternions(_qa, _qb, t);
_tmpEuler.setFromQuaternion(_qr);
return [_tmpEuler.x, _tmpEuler.y, _tmpEuler.z];
return [radiansToDegrees(_tmpEuler.x), radiansToDegrees(_tmpEuler.y), radiansToDegrees(_tmpEuler.z)];
}
function lerpTransformValue(a: KeyframeTransformValue, b: KeyframeTransformValue, t: number): KeyframeTransformValue {