mirror of
https://github.com/recp/cglm.git
synced 2025-12-24 20:34:58 +00:00
This commit adds the RH/ZO perspective function. It does so in the new file `cam_rh_zo.h` and further refactors the LH variant into new file `cam_lh_zo.h`. This creates some churn in the tests and configuration files as new test files were added as well, and all these changes found their way into the build files. Tests passing on Linux.
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
/*
|
|
* Copyright (c), Recep Aslantas.
|
|
*
|
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
|
* Full license can be found in the LICENSE file
|
|
*/
|
|
|
|
#include "test_common.h"
|
|
|
|
TEST_IMPL(camera_lookat) {
|
|
mat4 view1, view2;
|
|
vec3 center,
|
|
eye = {0.024f, 14.6f, 67.04f},
|
|
dir = {0.0f, 0.0f, -1.0f},
|
|
up = {0.0f, 1.0f, 0.0f};
|
|
|
|
glm_vec3_add(eye, dir, center);
|
|
glm_lookat(eye, center, up, view1);
|
|
|
|
glm_look(eye, dir, up, view2);
|
|
|
|
ASSERTIFY(test_assert_mat4_eq(view1, view2))
|
|
|
|
TEST_SUCCESS
|
|
}
|
|
|
|
TEST_IMPL(camera_decomp) {
|
|
mat4 proj, proj2;
|
|
vec4 sizes;
|
|
float aspect, fovy, nearZ, farZ;
|
|
|
|
aspect = 0.782f;
|
|
fovy = glm_rad(49.984f);
|
|
nearZ = 0.1f;
|
|
farZ = 100.0f;
|
|
|
|
glm_perspective(fovy, aspect, nearZ, farZ, proj);
|
|
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < GLM_FLT_EPSILON)
|
|
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < GLM_FLT_EPSILON)
|
|
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < GLM_FLT_EPSILON)
|
|
|
|
glm_persp_sizes(proj, fovy, sizes);
|
|
|
|
glm_frustum(-sizes[0] * 0.5f,
|
|
sizes[0] * 0.5f,
|
|
-sizes[1] * 0.5f,
|
|
sizes[1] * 0.5f,
|
|
nearZ,
|
|
farZ,
|
|
proj2);
|
|
|
|
ASSERTIFY(test_assert_mat4_eq(proj, proj2))
|
|
|
|
TEST_SUCCESS
|
|
}
|