refract - chung-leong/qb GitHub Wiki
refract - Calculate refraction vector
float[] refract(float[] $I, float[] $N, float[] $eta)
For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. The result is computed by
k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I))
if (k < 0.0)
return genType(0.0)
else
return eta * I - (eta * dot(N, I) + sqrt(k)) * N
The input parameters for the incident vector I and the surface normal N must already be normalized to get the desired results.
Version
1.0 and above.
(Language taken from OpenGL® ES 3.0 specification)