quat: additional tests for angle, axis, mul (hamilton product)

This commit is contained in:
Recep Aslantas
2018-04-10 17:16:31 +03:00
parent 18ef0d7af1
commit 4c79fee5d3

View File

@@ -18,11 +18,12 @@ test_quat_mul_raw(versor p, versor q, versor dest) {
void void
test_quat(void **state) { test_quat(void **state) {
mat4 inRot, outRot, view1, view2; mat4 inRot, outRot, view1, view2, rot1, rot2;
versor inQuat, outQuat, q3, q4; versor inQuat, outQuat, q3, q4, q5;
vec3 eye; vec3 eye, axis;
int i; int i;
/* 1. test quat to mat and mat to quat */
for (i = 0; i < 1000; i++) { for (i = 0; i < 1000; i++) {
test_rand_quat(inQuat); test_rand_quat(inQuat);
glmc_quat_mat4(inQuat, inRot); glmc_quat_mat4(inQuat, inRot);
@@ -37,7 +38,7 @@ test_quat(void **state) {
test_assert_quat_eq(q3, q4); test_assert_quat_eq(q3, q4);
} }
/* test lookat */ /* 2. test lookat */
test_rand_vec3(eye); test_rand_vec3(eye);
glm_quatv(q3, glm_rad(-90.0f), GLM_YUP); glm_quatv(q3, glm_rad(-90.0f), GLM_YUP);
@@ -48,4 +49,32 @@ test_quat(void **state) {
glm_quat_look(eye, q3, view2); glm_quat_look(eye, q3, view2);
test_assert_mat4_eq2(view1, view2, 0.000009); test_assert_mat4_eq2(view1, view2, 0.000009);
/* 5. test quaternion rotation matrix result */
test_rand_quat(q3);
glm_quat_mat4(q3, rot1);
/* 5.1 test axis and angle of quat */
glm_quat_axis(q3, axis);
glm_rotate_make(rot2, glm_quat_angle(q3), axis);
test_assert_mat4_eq2(rot1, rot2, 0.000009);
/* 6. test quaternion multiplication, first rotation + second = final */
test_rand_quat(q3);
test_rand_quat(q4);
glm_quat_mul(q3, q4, q5);
glm_quat_axis(q3, axis);
glm_rotate_make(rot1, glm_quat_angle(q3), axis);
glm_quat_axis(q4, axis);
glm_rotate(rot1, glm_quat_angle(q4), axis);
/* rot2 is combine of two rotation now test with quaternion result */
glm_quat_mat4(q5, rot2);
/* result must be same (almost) */
test_assert_mat4_eq2(rot1, rot2, 0.000009);
} }