From 7df6f691cbb8e61e33d95ddb68ece565bbed4721 Mon Sep 17 00:00:00 2001 From: Rob Parrett Date: Tue, 26 Apr 2022 10:07:39 -0700 Subject: [PATCH 1/8] Add 3d shapes example --- Cargo.toml | 4 ++ assets/textures/uv_debug.png | Bin 0 -> 38683 bytes examples/3d/shapes.rs | 86 +++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 assets/textures/uv_debug.png create mode 100644 examples/3d/shapes.rs diff --git a/Cargo.toml b/Cargo.toml index 35276aeb441be..339200b9400b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -200,6 +200,10 @@ path = "examples/3d/pbr.rs" name = "shadow_biases" path = "examples/3d/shadow_biases.rs" +[[example]] +name = "shapes" +path = "examples/3d/shapes.rs" + [[example]] name = "shadow_caster_receiver" path = "examples/3d/shadow_caster_receiver.rs" diff --git a/assets/textures/uv_debug.png b/assets/textures/uv_debug.png new file mode 100644 index 0000000000000000000000000000000000000000..05f9b1041ea015692fb9da996e2ad0cc8e282e20 GIT binary patch literal 38683 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ξNa`%?tlmnd-mSt&TQ2 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 LgH?$oIsX3uy@eY} literal 0 HcmV?d00001 diff --git a/examples/3d/shapes.rs b/examples/3d/shapes.rs new file mode 100644 index 0000000000000..9159a41fabf07 --- /dev/null +++ b/examples/3d/shapes.rs @@ -0,0 +1,86 @@ +use bevy::prelude::*; + +fn main() { + App::new() + .insert_resource(Msaa { samples: 4 }) + .add_plugins(DefaultPlugins) + .add_startup_system(setup) + .add_system(rotate) + .run(); +} + +#[derive(Component)] +struct Shape; + +const X_EXTENT: f32 = 14.; + +fn setup( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, + asset_server: ResMut, +) { + let debug_material = materials.add(StandardMaterial { + base_color_texture: Some(asset_server.load("textures/uv_debug.png")), + ..default() + }); + + let shapes = [ + meshes.add(shape::Cube::default().into()), + meshes.add(shape::Box::default().into()), + meshes.add(shape::Capsule::default().into()), + meshes.add(shape::Torus::default().into()), + meshes.add(shape::Icosphere::default().into()), + meshes.add(shape::UVSphere::default().into()), + ]; + + let num_shapes = shapes.len(); + + for (i, shape) in shapes.into_iter().enumerate() { + commands + .spawn_bundle(PbrBundle { + mesh: shape, + material: debug_material.clone(), + transform: Transform { + translation: Vec3::new( + -X_EXTENT / 2. + i as f32 / (num_shapes - 1) as f32 * X_EXTENT, + 2.0, + 0.0, + ), + ..default() + }, + ..Default::default() + }) + .insert(Shape); + } + + commands.spawn_bundle(PointLightBundle { + point_light: PointLight { + intensity: 9000.0, + range: 100., + shadows_enabled: true, + ..Default::default() + }, + transform: Transform::from_xyz(8.0, 16.0, 8.0), + ..Default::default() + }); + + // ground plane + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(shape::Plane { size: 50. }.into()), + material: materials.add(Color::SILVER.into()), + ..Default::default() + }); + + commands.spawn_bundle(PerspectiveCameraBundle { + transform: Transform::from_xyz(0.0, 6., 12.0).looking_at(Vec3::new(0., 1., 0.), Vec3::Y), + ..Default::default() + }); +} + +fn rotate(mut query: Query<&mut Transform, With>, time: Res

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ξNa`%?tlmnd-mSt&TQ2 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 LgH?$oIsX3uy@eY} diff --git a/examples/3d/shapes.rs b/examples/3d/shapes.rs index 9159a41fabf07..1625128942e54 100644 --- a/examples/3d/shapes.rs +++ b/examples/3d/shapes.rs @@ -1,4 +1,7 @@ -use bevy::prelude::*; +use bevy::{ + prelude::*, + render::render_resource::{Extent3d, TextureDimension, TextureFormat}, +}; fn main() { App::new() @@ -17,11 +20,11 @@ const X_EXTENT: f32 = 14.; fn setup( mut commands: Commands, mut meshes: ResMut>, + mut images: ResMut>, mut materials: ResMut>, - asset_server: ResMut, ) { let debug_material = materials.add(StandardMaterial { - base_color_texture: Some(asset_server.load("textures/uv_debug.png")), + base_color_texture: Some(images.add(uv_debug_texture())), ..default() }); @@ -84,3 +87,33 @@ fn rotate(mut query: Query<&mut Transform, With>, time: Res