feat: 旋转单位改为度并支持轨迹点拖拽
统一数据模型中的旋转为度数并在渲染时转弧度,新增 InspectorAngleField 角度控件,为场景与轨迹点提供滑块和重置按钮;选中轨迹点时角色预览到该点并支持拖拽 gizmo 调整位置;机位点击统一走 selectObject 以正确切换右侧属性卡片。
This commit is contained in:
1 parent
e74cf6d28b
commit
0794486857
21 files changed
+659
-99
No files matched your search
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user