Adding a bezier curve example (#8194)
# Objective Examples on how to use the freshly merged `Bezier` struct ( #7653 ) are missing. ## Solution - Added a `bezier_curve.rs` example in the `animation/` folder. --------- Co-authored-by: ira <JustTheCoolDude@gmail.com> Co-authored-by: Aevyrie <aevyrie@gmail.com>
This commit is contained in:
		
							parent
							
								
									e243175d27
								
							
						
					
					
						commit
						cfa750a741
					
				
							
								
								
									
										10
									
								
								Cargo.toml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Cargo.toml
									
									
									
									
									
								
							| @ -722,6 +722,16 @@ description = "Create and play an animation defined by code that operates on the | |||||||
| category = "Animation" | category = "Animation" | ||||||
| wasm = true | wasm = true | ||||||
| 
 | 
 | ||||||
|  | [[example]] | ||||||
|  | name = "cubic_curve" | ||||||
|  | path = "examples/animation/cubic_curve.rs" | ||||||
|  | 
 | ||||||
|  | [package.metadata.example.cubic_curve] | ||||||
|  | name = "Cubic Curve" | ||||||
|  | description = "Bezier curve example showing a cube following a cubic curve" | ||||||
|  | category = "Animation" | ||||||
|  | wasm = true | ||||||
|  | 
 | ||||||
| [[example]] | [[example]] | ||||||
| name = "custom_skinned_mesh" | name = "custom_skinned_mesh" | ||||||
| path = "examples/animation/custom_skinned_mesh.rs" | path = "examples/animation/custom_skinned_mesh.rs" | ||||||
|  | |||||||
| @ -144,6 +144,7 @@ Example | Description | |||||||
| --- | --- | --- | --- | ||||||
| [Animated Fox](../examples/animation/animated_fox.rs) | Plays an animation from a skinned glTF | [Animated Fox](../examples/animation/animated_fox.rs) | Plays an animation from a skinned glTF | ||||||
| [Animated Transform](../examples/animation/animated_transform.rs) | Create and play an animation defined by code that operates on the `Transform` component | [Animated Transform](../examples/animation/animated_transform.rs) | Create and play an animation defined by code that operates on the `Transform` component | ||||||
|  | [Cubic Curve](../examples/animation/cubic_curve.rs) | Bezier curve example showing a cube following a cubic curve | ||||||
| [Custom Skinned Mesh](../examples/animation/custom_skinned_mesh.rs) | Skinned mesh example with mesh and joints data defined in code | [Custom Skinned Mesh](../examples/animation/custom_skinned_mesh.rs) | Skinned mesh example with mesh and joints data defined in code | ||||||
| [glTF Skinned Mesh](../examples/animation/gltf_skinned_mesh.rs) | Skinned mesh example with mesh and joints data loaded from a glTF file | [glTF Skinned Mesh](../examples/animation/gltf_skinned_mesh.rs) | Skinned mesh example with mesh and joints data loaded from a glTF file | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										89
									
								
								examples/animation/cubic_curve.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								examples/animation/cubic_curve.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | //! Demonstrates how to work with Cubic curves.
 | ||||||
|  | 
 | ||||||
|  | use bevy::{ | ||||||
|  |     math::{cubic_splines::CubicCurve, vec3}, | ||||||
|  |     prelude::*, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #[derive(Component)] | ||||||
|  | pub struct Curve(CubicCurve<Vec3>); | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     App::new() | ||||||
|  |         .add_plugins(DefaultPlugins) | ||||||
|  |         .add_systems(Startup, setup) | ||||||
|  |         .add_systems(Update, animate_cube) | ||||||
|  |         .run(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn setup( | ||||||
|  |     mut commands: Commands, | ||||||
|  |     mut meshes: ResMut<Assets<Mesh>>, | ||||||
|  |     mut materials: ResMut<Assets<StandardMaterial>>, | ||||||
|  | ) { | ||||||
|  |     // Define your control points
 | ||||||
|  |     // These points will define the curve
 | ||||||
|  |     // You can learn more about bezier curves here
 | ||||||
|  |     // https://en.wikipedia.org/wiki/B%C3%A9zier_curve
 | ||||||
|  |     let points = [[ | ||||||
|  |         vec3(-6., 2., 0.), | ||||||
|  |         vec3(12., 8., 0.), | ||||||
|  |         vec3(-12., 8., 0.), | ||||||
|  |         vec3(6., 2., 0.), | ||||||
|  |     ]]; | ||||||
|  | 
 | ||||||
|  |     // Make a CubicCurve
 | ||||||
|  |     let bezier = Bezier::new(points).to_curve(); | ||||||
|  | 
 | ||||||
|  |     // Spawning a cube to experiment on
 | ||||||
|  |     commands.spawn(( | ||||||
|  |         PbrBundle { | ||||||
|  |             mesh: meshes.add(shape::Cube::default().into()), | ||||||
|  |             material: materials.add(Color::ORANGE.into()), | ||||||
|  |             transform: Transform::from_translation(points[0][0]), | ||||||
|  |             ..default() | ||||||
|  |         }, | ||||||
|  |         Curve(bezier), | ||||||
|  |     )); | ||||||
|  | 
 | ||||||
|  |     // Some light to see something
 | ||||||
|  |     commands.spawn(PointLightBundle { | ||||||
|  |         point_light: PointLight { | ||||||
|  |             intensity: 9000., | ||||||
|  |             range: 100., | ||||||
|  |             shadows_enabled: true, | ||||||
|  |             ..default() | ||||||
|  |         }, | ||||||
|  |         transform: Transform::from_xyz(8., 16., 8.), | ||||||
|  |         ..default() | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     // ground plane
 | ||||||
|  |     commands.spawn(PbrBundle { | ||||||
|  |         mesh: meshes.add(shape::Plane::from_size(50.).into()), | ||||||
|  |         material: materials.add(Color::SILVER.into()), | ||||||
|  |         ..default() | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     // The camera
 | ||||||
|  |     commands.spawn(Camera3dBundle { | ||||||
|  |         transform: Transform::from_xyz(0., 6., 12.).looking_at(Vec3::new(0., 3., 0.), Vec3::Y), | ||||||
|  |         ..default() | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub fn animate_cube( | ||||||
|  |     time: Res<Time>, | ||||||
|  |     mut query: Query<(&mut Transform, &Curve)>, | ||||||
|  |     mut gizmos: Gizmos, | ||||||
|  | ) { | ||||||
|  |     let t = (time.elapsed_seconds().sin() + 1.) / 2.; | ||||||
|  | 
 | ||||||
|  |     for (mut transform, cubic_curve) in &mut query { | ||||||
|  |         // Draw the curve
 | ||||||
|  |         gizmos.linestrip(cubic_curve.0.iter_positions(50), Color::WHITE); | ||||||
|  |         // position takes a point from the curve where 0 is the initial point
 | ||||||
|  |         // and 1 is the last point
 | ||||||
|  |         transform.translation = cubic_curve.0.position(t); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Kjolnyr
						Kjolnyr