2011 Khronos Group
refract 3G
refract calculate the refraction direction for an incident vector

## Declaration

genType `refract` genType I genType N float eta genDType `refract` genDType I genDType N float eta

## Parameters

I

  Specifies the incident vector.

N

  Specifies the normal vector.

eta

  Specifies the ratio of indices of refraction.

## Description

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)
        else
            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

#VARTABLECOLS#
#FUNCTABLEHEADER#
refract (genType)#newin11#
refract (genDType)#newin40#

## See Also

dot, reflect

## Copyright

Copyright 2011 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. http://opencontent.org/openpub/.