25 lines
665 B
GLSL
25 lines
665 B
GLSL
// Math utility functions
|
|
|
|
#ifndef MATH_GLSL
|
|
#define MATH_GLSL
|
|
|
|
bool near_zero(vec3 v) {
|
|
return (abs(v.x) < EPSILON) && (abs(v.y) < EPSILON) && (abs(v.z) < EPSILON);
|
|
}
|
|
|
|
vec3 reflect_vector(vec3 v, vec3 n) {
|
|
return v - 2.0 * dot(v, n) * n;
|
|
}
|
|
|
|
vec3 refract_vector(vec3 uv, vec3 n, float etai_over_etat) {
|
|
float cos_theta = min(dot(-uv, n), 1.0);
|
|
vec3 r_out_perp = etai_over_etat * (uv + cos_theta * n);
|
|
vec3 r_out_parallel = -sqrt(abs(1.0 - dot(r_out_perp, r_out_perp))) * n;
|
|
return r_out_perp + r_out_parallel;
|
|
}
|
|
|
|
uint as_uint(float f) { return floatBitsToUint(f); }
|
|
float as_float(uint u) { return uintBitsToFloat(u); }
|
|
|
|
#endif // MATH_GLSL
|