From cb21472aefce3b8cc0919250c74eff975c5f8132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=82=E5=85=AE?= <151803898+liuxi150@users.noreply.github.com> Date: Tue, 21 May 2024 14:21:34 +0800 Subject: [PATCH] fix: update animation data (#55) * fix: update animation data and support bezier quaternion curve * fix: add new value type * fix: update clip data * fix: revert * chore: rename * chore: update import path --- src/animation-clip-data.ts | 8 ++++---- src/components.ts | 1 + src/item/model/tree.ts | 13 +++++++++++++ src/number-expression.ts | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/animation-clip-data.ts b/src/animation-clip-data.ts index 53153ed..ce0752b 100644 --- a/src/animation-clip-data.ts +++ b/src/animation-clip-data.ts @@ -1,9 +1,9 @@ import type { EffectsObjectData } from './components'; -import type { FixedNumberExpression, FixedVec3Expression } from './number-expression'; +import type { FixedNumberExpression, FixedVec3Expression, FixedQuatExpression } from './number-expression'; export interface AnimationClipData extends EffectsObjectData { positionCurves: PositionCurveData[], - eulerCurves: EulerCurveData[], + rotationCurves: RotationCurveData[], scaleCurves: ScaleCurveData[], floatCurves: FloatCurveData[], } @@ -13,9 +13,9 @@ export interface PositionCurveData { keyFrames: FixedVec3Expression, } -export interface EulerCurveData { +export interface RotationCurveData { path: string, - keyFrames: FixedVec3Expression, + keyFrames: FixedQuatExpression, } export interface ScaleCurveData { diff --git a/src/components.ts b/src/components.ts index 89e4e09..597cf50 100644 --- a/src/components.ts +++ b/src/components.ts @@ -21,6 +21,7 @@ export enum DataType { CameraComponent = 'CameraComponent', ModelPluginComponent = 'ModelPluginComponent', TreeComponent = 'TreeComponent', + AnimationComponent = 'AnimationComponent', } export interface DataPath { diff --git a/src/item/model/tree.ts b/src/item/model/tree.ts index c948f20..756c31b 100644 --- a/src/item/model/tree.ts +++ b/src/item/model/tree.ts @@ -3,6 +3,7 @@ import type { ModelAnimationTrackDataPointer } from './binary'; import type { BaseItem, BaseItemTransform } from '../base-item'; import type { SizeOverLifetime, RotationOverLifetime, PositionOverLifetime, ItemType } from '../../type'; import type { ComponentData, DataPath } from '../../components'; +import type { AnimationClipData } from '../../animation-clip-data'; export interface TreeNodeOptions { name?: string, @@ -95,3 +96,15 @@ export interface ModelAnimationComponentData extends ComponentData { */ animations: ModelAnimationData[], } + +export interface AnimationComponentData extends ComponentData { + /** + * 默认动画索引,-1表示不播放动画 + */ + animation?: number, + /** + * glTF中所有的动画数据 + */ + animationClips: AnimationClipData[], +} + diff --git a/src/number-expression.ts b/src/number-expression.ts index 25660b8..2b6ef12 100644 --- a/src/number-expression.ts +++ b/src/number-expression.ts @@ -73,6 +73,11 @@ export enum ValueType { * 贝塞尔曲线路径 */ BEZIER_CURVE_PATH = 22, + + /** + * 贝塞尔曲线四元数 + */ + BEZIER_CURVE_QUAT = 23, } export type vec2 = [x: number, y: number]; @@ -100,6 +105,8 @@ export type NumberExpression = FixedNumberExpression | RandomValue; export type FixedVec3Expression = ConstantVec3 | BezierPath | LinearPath | BezierCurvePath; +export type FixedQuatExpression = BezierCurveQuat; + /** * 常数数值 * [0,5] @@ -268,11 +275,21 @@ export type BezierValue = [type: ValueType.BEZIER_CURVE, value: BezierKeyframeVa */ export type BezierCurvePathValue = [easing: BezierKeyframeValue[], points: vec3[], controlePoints: vec3[]]; +/** + * 贝塞尔曲线路径关键帧值 + */ +export type BezierCurveQuatValue = [easing: BezierKeyframeValue[], points: vec4[], controlePoints: vec4[]]; + /** * 贝塞尔曲线路径关键帧 */ export type BezierCurvePath = [type: ValueType.BEZIER_CURVE_PATH, value: BezierCurvePathValue]; +/** + * 贝塞尔曲线路径关键帧 + */ +export type BezierCurveQuat = [type: ValueType.BEZIER_CURVE_QUAT, value: BezierCurveQuatValue]; + /*********************************************/ /* 颜色属性参数 */ /*********************************************/