fixed aspect scaling

This commit is contained in:
2025-03-30 16:54:01 -04:00
parent 2e11d2c2ab
commit 6cd85f2f3e
2 changed files with 23 additions and 14 deletions

View File

@@ -26,6 +26,14 @@ impl Camera {
Vector2::new(1.0, fsize.y / fsize.x) Vector2::new(1.0, fsize.y / fsize.x)
} }
} }
pub fn inv_scale(&self, size: &Vector2<u32>) -> Vector2<f32> {
let fsize: Vector2<f32> = size.cast();
if size.x < size.y {
Vector2::new(fsize.y / fsize.x, 1.0)
} else {
Vector2::new(1.0, fsize.x / fsize.y)
}
}
} }
impl Default for Camera { impl Default for Camera {

View File

@@ -29,24 +29,25 @@ impl WindowView {
visible_chunks.x.next_power_of_two(), visible_chunks.x.next_power_of_two(),
visible_chunks.y.next_power_of_two(), visible_chunks.y.next_power_of_two(),
); );
let adj_zoom = camera.zoom.level() - CHUNK_POW as i32; // let adj_zoom = camera.zoom.level() - CHUNK_POW as i32;
let pos = camera.pos.zip_map(&rendered_chunks, |pos, rc| { // let pos = camera.pos.zip_map(&rendered_chunks, |pos, rc| {
let p = (pos << adj_zoom).with_lens(1, 1); // let p = (pos << adj_zoom).with_lens(1, 1);
let (pw, pd) = p.split_whole_dec(); // let (pw, pd) = p.split_whole_dec();
let mut chunk = (pw.parts().first().unwrap_or(&0) & (rc - 1)) as f32; // let mut chunk = (pw.parts().first().unwrap_or(&0) & (rc - 1)) as f32;
if pw.is_neg() { // if pw.is_neg() {
chunk = rc as f32 - chunk; // chunk = rc as f32 - chunk;
} // }
let dec = f32::from(pd); // let dec = f32::from(pd);
chunk + dec // chunk + dec
}); // });
//
let stretch = size.cast::<f32>() * camera.zoom.rel_zoom() / (CHUNK_WIDTH as f32); // let stretch = size.cast::<f32>() * camera.zoom.rel_zoom() / (CHUNK_WIDTH as f32);
let aspect = camera.inv_scale(size) * 2.0;
let (pos, stretch) = if let Some(ss_cam) = ss_cam { let (pos, stretch) = if let Some(ss_cam) = ss_cam {
let s = camera.zoom.mult() * ss_cam.zoom.inv_mult(); let s = camera.zoom.mult() * ss_cam.zoom.inv_mult();
( (
((&camera.pos - &ss_cam.pos) * ss_cam.zoom.inv_mult().clone()).map(f32::from) * 2.0, ((&camera.pos - &ss_cam.pos) * ss_cam.zoom.inv_mult().clone()).map(f32::from).component_mul(&aspect),
Vector2::from_element(f32::from(s)), Vector2::from_element(f32::from(s)),
) )
} else { } else {