mirror of
https://github.com/recp/cglm.git
synced 2026-01-01 13:16:11 +00:00
fix refract
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user