refract.3Cg

Langue: en

Version: 361644 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

refract - computes a refraction vector.

SYNOPSIS

   fixed3 refract(fixed3 i, fixed3 n, fixed eta);
   half3  refract(half3  i, half3  n, half  eta);
   float3 refract(float3 i, float3 n, float eta);
 
 
 

PARAMETERS


i
Incidence vector.
n
Normal vector.
eta
Ratio of indices of refraction at the surface interface.

DESCRIPTION

Returns a refraction vector given an incidence vector, a normal vector for a surface, and a ratio of indices of refraction at the surface's interface.

The incidence vector i and normal vector n should be normalized.

REFERENCE IMPLEMENTATION

reflect for float3 vectors could be implemented this way:
   float3 refract( float3 i, float3 n, float eta )
   {
     float cosi = dot(-i, n);
     float cost2 = 1.0f - eta * eta * (1.0f - cosi*cosi);
     float3 t = eta*i + ((eta*cosi - sqrt(abs(cost2))) * n);
     return t * (float3)(cost2 > 0);
   }
 
 
 

PROFILE SUPPORT

refract is supported in all profiles.

Support in the fp20 is limited.

SEE ALSO

abs, cos, dot, reflect, sqrt