add fade in/out to dynamic bone animations

This commit is contained in:
Nick Fisher
2024-06-04 13:14:53 +08:00
parent 765d0e0839
commit f31bbccdc9
8 changed files with 115 additions and 33 deletions

View File

@@ -274,7 +274,7 @@ abstract class AbstractFilamentViewer {
/// to transform to another space, you will need to do so manually.
///
Future addBoneAnimation(FilamentEntity entity, BoneAnimationData animation,
{int skinIndex = 0});
{int skinIndex = 0, double fadeInInSecs=0.0, double fadeOutInSecs=0.0});
///
/// Gets the entity representing the bone at [boneIndex]/[skinIndex].

View File

@@ -461,7 +461,7 @@ external void reset_to_rest_pose(
@ffi.Native<
ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Int,
ffi.Pointer<ffi.Float>, ffi.Int, ffi.Float)>(
ffi.Pointer<ffi.Float>, ffi.Int, ffi.Float, ffi.Float, ffi.Float)>(
symbol: 'add_bone_animation',
assetId: 'package:dart_filament/dart_filament.dart')
external void add_bone_animation(
@@ -472,6 +472,8 @@ external void add_bone_animation(
ffi.Pointer<ffi.Float> frameData,
int numFrames,
double frameLengthInMs,
double fadeOutInSecs,
double fadeInInSecs,
);
@ffi.Native<
@@ -485,6 +487,19 @@ external void get_local_transform(
ffi.Pointer<ffi.Float> arg2,
);
@ffi.Native<
ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int,
ffi.Pointer<ffi.Float>, ffi.Int)>(
symbol: 'get_rest_local_transforms',
assetId: 'package:dart_filament/dart_filament.dart')
external void get_rest_local_transforms(
ffi.Pointer<ffi.Void> sceneManager,
int entityId,
int skinIndex,
ffi.Pointer<ffi.Float> out,
int numBones,
);
@ffi.Native<
ffi.Void Function(
ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Float>)>(

View File

@@ -4,7 +4,6 @@ import 'dart:io';
import 'dart:math';
import 'package:animation_tools_dart/animation_tools_dart.dart';
import 'package:dart_filament/dart_filament/compatibility/compatibility.dart';
import 'package:dart_filament/dart_filament/compatibility/native/compatibility.dart';
import 'package:dart_filament/dart_filament/entities/filament_entity.dart';
import 'package:dart_filament/dart_filament/entities/gizmo.dart';
@@ -676,7 +675,7 @@ class FilamentViewer extends AbstractFilamentViewer {
///
@override
Future addBoneAnimation(FilamentEntity entity, BoneAnimationData animation,
{int skinIndex = 0}) async {
{int skinIndex = 0, double fadeOutInSecs=0.0, double fadeInInSecs=0.0}) async {
if (animation.space != Space.Bone &&
animation.space != Space.ParentWorldRotation) {
throw UnimplementedError("TODO - support ${animation.space}");
@@ -739,7 +738,7 @@ class FilamentViewer extends AbstractFilamentViewer {
}
add_bone_animation(_sceneManager!, entity, skinIndex, entityBoneIndex,
data, numFrames, animation.frameLengthInMs);
data, numFrames, animation.frameLengthInMs, fadeOutInSecs, fadeInInSecs);
}
allocator.free(data);
}