|
| 1 | +//! GLTF manual page. |
| 2 | +
|
| 3 | +use crate::workspace_dir; |
| 4 | + |
| 5 | +#[tokio::test] |
| 6 | +async fn manual_gltf() { |
| 7 | + // ANCHOR: setup |
| 8 | + use renderling::{ |
| 9 | + camera::Camera, |
| 10 | + context::Context, |
| 11 | + glam::Vec4, |
| 12 | + glam::{Mat4, Vec3}, |
| 13 | + stage::Stage, |
| 14 | + }; |
| 15 | + |
| 16 | + let ctx = Context::headless(256, 256).await; |
| 17 | + let stage: Stage = ctx |
| 18 | + .new_stage() |
| 19 | + .with_background_color(Vec4::new(0.5, 0.5, 0.5, 1.0)); |
| 20 | + |
| 21 | + let _camera: Camera = { |
| 22 | + let aspect = 1.0; |
| 23 | + let fovy = core::f32::consts::PI / 4.0; |
| 24 | + let znear = 0.1; |
| 25 | + let zfar = 1000.0; |
| 26 | + let projection = Mat4::perspective_rh(fovy, aspect, znear, zfar); |
| 27 | + let y = 50.0; |
| 28 | + let eye = Vec3::new(120.0, y, 120.0); |
| 29 | + let target = Vec3::new(0.0, y, 0.0); |
| 30 | + let up = Vec3::Y; |
| 31 | + let view = Mat4::look_at_rh(eye, target, up); |
| 32 | + |
| 33 | + stage |
| 34 | + .new_camera() |
| 35 | + .with_projection_and_view(projection, view) |
| 36 | + }; |
| 37 | + // ANCHOR_END: setup |
| 38 | + |
| 39 | + // ANCHOR: load |
| 40 | + use renderling::{gltf::GltfDocument, types::GpuOnlyArray}; |
| 41 | + let _model: GltfDocument<GpuOnlyArray> = stage |
| 42 | + .load_gltf_document_from_path(workspace_dir().join("gltf/Fox.glb")) |
| 43 | + .unwrap() |
| 44 | + .into_gpu_only(); |
| 45 | + // ANCHOR_END: load |
| 46 | + |
| 47 | + super::cwd_to_manual_assets_dir(); |
| 48 | + |
| 49 | + // ANCHOR: render_1 |
| 50 | + let frame = ctx.get_next_frame().unwrap(); |
| 51 | + stage.render(&frame.view()); |
| 52 | + let img = frame.read_image().await.unwrap(); |
| 53 | + img.save("gltf-example-shadow.png").unwrap(); |
| 54 | + frame.present(); |
| 55 | + // ANCHOR_END: render_1 |
| 56 | + |
| 57 | + // ANCHOR: no_lights |
| 58 | + stage.set_has_lighting(false); |
| 59 | + // ANCHOR_END: no_lights |
| 60 | + |
| 61 | + let frame = ctx.get_next_frame().unwrap(); |
| 62 | + stage.render(&frame.view()); |
| 63 | + let img = frame.read_image().await.unwrap(); |
| 64 | + img.save("gltf-example-unlit.png").unwrap(); |
| 65 | + frame.present(); |
| 66 | +} |
0 commit comments