lights/common/
lights_scene.rs1use super::*;
2
3pub fn geometry() -> [MeshData; 2] {
4 [MeshData::plane(160.0), MeshData::cube(2.0)]
5}
6
7pub fn setup(ctx: &mut Ctx, count: usize) {
8 ctx.camera3d.position = vec3(0.0, 34.0, 62.0);
9 ctx.camera3d.look_at(vec3(0.0, 0.0, -25.0));
10 ctx.camera3d.far = 250.0;
11 ctx.lighting.shadows = false;
12 ctx.lighting.sun_intensity = 0.0;
13 ctx.lighting.ambient_intensity = 0.015;
14 ctx.sky.atmosphere = false;
15 ctx.post.bloom = 0.0;
16 let stone = ctx.create_material(MaterialDesc {
17 roughness: 0.5,
18 ..Default::default()
19 });
20 let [floor, cube] = geometry().map(|data| ctx.create_mesh(&data, stone));
21 ctx.world
22 .spawn((Transform3D::at(vec3(0.0, -1.0, -25.0)), Model::new(floor)));
23 for z in 0..10 {
24 for x in 0..15 {
25 ctx.world.spawn((
26 Transform3D::at(vec3((x as f32 - 7.0) * 6.0, 0.0, 10.0 - z as f32 * 7.0)),
27 Model::new(cube),
28 ));
29 }
30 }
31 for i in 0..count {
32 let x = ((i * 37) % 101) as f32 - 50.0;
33 let z = 15.0 - ((i * 53) % 101) as f32;
34 let color = [
35 Color::rgb(1.0, 0.12, 0.03),
36 Color::rgb(0.06, 0.3, 1.0),
37 Color::rgb(0.05, 1.0, 0.25),
38 ][i % 3];
39 let t = Transform3D::at(vec3(x, 3.0, z));
40 if i % 4 == 0 {
41 ctx.world.spawn((
42 t.looking_at(vec3(x + 2.0, -1.0, z - 3.0)),
43 SpotLight3D {
44 color,
45 intensity: 80.0,
46 range: 12.0,
47 inner_angle: 0.3,
48 outer_angle: 0.7,
49 ..Default::default()
50 },
51 ));
52 } else {
53 ctx.world.spawn((
54 t,
55 PointLight3D {
56 color,
57 intensity: 30.0,
58 range: 9.0,
59 ..Default::default()
60 },
61 ));
62 }
63 }
64}