glsl函数之几何函数
length
Calculate the length of a vector
float length(float x)
float length(vec2 x)
float length(vec3 x)
float length(vec4 x)
distance
Calculate the distance between two points
float distance(float p0, float p1)
float distance(vec2 p0, vec2 p1)
float distance(vec3 p0, vec3 p1)
float distance(vec4 p0, vec4 p1)
dot
Calculate the dot product of two vectors
float dot(float x, float y)
float dot(vec2 x, vec2 y)
float dot(vec3 x, vec3 y)
float dot(vec4 x, vec4 y)
Description
dot() returns the dot product of two vectors, x and y. i.e., x[0]⋅y[0]+x[1]⋅y[1]+… If x and y are the same the square root of the dot product is equivalent to the length of the vector. The input parameters can be floating scalars or float vectors. In case of floating scalars the dot function is trivial and returns the product of x and y.
cross
Calculate the cross product of two vectors
vec3 cross(vec3 x, vec3 y)
Description
cross() returns the cross product of two vectors, x and y. The input parameters can only be 3-component floating vectors. The cross product is equivalent to the product of the length of the vectors times the sinus of the(smaller) angle between x and y.
normalize
Calculate the unit vector in the same direction as the input vector
float normalize(float x)
vec2 normalize(vec2 x)
vec3 normalize(vec3 x)
vec4 normalize(vec4 x)
facefoward
reflect
Calculate the reflection direction for an incident vector
float reflect(float I, float N)
vec2 reflect(vec2 I, vec2 N)
vec3 reflect(vec3 I, vec3 N)
vec4 reflect(vec4 I, vec4 N)
Description
For a given incident vector I and surface normal N reflect returns the reflection direction calculated as I - 2.0 * dot(N, I) * N.
N should be normalized in order to achieve the desired result.
refract
Calculate the refraction direction for an incident vector
float refract(float I, float N, float eta)
vec2 refract(vec2 I, vec2 N, float eta)
vec3 refract(vec3 I, vec3 N, float eta)
vec4 refract(vec4 I, vec4 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;