Add more matrix4 and transform tests
This commit is contained in:
parent
213fc580a9
commit
24a9191189
2 changed files with 47 additions and 0 deletions
|
@ -1127,6 +1127,48 @@ pub mod matrix4 {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_look_to_rh() {
|
||||||
|
let eye = Point3::new(10.0, 15.0, 20.0);
|
||||||
|
let dir = Vector3::new(1.0, 2.0, 3.0).normalize();
|
||||||
|
let up = Vector3::unit_y();
|
||||||
|
|
||||||
|
let m = Matrix4::look_to_rh(eye, dir, up);
|
||||||
|
#[allow(deprecated)]
|
||||||
|
assert_ulps_eq!(m, Matrix4::look_at_dir(eye, dir, up));
|
||||||
|
|
||||||
|
let expected = Matrix4::from([
|
||||||
|
[-0.9486833, -0.16903086, -0.26726127, 0.0],
|
||||||
|
[0.0, 0.84515435, -0.53452253, 0.0],
|
||||||
|
[0.31622776, -0.5070926, -0.8017838, 0.0],
|
||||||
|
[3.1622782, -0.84515476, 26.726126, 1.0_f32]
|
||||||
|
]);
|
||||||
|
assert_ulps_eq!(expected, m);
|
||||||
|
|
||||||
|
let m = Matrix4::look_at_rh(eye, eye + dir, up);
|
||||||
|
assert_abs_diff_eq!(expected, m, epsilon = 1.0e-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_look_to_lh() {
|
||||||
|
let eye = Point3::new(10.0, 15.0, 20.0);
|
||||||
|
let dir = Vector3::new(1.0, 2.0, 3.0).normalize();
|
||||||
|
let up = Vector3::unit_y();
|
||||||
|
|
||||||
|
let m = Matrix4::look_to_lh(eye, dir, up);
|
||||||
|
|
||||||
|
let expected = Matrix4::from([
|
||||||
|
[0.9486833, -0.16903086, 0.26726127, 0.0],
|
||||||
|
[0.0, 0.84515435, 0.53452253, 0.0],
|
||||||
|
[-0.31622776, -0.5070926, 0.8017838, 0.0],
|
||||||
|
[-3.1622782, -0.84515476, -26.726126, 1.0_f32]
|
||||||
|
]);
|
||||||
|
assert_ulps_eq!(expected, m);
|
||||||
|
|
||||||
|
let m = Matrix4::look_at_lh(eye, eye + dir, up);
|
||||||
|
assert_abs_diff_eq!(expected, m, epsilon = 1.0e-4);
|
||||||
|
}
|
||||||
|
|
||||||
mod from {
|
mod from {
|
||||||
use cgmath::*;
|
use cgmath::*;
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ fn test_look_at() {
|
||||||
let center = Point3::new(0.0f64, 0.0, 0.0);
|
let center = Point3::new(0.0f64, 0.0, 0.0);
|
||||||
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
||||||
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at(eye, center, up);
|
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at(eye, center, up);
|
||||||
|
assert_ulps_eq!(t, Decomposed::<Vector3<f64>, Quaternion<f64>>::look_at(eye, center, up));
|
||||||
let point = Point3::new(1.0f64, 0.0, 0.0);
|
let point = Point3::new(1.0f64, 0.0, 0.0);
|
||||||
let view_point = Point3::new(0.0f64, 1.0, 5.0);
|
let view_point = Point3::new(0.0f64, 1.0, 5.0);
|
||||||
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
||||||
|
@ -105,12 +106,14 @@ fn test_look_at_lh() {
|
||||||
let center = Point3::new(0.0f64, 0.0, 0.0);
|
let center = Point3::new(0.0f64, 0.0, 0.0);
|
||||||
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
||||||
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at_lh(eye, center, up);
|
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at_lh(eye, center, up);
|
||||||
|
assert_ulps_eq!(t, Decomposed::<Vector3<f64>, Quaternion<f64>>::look_at_lh(eye, center, up));
|
||||||
let point = Point3::new(1.0f64, 0.0, 0.0);
|
let point = Point3::new(1.0f64, 0.0, 0.0);
|
||||||
let view_point = Point3::new(0.0f64, 1.0, 5.0);
|
let view_point = Point3::new(0.0f64, 1.0, 5.0);
|
||||||
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
||||||
|
|
||||||
// Decomposed::look_at_lh and Matrix4::look_at_lh should be consistent
|
// Decomposed::look_at_lh and Matrix4::look_at_lh should be consistent
|
||||||
let t: Matrix4<f64> = Transform::look_at_lh(eye, center, up);
|
let t: Matrix4<f64> = Transform::look_at_lh(eye, center, up);
|
||||||
|
assert_ulps_eq!(t, Matrix4::<f64>::look_at_lh(eye, center, up));
|
||||||
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
||||||
|
|
||||||
// Decomposed::look_at is inconsistent and deprecated, but verify that the behvaior
|
// Decomposed::look_at is inconsistent and deprecated, but verify that the behvaior
|
||||||
|
@ -126,12 +129,14 @@ fn test_look_at_rh() {
|
||||||
let center = Point3::new(0.0f64, 0.0, 0.0);
|
let center = Point3::new(0.0f64, 0.0, 0.0);
|
||||||
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
let up = Vector3::new(1.0f64, 0.0, 0.0);
|
||||||
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at_rh(eye, center, up);
|
let t: Decomposed<Vector3<f64>, Quaternion<f64>> = Transform::look_at_rh(eye, center, up);
|
||||||
|
assert_ulps_eq!(t, Decomposed::<Vector3<f64>, Quaternion<f64>>::look_at_rh(eye, center, up));
|
||||||
let point = Point3::new(1.0f64, 0.0, 0.0);
|
let point = Point3::new(1.0f64, 0.0, 0.0);
|
||||||
let view_point = Point3::new(0.0f64, 1.0, -5.0);
|
let view_point = Point3::new(0.0f64, 1.0, -5.0);
|
||||||
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
||||||
|
|
||||||
// Decomposed::look_at_rh and Matrix4::look_at_rh should be consistent
|
// Decomposed::look_at_rh and Matrix4::look_at_rh should be consistent
|
||||||
let t: Matrix4<f64> = Transform::look_at_rh(eye, center, up);
|
let t: Matrix4<f64> = Transform::look_at_rh(eye, center, up);
|
||||||
|
assert_ulps_eq!(t, Matrix4::<f64>::look_at_rh(eye, center, up));
|
||||||
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
assert_ulps_eq!(&t.transform_point(point), &view_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue