Name

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

FunctionVersion 1.10Version 1.20Version 1.30Version 1.40Version 1.50Version 3.30Version 4.00Version 4.10Version 4.20Version 4.30
refract (genType)YYYYYYYYYY
refract (genDType)------YYYY

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/.