From 1f1511c7753b1a7da3ec45c192c8ec3ef71a7788 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Thu, 25 Jan 2024 01:13:37 -0800 Subject: [PATCH 1/4] Add Animated Material example --- Cargo.toml | 11 +++++ examples/3d/animated_material.rs | 79 ++++++++++++++++++++++++++++++++ examples/README.md | 1 + 3 files changed, 91 insertions(+) create mode 100644 examples/3d/animated_material.rs diff --git a/Cargo.toml b/Cargo.toml index 65bf72603684f..b04b8f7cdd072 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -552,6 +552,17 @@ description = "Demonstrates how to use the `Camera::viewport_to_world` method" category = "3D Rendering" wasm = true +[[example]] +name = "animated_material" +path = "examples/3d/animated_material.rs" +doc-scrape-examples = true + +[package.metadata.example.animated_material] +name = "Animated Material" +description = "Shows how to animate material properties" +category = "3D Rendering" +wasm = true + [[example]] name = "generate_custom_mesh" path = "examples/3d/generate_custom_mesh.rs" diff --git a/examples/3d/animated_material.rs b/examples/3d/animated_material.rs new file mode 100644 index 0000000000000..f54381e21b39c --- /dev/null +++ b/examples/3d/animated_material.rs @@ -0,0 +1,79 @@ +//! Shows how to animate material properties + +use bevy::prelude::*; +use bevy_internal::utils::HashSet; +use core::f32::consts::PI; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(Update, (animate_materials, make_materials_unique)) + .run(); +} + +fn setup(mut commands: Commands, asset_server: Res) { + commands.spawn(( + Camera3dBundle { + transform: Transform::from_xyz(3.0, 1.0, 3.0) + .looking_at(Vec3::new(0.0, 0.2, 0.0), Vec3::Y), + ..default() + }, + EnvironmentMapLight { + diffuse_map: asset_server.load("environment_maps/pisa_diffuse_rgb9e5_zstd.ktx2"), + specular_map: asset_server.load("environment_maps/pisa_specular_rgb9e5_zstd.ktx2"), + intensity: 1500.0, + }, + )); + + let helmet = asset_server.load("models/FlightHelmet/FlightHelmet.gltf#Scene0"); + for x in -2..3 { + for z in -2..3 { + commands.spawn(SceneBundle { + scene: helmet.clone(), + transform: Transform::from_translation(Vec3::new(x as f32, 0.0, z as f32)), + ..default() + }); + } + } +} + +fn animate_materials( + material_handles: Query<&Handle>, + time: Res