HLSL初级教程

HLSL初级教程

ID:37826513

大小:512.48 KB

页数:38页

时间:2019-05-31

HLSL初级教程_第1页
HLSL初级教程_第2页
HLSL初级教程_第3页
HLSL初级教程_第4页
HLSL初级教程_第5页
资源描述:

《HLSL初级教程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、行了介绍,教程中去掉了对HLSL语法等一些细节内容的讨论,力求帮助读者尽可能快地理解HLSL编程的概念,掌握HLSL编程的方法。教程中部分阐述直接引用了其他文档,这是因为这些文档表述之精要,已经达到了不能更改的地步,这里表示感谢。本文档版权为作者所有,非商业用途可免费使用,转载请注明出处。作者也是HLSL的初学者,教程中难免纰漏之处,望大家指正。有任何意见请发信到taoboxiang2006@yahoo.com.cn或者留言到http://blog.csdn.net/trcj1/进行讨论。1.HLSL入门1.1什么是着色器DirectX使用管道技术(

3、pipeline)进行图形渲染,其构架如下:图1.1Direct3DGraphicsPipeline之前我们使用管道的步骤如下:1.设定顶点、图元、纹理等数据信息;2.设定管道状态信息;µ渲染状态通过SetRenderState方法设定渲染状态;另外,使用以下方法设置变换、材质和光照:SetTransformSetMaterialSetLightLightEnableµ取样器状态通过SetSamplerState方法设定取样器状态;µ纹理层状态通过SetTextureStageState设定纹理层状态;3.渲染;这部分交由D3D管道按照之前的设定自行

4、完成,这部分操作是D3D预先固定的,所以这种管道技术被称为固定功能管道(fixedfunctionpipeline);固定功能管道给我们编程提供了一定的灵活性,但是仍有很多效果难以通过这种方式实现,比如:1.在渲染过程中,我们要求y坐标值大于10的顶点要被绘制到坐标值(0,0,0)的地方,在之前的固定功能管道中,顶点被绘制的位置是在第1步即被设定好的,不可能在渲染过程中进行改变,所以是不可行的;2.谋顶点在纹理贴图1上映射为点A,在纹理贴图2上映射为点B,我们要求该顶点颜色由A、B共同决定,即:定点颜色=A点色彩值*0.7+B点色彩值*0.3这在固定

5、管道编程中也是不可行的。以上两个问题都可以由可编程管道(pragrammablepipeline)来解决。可编程管线允许用户自定义一段可以在GPU上执行的程序,代替固定管道技术中的VertexProcessing和PixelProcessing阶段(参照图1.1),从而在使我们在编程中达到更大的灵活性。其中替换VertexProcessing的部分叫做VertexShader(顶点着色器),替换PixelProccessing的部分叫做PixelShader(像素着色器),这就是我们所说的着色器Shader。1.2什么是HLSLDirect8.x中,

6、着色器是通过低级着色汇编语言来编写的,这样的程序更像是汇编式的指令集合,由于其效率低、可读性差、版本限制等缺点,迫切要求出现一门更高级的着色语言。到了Direct3D9,HLSL(HighLevelShadingLanguage,高级渲染语言)应运而生了。HLSL的语法非常类似于C和C++,学习起来是很方便的。1.3怎么写HLSL着色器我们可以直接把HLSL着色器代码作为一长串字符串编写进我们的应用程序源文件中,但是,更加方便和模块化的方法是把着色器的代码从应用程序代码中分离出来。因此,我们将着色器代码单独保存为文本格式,然后在应用程序中使用特定函数

7、将其加载进来。下面是一个完整的HLSL着色器程序代码,我们把它保存在BasicHLSL.txt中。该着色器完成顶点的世界变换、观察变换和投影变幻,并将顶点颜色设定为指定的颜色。////BasicHLSL.txt//////Globalvariable//matrixWVPMatrix;vectorcolor;////Structures//structVS_INPUT{vectorposition:POSITION;};structVS_OUTPUT{vectorposition:POSITION;vectorcolor:COLOR;};////Fu

8、nctions//VS_OUTPUTSetColor(VS_INPUTinput){VS_OUTPUTout

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。