着色器和效果——1.7 内建函数

原创 2004年04月20日 23:17:00

1.7 内建函数<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

阅读此文表明您已同意文末的声明

HLSL有一个丰富的内建函数的集合,它们对3D图形来说非常有用。下表是一个删减了的列表。在下两章中,我们会使用这些函数中的一些进行实践。而现在,熟悉它们就够了。

注意:要得到更多的参考,可以参看DirectX文档中内建HLSL函数的完整列表,在Content页下,然后到DirectX Graphics/Reference/Shader Reference/High Level Shader Language/Intrinsic Functions

译者注:以下表格中,//<variable>//表示变量variable的模(例如向量的绝对值)。

函数

描述

abs(x)

返回 |x|.

ceil(x)

返回 x 的最小整数.

clamp(x, a, b)

截取x [a, b] 范围内并返回截取后的结果.

cos(x)

返回x的余弦,其中x单位为弧度.

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)

uv之间线性插值,根据参数 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)

返回MT的转置.

大多数函数已经重载以使其可以对所有内建类型有意义。例如,abs对所有数值类型有意义,所以它为所有这些数值类型进行了重载。又例如,叉积的叉乘仅对3D向量有意义,所以它对所有类型的3D向量(比如:intfloatdouble3D向量)进行了重载。另一方面,线性插值——lerp,对于数值、2D3D4D向量有意义,因此重载了这些类型。

注意:如果你传递进去一个非数值类型到一个(要求)数值类型的函数,也就是一个仅能对数值类型进行操作的函数(比如:cos(x)),那么这个函数会对传进去的每个分量进行操作。例如,你写:

floats v = float3 (0.0f, 0.0f, 0.0f);

v = cos(v);

那么函数将会对每个分量进行操作:v=(cos(x),cos(y),cos(z))

下例展示了这些固有的函数可能被调用的方式:

float x = sin(1.0f);       // sine of 1.0f radian.

float y = sqrt(4.0f);      // square root of 4.

 

vector u = {1.0f, 2.0f, -3.0f, 0.0f};

vector v = {3.0f, -1.0f, 0.0f, 2.0f};

float  s = dot(u, v);      // compute dot product of u and v.

 

float3 i = {1.0f, 0.0f, 0.0f};

float3 j = {0.0f, 1.0f, 0.0f};

float3 k = cross(i, j);    // compute cross product of i and j.

 

matrix<float, 2, 2> M = {1.0f, 2.0f, 3.0f, 4.0f};

matrix<float, 2, 2> T = transpose(M); // compute transpose

 

[声明]:本文译自Frank Luna的《Introduction to 3D Game Programming with DirectX 9.0》,限于译者水平,文中难免错漏之处,欢迎各位网友批评指正;本文仅用于学习交流与参考用途,不得用于任何形式的商业用途;如需转载需事先征得作者本人和译者的同意,保持文章的完整性,并注明作者、译者和出处,对于违反以上条款造成的后果,译者对此不负任何责任。我的邮箱地址是Raymond_King123@hotmail.com,欢迎热爱3D图形和游戏,并有一定图形编程经验的朋友来信交流。

着色器和效果——0 概览

着色器和效果阅读此文表明您已同意文末的声明章节列表第一章:介绍高级着色语言第二章:介绍顶点着色器第三章:介绍像素着色器第四章:效果框架概览到现在为止,我们已经从修改设备状态的配置(如:矩阵变换,光照,...
  • RaymondKing
  • RaymondKing
  • 2004年04月07日 14:34
  • 2461

11 WebGL 着色器编程语言GLSL ES的内置函数

接下来的函数将根据函数的功能,有区别地使用参数矢量的各个分量,而不再是简单数值运算函数的逐分量版本。...
  • qq_30100043
  • qq_30100043
  • 2017年05月31日 14:13
  • 554

扭曲效果顶点着色器的实现(Shader特效5)

扭曲效果的实现 说在开始: 最近使用顶点着色器开发了一个扭曲的例子,在这里进行总结一些算法和开发过程。我都将我的代码放到了我的github上https://github.com/ModestB...
  • ModestBean
  • ModestBean
  • 2018年01月26日 13:30
  • 53

使用着色器模拟雾效果

上一篇关于天空盒的blog谈到了雾效果,那么这次来讨论一下用着色器实现雾效果的具体实现方法. 雾在大自然中是一种常见的天气现象,比如清晨时分在山上就能看到这种效果.我们可以使用OpenGL轻松地...
  • zxx43
  • zxx43
  • 2014年11月18日 15:26
  • 904

Cg Shading Language 的内置函数表

Cg Shading Language内置函数表, 官网地址:点击打开链接
  • kongbu0622
  • kongbu0622
  • 2016年05月11日 18:15
  • 522

着色器和效果——1.0 介绍高级着色语言

第一章       介绍高级着色语言阅读此文表明您已同意文末的声明概览在本章中,我们将描述高级顶点着色语言(High-Level Shading Language ,简称HLSL),我们用它编写以下三...
  • RaymondKing
  • RaymondKing
  • 2004年04月07日 14:34
  • 3833

HLSL像素着色器

像素着色器替代了固定渲染管线的 多纹理化 阶段 实现步骤: 1.编写和编译像素着色器文件 2.创建像素着色器 3.设置像素着色器 //文本文件代码 //-----------------------...
  • lunweiwangxi3
  • lunweiwangxi3
  • 2015年04月03日 15:05
  • 794

python的内建函数与工厂函数

1、数字类型函数 转换工厂函数 int()、long()(python3中已被取消)、float()、complex()、bool():用来将其他数值类型转换为相应的数值类型。 功能函数 ab...
  • ag128333
  • ag128333
  • 2011年12月04日 11:27
  • 1976

FreeMarker内建函数

字符串使用的内建函数: html : 字符串中所有的特殊 HTML 字符都需要用实体引用来代替(比如 < 代替 < ) cap_first :字符串的第一个字母变为大写形式 lower_c...
  • u012547894
  • u012547894
  • 2016年06月15日 15:10
  • 642

基于几何着色器的模型“爆炸”效果(Geometry Shader)【OpenGL】【GLSL】

先贴个效果图先挖个坑,以后再详细填
  • panda1234lee
  • panda1234lee
  • 2017年06月18日 19:30
  • 870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:着色器和效果——1.7 内建函数
举报原因:
原因补充:

(最多只允许输入30个字)