基础知识很重要,一定要抓牢!

一、数据类型:

HLSL中的数据类型主要有:标准类型、向量、矩阵、和复杂数据类型几大类。

标准数据类型:

标准的数据类型有:bool ,int,half ,float,double.由于某些平台不支持整数值,所以整数可能会用float来模仿。

变量的声明方式和C++差不多一样,就不多说了,强调几个  有区别的点:

1.带const类型修饰符的变量,表示这个量是个常量,不可以被渲染代码修改(和C++也是很类似),这样的变量在声明的时候就需要进行初始化。

2.row_major与col_major修饰符

这类修饰符通常出现在定义矩阵时,房子矩阵类型的前面。用于指定当前声明的矩阵是用列主序还是行主序,列主序,矩阵中的每一列都   会单独存储在一个常量寄存器中,行主序相反。

3.static修饰符

带这个修饰符的变量不仅具有类似于C++中的静态变量的功能,还有防止该变量暴露给应用程序的作用,在调用该HLSL文件的程序中不可以访问和更改这个变量。

4.extern修饰符

含义与static相反,一个变量不可以同时声明static和extern两个修饰符类型,程序可以通过SetVertexShaderConstantB函数或者ID3DXConstantTable借口的函数来设置一个extern类型变量,如果没有用修饰符,默认的就是extern修饰。

5.uniform

用该修饰符修饰的变量只能使用API方法来改变,并且只能在两次绘制之间被改变。

6.shared

共享变量,表名该变量可以在不同的效果中被共享。

向量

     向量是一种特殊的数据结构,一个响亮可能包含1-4个元素,比如:bool bv//标量   bool1 bv  //一维向量  float1 fv//一维向量

float2 fv//二维向量

初始化可以和声明同时进行,如:half2 hv={0.2,0.3};

另一种声明方式是在一个尖括号中指明变量的类型和个数:vector<bool ,1>  bv=FALSE;

向量的存取:一个向量最多可以包括4个元素,每个都可以通过两种命名集合来寻址,一种是位置集合,它使用x、y、z另一种是通过颜色集合:r g b a

向量的混合存取:一次读取向量中的两个元素是混合存取,比如:float2 f_2D;  float4 pos;

f_2D=pos.xy;

向量的数学运算:乘法是最需注意的,有两种乘法,*表示矩阵之间相乘,用*乘出来的值仍然是一个矩阵,还有一个乘法函数:dot(),点乘,矩阵用点乘运算生成的是一个值,学过矩阵的话,这点应该不难明白。

矩阵

矩阵这个概念大家应该不陌生,用HLSL声明一个矩阵的方法:float4x4 表示4行4列的矩阵,注意是先行后列,double2x4表示2行4列的矩阵.

另一种声明的方式和声明向量的另一种方式很像,在一个尖括号中指定该矩阵的类型和矩阵的行数和列数:matrix<float,2,2>fM={0.0f,0.1f,2.1f,2.2f};

矩阵元素的存取:可以通过"."来取数值.具体的办法由两种,一种是 0基准 行列位置法,另一种是 1基准 行列位置法,两种基准法就和它的名字一样,起始下标的值不同罢了。_m00  _11表示的同一个元素即矩阵中的第一个元素。

矩阵的混合存取:和向量差不多。比如_m00_m11表示取出来了两个元素

矩阵的数组存取方式:就是用方括号括起来的下标进行存取,比如M是一个矩阵 M[0][0]=M_m00=M_11.注意:矩阵存取不可把用"."的方式和用数组的方式混合起来使用,用数组方式也不能实现混合存取矩阵.

矩阵的数学运算:需要注意的是用*进行存储的话,并不是实现的矩阵的额相乘运算,比如 M3=M1*M2;M3中的第一个元素的值是M1._11*M2_22;    如果要做矩阵的相乘运算的话,需要用mul()函数进行计算。

复杂的数据类型

复杂的数据类型包含:采样器(sampler)、结构体(structure)、渲染器(shader)等等。

1.      采样器

一个采样器包含有采样状态。采样状态指定被采样的纹理,并控制纹理采样期间的纹理过滤。采样一副纹理需要一副纹理、一个采样器(带有采样状态)、一个采样指令。

采样器可以在其初始化的同时初始化其纹理和采样状态:

texture  tex0;

sampler2D  s_2D=salmpler_state

{

Texture=<tex0>;

MinFilter=Linear;

MagFilter=Linear;

AddressU=Wrap;

AddressV=Wrap;

};

使用上面定义的纹理采样器 一副2D的纹理的代码如下:

float2 sample_2D(float2 tex:TEXCOORD0):COLOR

{

return tex2D(s_2D,tex);

}

上面的例子中,使用texture类型变量tex0表示一个纹理对象,使用sampler2D类型和关键字smpler_state声明了一个采样器对象s_2D,这个采样器在大括号内指定了要采样的纹理和相关的采样状态。

注意:如果采样其中没有指定纹理的采样状态,将使用默认的采样状态:纹理过滤选择线性过滤,纹理寻址模式将采用重叠寻址模式。

上面的例子中,采样函数用一个二元的浮点纹理坐标作为输入,并返回一个二元的颜色值,这个是用函数的返回值类型决定的,float2表示返回的数据中含有两个元素的色彩值,它表示了红色和绿色的元素。

HLSL支持4中纹理 类型:sampler1D,sampler2D,sampler3D,samplerCUBE。对应的纹理采样函数是:tex1D、tex2D、tex3D、texCUBE,我们看一个3D采样的例子:

texture tex0;

sampler3D s_3D=sample_state

{

texture=<tex0>;

};

float3 sample_3D(float3 tex:TEXCOORD0):COLOR

{return tex3D(s_3D,tex);}

2.      结构体

和C++中的结构体差别不大.

注意:在结构体里面的变量不可以带有范围的关键字修饰符 如:static等。

3.       顶点渲染对象

一个vertexshader类型变量代表了一个顶点渲染对象。

4.       像素渲染对象

一个pixelshader类型的变量就是一个像素渲染对象。

5.       纹理

texture类型的变量表示一个纹理对象。这个类型用于在效果中设置一个纹理到设备。

HLSL 的基础知识相关推荐

  1. 计算机图形渲染基础知识(个人笔记)

    一,什么是计算机图形学 对于我个人来说,计算机图形学是用计算机来表示图形,并且运用复杂的数学运算来生成图形的一门科学. 二,计算机图形学能干什么? 计算机图形学能制作粒子特效,动画,渲染,虚拟显示,增 ...

  2. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  3. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  4. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  5. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

  6. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  7. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  8. 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf

    <计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...

  9. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

最新文章

  1. 2022-2028年中国超高清视频产业投资分析及前景预测报告
  2. mysql 创建和删除库_Mysql创建和删除数据库
  3. Containers vs Serverless:怎么选择?
  4. C# 以日期时间作为文件名学习总结
  5. python pycharm 增量选择 ctrl+w
  6. freebsd mysql57_Freebsd7.2下Ports安装PHP5、MySql5.4、Apache22
  7. jdk 8 时区 转换_使用JDK 8将收藏转换为地图
  8. oracle between and monday,oracle——时间
  9. 界面设计与测试的规范
  10. vmware克隆linux虚拟机网卡无法上网的解决办法
  11. Lua新闻组的其人其事(一)
  12. 双系统如何在Centos7中添加GRUB2启动项
  13. APICS与AX的Master Planning(一)--Phantom bill of Material 虚项
  14. MATLAB基础篇——线性代数应用
  15. python中自定义标识符_python标识符
  16. STM8S003 AWU休眠唤醒 寄存器和库函数2种做法
  17. diybox路由器设置教程_一个简单的无线路由器入门设置教程,非常实用
  18. 探索Ristretto量化工程—问题记录
  19. redirectType=Found和redirectType=Permanent哪个是301哪个是302?
  20. 多智能体强化学习入门(七)——AC for CDec-POMDP 大规模规划学习算法

热门文章

  1. 涨姿势!摹客切图小技巧
  2. 网易微专业web前端开发课程视频教程分享
  3. MS弹出ERROR: Check license - This feature is not available. A valid license is required to use it.
  4. 基于android的个人理财软件 android stu_Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)...
  5. 财务分析之利润表、现金流量表
  6. 微信开放平台开源_开源的价值在于开放的开发过程
  7. 共享打印机的客机显示脱机怎么解决?
  8. 计算机系统文件命名规则,电脑新建文件夹等的默认命名如何修改?[多图]
  9. 联通光纤猫虚拟服务器设置,【2017年整理】联通光猫配置操作手册.doc
  10. web前端面试题之肉(css)