3d/
3d.rs

1use macroquad::prelude::*;
2
3#[macroquad::main("3D")]
4async fn main() {
5    let rust_logo = load_texture("examples/rust.png").await.unwrap();
6    let ferris = load_texture("examples/ferris.png").await.unwrap();
7
8    loop {
9        clear_background(LIGHTGRAY);
10
11        // Going 3d!
12
13        set_camera(&Camera3D {
14            position: vec3(-20., 15., 0.),
15            up: vec3(0., 1., 0.),
16            target: vec3(0., 0., 0.),
17            ..Default::default()
18        });
19
20        draw_grid(20, 1., BLACK, GRAY);
21
22        draw_cube_wires(vec3(0., 1., -6.), vec3(2., 2., 2.), DARKGREEN);
23        draw_cube_wires(vec3(0., 1., 6.), vec3(2., 2., 2.), DARKBLUE);
24        draw_cube_wires(vec3(2., 1., 2.), vec3(2., 2., 2.), YELLOW);
25
26        draw_plane(vec3(-8., 0., -8.), vec2(5., 5.), Some(&ferris), WHITE);
27
28        draw_cube(
29            vec3(-5., 1., -2.),
30            vec3(2., 2., 2.),
31            Some(&rust_logo),
32            WHITE,
33        );
34        draw_cube(vec3(-5., 1., 2.), vec3(2., 2., 2.), Some(&ferris), WHITE);
35        draw_cube(vec3(2., 0., -2.), vec3(0.4, 0.4, 0.4), None, BLACK);
36
37        draw_sphere(vec3(-8., 0., 0.), 1., None, BLUE);
38
39        // Back to screen space, render some text
40
41        set_default_camera();
42        draw_text("WELCOME TO 3D WORLD", 10.0, 20.0, 30.0, BLACK);
43
44        next_frame().await
45    }
46}