mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-16 00:03:29 +00:00
BVH animation loading / retargeting (#25)
This PR adds support for BVH animation files, with a custom animation player and retargeting solution for our Blender Rigify-based skeletal meshes. --------- Co-authored-by: Brooks Palin <brookspalin710@gmail.com>
This commit is contained in:
+32
-2
@@ -7,7 +7,9 @@ use bevy_mod_picking::debug::DebugPickingMode;
|
||||
use crate::{
|
||||
camera_controller::{CameraController, CameraMotionSystem},
|
||||
input::{Action, InputAction, Lifecycle},
|
||||
is_editor, MainCamera,
|
||||
is_editor,
|
||||
scene::SkeletalJoint,
|
||||
MainCamera,
|
||||
};
|
||||
|
||||
#[derive(Resource, Deref, DerefMut)]
|
||||
@@ -40,7 +42,7 @@ impl Plugin for DebugPlugin {
|
||||
.run_if(is_editor)
|
||||
.run_if(resource_changed::<DebugMode>()),
|
||||
update_gizmo_line_thickness,
|
||||
(draw_world_axes, draw_debug_points)
|
||||
(draw_world_axes, draw_debug_points, draw_skeletal_joints)
|
||||
.after(CameraMotionSystem)
|
||||
.run_if(is_debug_mode),
|
||||
),
|
||||
@@ -110,6 +112,34 @@ fn draw_debug_points(
|
||||
}
|
||||
}
|
||||
|
||||
fn draw_skeletal_joints(
|
||||
mut gizmos: Gizmos,
|
||||
q_joints: Query<(&GlobalTransform, Option<&Parent>, &SkeletalJoint)>,
|
||||
) {
|
||||
for (world_xform, parent, joint) in q_joints.iter() {
|
||||
let (_, rotation, xlation) = world_xform.to_scale_rotation_translation();
|
||||
|
||||
if let Some((parent_xform, _, _)) = parent.and_then(|parent| q_joints.get(**parent).ok()) {
|
||||
let parent_xlation = parent_xform.translation();
|
||||
let bone_len = Vec3::distance(xlation, parent_xlation);
|
||||
let joint_radius = f32::min(0.01, bone_len / 6.);
|
||||
|
||||
gizmos.sphere(xlation, rotation, joint_radius, joint.0);
|
||||
gizmos.line(xlation, parent_xlation, joint.0);
|
||||
|
||||
let local_x = world_xform.right() * 0.05;
|
||||
let local_y = world_xform.up() * 0.05;
|
||||
let local_z = world_xform.back() * 0.05;
|
||||
|
||||
gizmos.line(xlation, xlation + local_x, Color::RED);
|
||||
gizmos.line(xlation, xlation + local_y, Color::GREEN);
|
||||
gizmos.line(xlation, xlation + local_z, Color::BLUE);
|
||||
} else {
|
||||
gizmos.sphere(xlation, rotation, 0.01, joint.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
#[allow(dead_code)]
|
||||
pub fn write_mat3(w: &mut impl fmt::Write, m: &Mat3) -> fmt::Result {
|
||||
|
||||
Reference in New Issue
Block a user