//! Skinned mesh example with mesh and joints data loaded from a glTF file. //! Example taken from use std::f32::consts::PI; use bevy::{pbr::AmbientLight, prelude::*, render::mesh::skinning::SkinnedMesh}; fn main() { App::new() .add_plugins(DefaultPlugins) .insert_resource(AmbientLight { brightness: 1.0, ..default() }) .add_startup_system(setup) .add_system(joint_animation) .run(); } fn setup(mut commands: Commands, asset_server: Res) { // Create a camera commands.spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); // Spawn the first scene in `models/SimpleSkin/SimpleSkin.gltf` commands.spawn_bundle(SceneBundle { scene: asset_server.load("models/SimpleSkin/SimpleSkin.gltf#Scene0"), ..default() }); } /// The scene hierarchy currently looks somewhat like this: /// /// ```ignore /// /// + Mesh node (without `PbrBundle` or `SkinnedMesh` component) /// + Skinned mesh entity (with `PbrBundle` and `SkinnedMesh` component, created by glTF loader) /// + First joint /// + Second joint /// ``` /// /// In this example, we want to get and animate the second joint. /// It is similar to the animation defined in `models/SimpleSkin/SimpleSkin.gltf`. fn joint_animation( time: Res