fixed aspect scaling
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user