mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
tests: test for ray, reflect, refract and faceforward
This commit is contained in:
@@ -32,3 +32,43 @@ TEST_IMPL(GLM_PREFIX, ray_triangle) {
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ray_sphere) {
|
||||
vec4 sphere = {5.0f, 0.0f, 0.0f, 1.0f}; /* Sphere: center at (5, 0, 0) with radius 1 */
|
||||
float t1, t2;
|
||||
bool hit;
|
||||
|
||||
/* Case 1: Ray misses the sphere */
|
||||
hit = GLM(ray_sphere)((vec3){10.0f, 3.0f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
|
||||
ASSERT(!hit); /* Expect no intersection */
|
||||
|
||||
/* Case 2: Ray starts inside the sphere */
|
||||
hit = GLM(ray_sphere)((vec3){5.0f, 0.5f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
|
||||
ASSERT(hit); /* Expect an intersection */
|
||||
ASSERT(t1 < 0 && t2 > 0); /* Ray exits at t2 */
|
||||
|
||||
/* Case 3: Ray intersects the sphere from outside */
|
||||
hit = GLM(ray_sphere)((vec3){0.0f, 0.0f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
|
||||
ASSERT(hit); /* Expect an intersection */
|
||||
ASSERT(t1 > 0 && t2 > 0); /* Intersections at t1 and t2 */
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, ray_at) {
|
||||
vec3 origin = {0.0f, 0.0f, 0.0f};
|
||||
vec3 direction = {1.0f, 1.0f, 1.0f}; /* Diagonal direction */
|
||||
float distance = sqrtf(3.0f); /* Distance along the ray; sqrt(3) for unit length due to direction normalization */
|
||||
vec3 result;
|
||||
|
||||
/* Normalize the direction to ensure accurate distance measurement */
|
||||
glm_vec3_normalize(direction);
|
||||
|
||||
GLM(ray_at)(origin, direction, distance, result);
|
||||
ASSERT(fabsf(result[0] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the x-axis */
|
||||
ASSERT(fabsf(result[1] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the y-axis */
|
||||
ASSERT(fabsf(result[2] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the z-axis */
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user