内建函数
HLSL有一个丰富的内建函数的集合,它们对3D图形来说非常有用。下表是一个删减了的列表,注意:要得到更多的参考,可以参看DirectX文档中内建HLSL函数的完整列表。
以下表格中,//<variable>//表示变量variable的模(例如向量的绝对值)。
函数
描述
abs(x)
返回 |x|
ceil(x)
返回 ≥ x 的最小整数
clamp(x, a, b)
Clamps x to the range [a, b] and returns the result.
cross(u, v)
返回 u × v(叉积)
degrees(x)
转换 x 从弧度到角度
determinant(M)
返回矩阵M的行列式det(M)
distance(u, v)
返回u点和v点之间的距离||v - u||
dot(u, v)
返回 u · v(点积)
floor(x)
返回 ≤ x 的最大整数
length(v)
返回 ||v||
lerp(u, v, t)
在u和v之间线性插值,参数 t 在[0, 1 ]之间变化。
log(x)
返回 ln(x)
log10(x)
返回 log10(x)
log2(x)
返回 log2(x)
max(x, y)
如果x ≥ y,则返回 x;否则返回 y
min(x, y)
如果 x ≤ y,返回x;否则返回 y
mul(M, N)
返回矩阵乘积 MN. 注意:矩阵乘积必须是已定义的. 如果M是一个向量,它被作为一个行向量,则向量-矩阵(vector-matrix)乘法是已定义的。类似的,如果N 是一个向量,他被作为一个列向量,则矩阵-向量(matrix-vector)乘法是已定义的。
normalize(v)
返回 v/∥v∥
pow(b, n)
返回 bn
radians(x)
转换 x 从 角度 到 弧度
reflect(v, n)
给定向量v和表面法线n,计算其反射向量
refract(v,n, eta)
给定向量v、表面法线n和两种材质的两个索引的比率eta,计算其折射向量. 翻看一下物理书中Snell的规则或者在互联网上搜索一下关于refraction(反射)的信息
rsqrt(x)
返回x的平方根的倒数
saturate(x)
返回clamp(x, 0.0, 1.0)
sin(x)
返回x的正弦,其中x单位为弧度
sincos(in x, out s, out c)
返回x的正弦和余弦,其中x单位为弧度
sqrt(x)
返回x的平方根
tan(x)
返回x的正切,其中 x 单位为弧度
transpose(M)
返回M的转置
abs (Direct3D 9 HLSL)
Computes the absolute value of each component.
Syntax
ret abs(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float, int any
ret out same as input x same as input x same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_4
ceil (Direct3D 9 HLSL)
Returns the smallest integer which is greater than or equal to x.
Syntax
ret ceil(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
clamp (Direct3D 9 HLSL)
Clamps x to the range [min, max].
Syntax
ret clamp(x, min, max)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float, int any
min in same as input x float, int same dimension(s) as input x
max in same as input x float, int same dimension(s) as input x
ret out same as input x float, int same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_4
cross (Direct3D 9 HLSL)
Returns the cross product of two 3D vectors.
Syntax
ret cross(x, y)
Where:
Name In/Out Template Type Component Type Size
x in vector float 3
y in vector float 3
ret out vector float 3
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_4
degrees (Direct3D 9 HLSL)
Converts x from radians to degrees.
Syntax
ret degrees(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
determinant (Direct3D 9 HLSL)
Returns the determinant of the square matrix m.
Syntax
ret determinant(m)
Where:
Name In/Out Template Type Component Type Size
m in matrix float any (number of rows = number of columns)
ret out scalar float 1
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_4
distance (Direct3D 9 HLSL)
Returns the distance between two points x and y.
Syntax
ret distance(x, y)
Where:
Name In/Out Template Type Component Type Size
x in vector float any
y in vector float same dimension(s) as input x
ret out scalar float 1
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
dot (Direct3D 9 HLSL)
Returns the • product of two vectors, x and y.
Syntax
ret dot(x, y)
Where:
Name In/Out Template Type Component Type Size
x in vector float, int any
y in vector float, int same dimensions(s) as input x
ret out scalar float, int 1
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_1
floor (Direct3D 9 HLSL)
Returns the greatest integer which is less than or equal to x.
Syntax
ret floor(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
length (Direct3D 9 HLSL)
Returns the length of the vector x.
Syntax
ret length(x)
Where:
Name In/Out Template Type Component Type Size
x in vector float any
ret out scalar float 1
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
lerp (Direct3D 9 HLSL)
Returns x + s(y - x). This linearly interpolates between x and y, such that the return value is x when s is 0, and y when s is 1.
Syntax
ret lerp(x, y, s)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
y in same as input x float same dimension(s) as input x
s in same as input x float same dimension(s) as input x
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_1_4
log (Direct3D 9 HLSL)
Returns the base-e logarithm of x. If x is negative, the function returns indefinite. If x is 0, the function returns +INF.
Syntax
ret log(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
log10 (Direct3D 9 HLSL)
Returns the base-10 logarithm of x. If x is negative, the function returns indefinite. If x is 0, the function returns +INF.
Syntax
ret log10(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0
log2 (Direct3D 9 HLSL)
Returns the base-2 logarithm of x. If x is negative, the function returns indefinite. If x is 0, the function returns +INF.
Syntax
ret log2(x)
Where:
Name In/Out Template Type Component Type Size
x in scalar, vector, or matrix float any
ret out same as input x float same dimension(s) as input x
Minimum Shader Version
This intrinsic function is supported in the following (or above) shader versions:
Vertex Shader Pixel Shader
vs_1_1 ps_2_0