Better viewport

This commit is contained in:
numzero 2024-12-29 21:58:58 +03:00
parent a2646f8f29
commit cb500033c0

View File

@ -1,6 +1,6 @@
use std::error::Error; use std::error::Error;
use glam::{vec2, vec3}; use glam::{uvec2, vec2, vec3};
use image::ImageReader; use image::ImageReader;
use present::Presenter; use present::Presenter;
use trace::{Tracer, TracerData, TracerEnv, Vertex}; use trace::{Tracer, TracerData, TracerEnv, Vertex};
@ -17,18 +17,13 @@ mod trace;
pub use trace::Sphere; pub use trace::Sphere;
fn make_viewport(w: u32, h: u32) -> [Vertex; 4] { fn make_viewport(w: u32, h: u32) -> [Vertex; 4] {
let w = w as f32; let size = uvec2(w, h).as_vec2();
let h = h as f32; let size = size.normalize();
let (w, h) = (1.0f32.max(w / h), 1.0f32.max(h / w)); let (w, h) = (size.x, size.y);
let r = 1.0f32; let r = 1.0f32;
let screen_coord = [vec2(-h, -w), vec2(h, -w), vec2(-h, w), vec2(h, w)]; let screen_coord = [vec2(-1., -1.), vec2(1., -1.), vec2(-1., 1.), vec2(1., 1.)];
let eye = vec3(-r, 0.0, 0.0); let eye = vec3(-r, 0., 0.);
let world_coord = [ let world_coord = [vec3(0., -w, -h), vec3(0., w, -h), vec3(0., -w, h), vec3(0., w, h)];
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),
];
[0, 1, 2, 3].map(|k| Vertex { [0, 1, 2, 3].map(|k| Vertex {
eye, eye,
world: world_coord[k], world: world_coord[k],