fix: 优化Gizmo

This commit is contained in:
2026-09-18 03:06:34 +08:00
parent 8645ea3007
commit 9b72f10b43
23 changed files with 787 additions and 254 deletions

View File

@@ -1,5 +1,6 @@
import { Euler, Quaternion } from "three";
import { degreesToRadians, radiansToDegrees } from "./directorProject";
import { slerpCameraLookRotation } from "./cameraGeometry";
export type TransformTuple = [number, number, number];
@@ -23,7 +24,8 @@ export interface TimelineTrack {
// ===== 相机关键帧 =====
export interface CameraKeyframeValue {
position: TransformTuple;
target: TransformTuple;
/** 注视朝向(度):[俯仰角 pitch(X), 水平角 yaw(Y), 横滚角 roll(Z)],与机位的 lookRotation 同一套语义 */
lookRotation: TransformTuple;
fov: number;
}
export interface CameraTimelineKeyframe {
@@ -177,7 +179,8 @@ export function evaluateTrackAtTime(track: TimelineTrack, time: number): Keyfram
function lerpCameraValue(a: CameraKeyframeValue, b: CameraKeyframeValue, t: number): CameraKeyframeValue {
return {
position: lerpTuple(a.position, b.position, t),
target: lerpTuple(a.target, b.target, t),
// 注视朝向是角度,走四元数插值(与轨迹点一致),位置 / FOV 仍按线性插值
lookRotation: slerpCameraLookRotation(a.lookRotation, b.lookRotation, t),
fov: lerp(a.fov, b.fov, t),
};
}