From 6ad0aca7e0609c91cf91868b9081a3cdd2652016 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 22 Mar 2024 21:59:10 +0300 Subject: [PATCH] fix refract --- include/cglm/vec2.h | 6 +++--- include/cglm/vec3.h | 6 +++--- include/cglm/vec4.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/cglm/vec2.h b/include/cglm/vec2.h index 4eaca3d..58878f5 100644 --- a/include/cglm/vec2.h +++ b/include/cglm/vec2.h @@ -746,15 +746,15 @@ glm_vec2_refract(vec2 I, vec2 N, float eta, vec2 dest) { ndi = glm_vec2_dot(N, I); eni = eta * ndi; - k = eta * eta + eni * eni; + k = 1.0f + eta * eta - eni * eni; - if (k > 1.0f) { + if (k < 0.0f) { glm_vec2_zero(dest); return; } glm_vec2_scale(I, eta, dest); - glm_vec2_mulsubs(N, eni + sqrtf(1.0f - k), dest); + glm_vec2_mulsubs(N, eni + sqrtf(k), dest); } #endif /* cglm_vec2_h */ diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index 49a5b29..1fdd483 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -1260,15 +1260,15 @@ glm_vec3_refract(vec3 I, vec3 N, float eta, vec3 dest) { ndi = glm_vec3_dot(N, I); eni = eta * ndi; - k = eta * eta + eni * eni; + k = 1.0f + eta * eta - eni * eni; - if (k > 1.0f) { + if (k < 0.0f) { glm_vec3_zero(dest); return; } glm_vec3_scale(I, eta, dest); - glm_vec3_mulsubs(N, eni + sqrtf(1.0f - k), dest); + glm_vec3_mulsubs(N, eni + sqrtf(k), dest); } #endif /* cglm_vec3_h */ diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index 212a872..d8c2ea0 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -1347,15 +1347,15 @@ glm_vec4_refract(vec4 I, vec4 N, float eta, vec4 dest) { ndi = glm_vec4_dot(N, I); eni = eta * ndi; - k = eta * eta + eni * eni - 1.0f; + k = 1.0f + eta * eta - eni * eni; - if (k > 0.0f) { + if (k < 0.0f) { glm_vec4_zero(dest); return; } glm_vec4_scale(I, eta, dest); - glm_vec4_mulsubs(N, eni + sqrtf(1.0f - k), dest); + glm_vec4_mulsubs(N, eni + sqrtf(k), dest); } #endif /* cglm_vec4_h */