高級著色語言HLSL入門(6)
16.7內建函數
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 |