From OpenGL Reference
Jump to navigation Jump to search

Calculate the refraction direction for an incident vector.


genType refract( genType I, genType N, float eta );
genDType refract( genDType I, genDType N, float eta );


I - Specifies the incident vector.
N - Specifies the normal vector.
eta - Specifies the ratio of indices of refraction.


For a given incident vector I , surface normal N and ratio of indices of refraction, eta , refract returns the refraction vector, R .

 R is calculated as:

   k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));
   if (k < 0.0)
       R = genType(0.0);       // or genDType(0.0)
       R = eta * I - (eta * dot(N, I) + sqrt(k)) * N;

The input parameters I and N should be normalized in order to achieve the desired result.

Version Support[edit]

refract (genType) 1.1+
refract (genDType) 4.0+

See Also[edit]

 dot , reflect 


Copyright© 2011-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999.