now truly isometric

This commit is contained in:
numzero 2025-11-14 01:28:27 +03:00
parent d59e153370
commit 2c80885cf0
2 changed files with 29 additions and 1 deletions

View File

@ -42,6 +42,8 @@ impl OrbitalCamera {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::f32::consts::PI;
use approx::{abs_diff_eq, assert_ulps_eq}; use approx::{abs_diff_eq, assert_ulps_eq};
use glam::vec3; use glam::vec3;
@ -106,4 +108,30 @@ mod tests {
} }
} }
} }
#[test]
fn test_isometric_camera() {
let camera = OrbitalCamera {
position_yaw: PI / 4.,
position_pitch: 0.5f32.sqrt().atan(),
distance: 1.0,
};
let s13 = (1.0f32 / 3.).sqrt();
assert_ulps_eq!(camera.position(), Vec3::splat(s13), max_ulps = 3);
let tfm = camera.transform();
let o = tfm.transform_point3(vec3(0., 0., 0.));
let x = tfm.transform_point3(vec3(1., 0., 0.));
let y = tfm.transform_point3(vec3(0., 1., 0.));
let z = tfm.transform_point3(vec3(0., 0., 1.));
let s16 = (1.0f32 / 6.).sqrt();
let s12 = (1.0f32 / 2.).sqrt();
let s23 = (2.0f32 / 3.).sqrt();
let d = 1.0 - s13;
assert_ulps_eq!(o, vec3(0., 0., 1.), max_ulps = 3);
assert_ulps_eq!(z, vec3(0., s23, d), max_ulps = 3);
assert_ulps_eq!(x, vec3(s12, -s16, d), max_ulps = 3);
assert_ulps_eq!(y, vec3(-s12, -s16, d), max_ulps = 3);
}
} }

View File

@ -70,7 +70,7 @@ impl MainWindow {
fn render(&self, output: &wgpu::Texture) { fn render(&self, output: &wgpu::Texture) {
let camera = OrbitalCamera { let camera = OrbitalCamera {
position_yaw: PI / 4., position_yaw: PI / 4.,
position_pitch: PI / 6., position_pitch: 0.5f32.sqrt().atan(),
distance: 3.0, distance: 3.0,
}; };
let aspect = { let aspect = {