高级着色语言简介

HLSL中提供的true和false关键字与C++相同。

int:32位有符号整数  half:16位浮点数  float:32位浮点数  double:64位浮点数 

float2 float3 float4 分别为 2D 3D 4D向量。

复合分量:(以下为复制操作)不一定要复制每个分量,可以只复制x、y分量。

float4 u = {1.0f, 2.0f, 3.0f, 4.0f};
float4 v = {0.0f, 0.0f, 5.0f, 6.0f};
v = u.wyyx; // v = {4.0f, 2.0f, 2.0f, 1.0f}

矩阵类型:

floatmxn matmxn;

如:float3x4:3 × 4 矩阵,每个元素都是float类型。还可以创建其他类型的矩阵,比如int2x2、half3x3和bool4x4。

在表示4D向量和矩阵时,除了使用float4 和float4x4外,还可以使用vector和matrix:

我们可以使用双下标数组语法来访问矩阵元素,也可以像访问结构体成员那样访问矩阵中的元素。元素名可以采用以下两种表示方式:

从 1开始编号:
M._11 = M._12 = M._13 = M._14 = 0.0f;
M._21 = M._22 = M._23 = M._24 = 0.0f;

从 0开始编号:
M._m00 = M._m01 = M._m02 = M._m03 = 0.0f;
M._m10 = M._m11 = M._m12 = M._m13 = 0.0f;

有时需要引用矩阵中的某个行向量,我们可以通过单下标数组语法来完成:

float3 ithRow = M[i]; // get the ith row vector in M

结构体的定义方法与C++完全相同,只是HLSL 中的结构体不能包含成员函数。HLSL 提供了非常灵活的类型转换机制。HLSL 中的类型转换语法与C 语言相同。

HLSL中的关键字:

asm     bool     compile     const     decl     do
double     else     extern     false     float     for
half     if     in     inline     inout     int
matrix     out     pass     pixelshader     return     sampler
shared     static     string     struct     technique     texture
true     typedef     uniform     vector     vertexshader     void
volatile     while

双目运算的变量提升:

对于双目运算,当左操作数和右操作数的维度不同时,维度较小的操作数将提升(转换)到与维度较大的操作数相同的维度。

对于双目运算,当左操作数和右操作数的类型不同时,精度较低的操作数将提升(转换)到与精度较高的操作数相同的类型。

HLSL中的函数具有如下特性:
1.函数使用一种与C++类似的语法。
2.参数均为按值传递。
3.不支持递归。
4.所有的函数都是内联函数。

HLSL提供了大量用于3D绘图的函数,下面列出了其中的一部分:(许多函数都为“所有使函数有意义的”内置类型提供了相应的重载版本。)

1.abs(x) — 返回 的绝对值。

2.ceil(x) — 返回大于等于 x 的最小整数。

3.clamp(x, a, b) — 将 x 截取到[ a,b ] 区间,并返回截取后的值。(即,当 x< a时,返回 a;当 x> b时,返回 b;当 x∈ [ a, b] 时,返回x 。)

4.clip(x) — 该函数只能在像素着色器中调用;当 x< 0 时,丢弃当前像素,不再进行后续处理。

5.cos(x) — 返回 的余弦值,其中x 的单位为弧度。

6.cross(u, v) — 返回 u和 v的叉积。

7.degrees(x) — 将 x从弧度转换为角度。

8.determinant(M) — 返回矩阵M 的行列式。

9.distance(u, v) — 返回点 u和v 之间的距离。

10.dot(u, v) — 返回u 和v 的点积。

11.floor(x) — 返回小于等于x 的最大整数。

12.frac(x) — 返回浮点数的小数部分(即,尾数)。例如,当 x= (235.52, 696.32) 时,frac( x) = (0.52, 0.32)。

13.length(v) — 返回向量 v的长度。

14.lerp(u, v, t) — 根据参数 t 计算u 和 v之间的线性插值,其中 t∈ [0, 1]。

15.log(x) — 返回 ln(x )。

16.log10(x) — 返回 log ( x)。

17.log2(x) — 返回 log ( x)。

18.max(x, y) — 当x ≥ y时,返回 x;反之,返回y 。

19.min(x, y) — 当 x≤y 时,返回 x;反之,返回y 。

20.mul(M, N) — 返回矩阵乘积MN 。注意,矩阵乘积MN必须满足矩阵乘法的定义。如果M 是一个向量,则M 将被视为一个行向量,以满足向量-矩阵乘法定义。如果N是一个向量,则 N将被视为一个列向量,以满足矩阵-向量乘法定义。

21.normalize(v) — 返回规范化的v 向量,即 v /‖ v ‖。

22.pow(b, n) — 返回 b^n。

23.radians(x) — 将x 从角度转换为弧度。

24.saturate(x) — 返回clamp( x, 0.0, 1.0)。

25.sin(x) — 返回x 的正弦值,其中x 的单位为弧度。

26.sincos(in x, out s, out c) — 返回x 的正弦值和余弦值,其中x 的单位为弧度。

27.sqrt(x) — 返回√ x。

28.reflect(v, n) — 根据入射向量 v 和表面法线 n 来计算反射向量。

29.refract(v, n, eta) — 根据入射向量v 、表面法线n 和两种材质之间的折射指数比eta 来计算反射向量。读者可以在网上或物理书中查找有关Snell折射定律的信息。

30.rsqrt(x) — 返回1/√ x。

31.tan(x) — 返回x 的正切值,其中 x的单位为弧度。

32.transpose(M) — 返回 M的转置矩阵。

33.Texture2D::Sample(S, texC) — 根据 SamplerState 对象S 和2D 纹理坐标texC,对一个2D纹理贴图进行采样。(SamplerState对象指定了纹理过滤方式和纹理寻址模式。)

34.Texture2D::SampleLevel(S, texC, LOD) — 根据 SamplerState对象S和2D纹理坐标texC,对一个2D 纹理贴图进行采样。(SamplerState 对象指定了纹理过滤方式和纹理寻址模式。)该函数与Texture2D::Sample的区别在于第3个参数,它指定了所要采样的多级渐近纹理层。例如,当LOD 指定为0 时,该函数会对最上面的多级渐近纹理层进行采样。使用该函数可以手工指定所要采样的多级渐近纹理层。

35.TextureCube::Sample(S, v) —根据SamplerState 对象S 和3D 查找向量v ,对一个立方体贴图进行采样。(SamplerState对象指定了纹理过滤方式和纹理寻址模式。)

时间: 2024-10-17 09:08:49

高级着色语言简介的相关文章

HLSL-高级着色语言简介【转】

HLSL-High Level Shader Language 优点 用来书写Vertex Shader和Pixel Shader程序的代码,语法类似于C/C++,在DirectX 8.x的时代,Shader程序都是用低级Shader汇编语言编写的,姑且称之为LLSL吧,HLSL与之相比具有以下优点: 更高的生产力,使用HLSL编程更快更容易,使我们有更多的时间关注与算法而不是编码 更好的可读性,使用HLSH编写的程序更易读,易调试及维护 编译器将生成更加高效的汇编代码 可以将同一份代码编译成任

有关OpenGL着色语言(一)

刚接触OpenGL着色语言...,不定期增加内容 1.OpenGL着色语言(GLSL)是什么? 用于OpenGL的面向过程的高级着色语言,是近年来图形编程领域中出现的最重要的新型开发技术,使用OpenGL着色语言可以让开发人员控制图形处理管线中最重要的阶段.既然是一种面向过程的编程语言,那么就有语法和语义,有了语法和语义就可以编写程序实例(着色器,一个程序实例就是一个着色器).既然是基于OpenGL的,那么就说明可以使用OpenGL的函数去创建和操作这种语言(着色语言). 2.使用着色语言的好处

Directx 中HLSL高级着色器语言 脑补一下吧

HLSL初级教程 作者:trcj 目录 前言 1.HLSL入门 1.1什么是着色器 1.2什么是HLSL 1.3怎么写HLSL着色器 1.4怎么用HLSL着色器 2.顶点着色器 2.1可编程数据流模型 2.2顶点声明 2.3用顶点着色器实现渐变动画 3.像素着色器 3.1多纹理化 3.2多纹理效果的像素着色器 3.3应用程序 4.HLSL Effect(效果框架) 4.1Effect代码结构 4.2用Effect实现多纹理化效果 结语 参考资料 前言 本教程针对HLSL(High Level S

Python 语言简介

Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等. 那Python是一种什么语言? 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得"翻译"成CPU可以执行的机器指令.而不同的编程语言,干同一

Go 语言简介(下)— 特性

希望你看到这篇文章的时候还是在公交车和地铁上正在上下班的时间,我希望我的这篇文章可以让你利用这段时间了解一门语言.当然,希望你不会因为看我的文章而错过站.呵呵. 如果你还不了解Go语言的语法,还请你移步先看一下上篇——<Go语言简介(上):语法> goroutine GoRoutine主要是使用go关键字来调用函数,你还可以使用匿名函数,如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package main import "fmt" func

计算机程序和C++语言简介

C++程序设计 第一章 计算机程序和C++语言简介 1.计算机是一台能够存储并处理数据的电子设备,包含硬件和软件两部分. 2.计算机硬件由: 1)中央处理单元(Central Processing Unit,CPU) 2)内存(主存) 3)外存储设备(磁盘.光盘.磁带) 4)输入输出设备(显示器.键盘.鼠标.打印机) 5)通信设备(调制解调器.网卡) 这些设备通过总线连接起来.数据传输通过总线进行.[总线又分为控制总线.数据总线.地址总线] 3.CPU 1)cpu通常由两部分组成:控制单元(co

ios-(1)C语言简介

1.先学C语言的原因 * oc基于C. * oc 跟 C的思想和语法很多地方不太一样,而且OC能和C混用. * C 是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的,比如 C++,C#.Objective-C.java等. 2.简史 * c语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础). * 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大.中.小.微型主机上,至今还是世界上最流行.使用最广泛

R语言简介,环境配置与简易使用

R语言简介,环境配置与简易使用 首先,R是一种语言,同时也是一个开发环境. R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 使用R,首先需要安装环境,http://cran.r-project.org有各个版本的安装包. 如图,是windows下64位的安装包: 安装完成后,打开界面 简易使用–命令行 R是一种区分大小写的解释型语言.在命令提示符(>)后,每次输入并执行一条命令 ,或者一次性执行写在脚本中文

1. Go 语言简介

Go语言简介 引用原文地址:http://m.biancheng.net/golang/ Go语言也称 Golang,兼具效率.性能.安全.健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点. 这套教程在讲解一些知识点时,将 Go 语言和其他多种语言进行对比,让掌握其它编程语言的读者能迅速理解 Go 语言的特性. Go语言从底层原生支持并发,无须第三方库.开发者的编程技巧和开发经验就可以轻松搞定. Go 语言是一门新