高级着色语言HLSL入门(6)

时间:2022-05-23 04:47:00

高级着色语言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