|
| 1 | +use bevy::prelude::*; |
| 2 | + |
| 3 | +fn main() { |
| 4 | + App::new() |
| 5 | + .insert_resource(ClearColor(Color::BLACK)) |
| 6 | + .add_plugins(DefaultPlugins) |
| 7 | + .add_startup_system(setup) |
| 8 | + .run(); |
| 9 | +} |
| 10 | + |
| 11 | +fn setup( |
| 12 | + mut commands: Commands, |
| 13 | + mut meshes: ResMut<Assets<Mesh>>, |
| 14 | + mut materials: ResMut<Assets<StandardMaterial>>, |
| 15 | +) { |
| 16 | + // camera |
| 17 | + commands.spawn_bundle(PerspectiveCameraBundle { |
| 18 | + transform: Transform::from_xyz(1.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), |
| 19 | + ..Default::default() |
| 20 | + }); |
| 21 | + |
| 22 | + // plane |
| 23 | + commands.spawn_bundle(PbrBundle { |
| 24 | + mesh: meshes.add(Mesh::from(shape::Plane { size: 100.0 })), |
| 25 | + material: materials.add(StandardMaterial { |
| 26 | + base_color: Color::rgb(0.2, 0.2, 0.2), |
| 27 | + perceptual_roughness: 0.08, |
| 28 | + ..Default::default() |
| 29 | + }), |
| 30 | + ..Default::default() |
| 31 | + }); |
| 32 | + |
| 33 | + const COUNT: usize = 6; |
| 34 | + let position_range = -4.0..4.0; |
| 35 | + let radius_range = 0.0..0.8; |
| 36 | + let pos_len = position_range.end - position_range.start; |
| 37 | + let radius_len = radius_range.end - radius_range.start; |
| 38 | + let mesh = meshes.add(Mesh::from(shape::UVSphere { |
| 39 | + sectors: 128, |
| 40 | + stacks: 64, |
| 41 | + ..Default::default() |
| 42 | + })); |
| 43 | + |
| 44 | + for i in 0..COUNT { |
| 45 | + let percent = i as f32 / COUNT as f32; |
| 46 | + let radius = radius_range.start + percent * radius_len; |
| 47 | + |
| 48 | + // sphere light |
| 49 | + commands |
| 50 | + .spawn_bundle(PbrBundle { |
| 51 | + mesh: mesh.clone(), |
| 52 | + material: materials.add(StandardMaterial { |
| 53 | + base_color: Color::rgb(0.5, 0.5, 1.0), |
| 54 | + unlit: true, |
| 55 | + ..Default::default() |
| 56 | + }), |
| 57 | + transform: Transform::from_xyz(position_range.start + percent * pos_len, 0.6, 0.0) |
| 58 | + .with_scale(Vec3::splat(radius)), |
| 59 | + ..Default::default() |
| 60 | + }) |
| 61 | + .with_children(|children| { |
| 62 | + children.spawn_bundle(PointLightBundle { |
| 63 | + point_light: PointLight { |
| 64 | + intensity: 1500.0, |
| 65 | + radius, |
| 66 | + color: Color::rgb(0.2, 0.2, 1.0), |
| 67 | + ..Default::default() |
| 68 | + }, |
| 69 | + ..Default::default() |
| 70 | + }); |
| 71 | + }); |
| 72 | + } |
| 73 | +} |
0 commit comments