From cb500033c06e041e976558593fb8dbd879077c26 Mon Sep 17 00:00:00 2001 From: numzero Date: Sun, 29 Dec 2024 21:58:58 +0300 Subject: [PATCH] Better viewport --- src/bin/minitracer/main.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/bin/minitracer/main.rs b/src/bin/minitracer/main.rs index d9c8acc..885a9cf 100644 --- a/src/bin/minitracer/main.rs +++ b/src/bin/minitracer/main.rs @@ -1,6 +1,6 @@ use std::error::Error; -use glam::{vec2, vec3}; +use glam::{uvec2, vec2, vec3}; use image::ImageReader; use present::Presenter; use trace::{Tracer, TracerData, TracerEnv, Vertex}; @@ -17,18 +17,13 @@ mod trace; pub use trace::Sphere; fn make_viewport(w: u32, h: u32) -> [Vertex; 4] { - let w = w as f32; - let h = h as f32; - let (w, h) = (1.0f32.max(w / h), 1.0f32.max(h / w)); + let size = uvec2(w, h).as_vec2(); + let size = size.normalize(); + let (w, h) = (size.x, size.y); let r = 1.0f32; - let screen_coord = [vec2(-h, -w), vec2(h, -w), vec2(-h, w), vec2(h, w)]; - let eye = vec3(-r, 0.0, 0.0); - let world_coord = [ - vec3(0.0, -1.0, -1.0), - vec3(0.0, 1.0, -1.0), - vec3(0.0, -1.0, 1.0), - vec3(0.0, 1.0, 1.0), - ]; + let screen_coord = [vec2(-1., -1.), vec2(1., -1.), vec2(-1., 1.), vec2(1., 1.)]; + let eye = vec3(-r, 0., 0.); + let world_coord = [vec3(0., -w, -h), vec3(0., w, -h), vec3(0., -w, h), vec3(0., w, h)]; [0, 1, 2, 3].map(|k| Vertex { eye, world: world_coord[k],