欢迎来到天天文库
浏览记录
ID:37913335
大小:151.50 KB
页数:6页
时间:2019-06-02
《HLSL学习笔记(一):基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、HLSL学习笔记(一):基础前言五一在家无事,于是学习了一下HLSL,基于XAN4.0的。学习完了也就总结一下,纯粹是新手学习的经验之谈,纰漏之处还望见谅,不喜勿喷。HLSL是一种使用GPU渲染出图像的技术,不仅可以改变最终呈现的颜色,还可以物体的大小、胖瘦和位置等。例如物体的碎裂效果就可以使用HLSL来渲染得到。数据类型数据类型有值类型、向量、矩阵、采样器、和结构体。1.值类型 bool布尔变量 half16为整形 int32位整形 float单精度浮点数 double双精度浮点数 声明方式:floatf; 赋值方式:f=1;2.向量
2、声明方式:float4f; 赋值方式:f={1,2,3,4}; 取值方式:float3ff=f.rgb; 说明:向可以通过xyzw或者rgba访问向量中的指定字段,x或者r就是代表0号字段。不仅可以单独操作一个字段,还可以对多个字段同时操作,例如3*f.xyz,就是将f中的xyz都乘以个3。3.矩阵 声明方式:float2x4f;先行后列。 赋值方式:f={1,1,2,2,3,3,4,4}; 取值方式:floatff=f[0][0]; 说明:如果要对矩阵做乘法运算,请使用mul函数,另外,mul(ff,f)与mul(f,ff)的结果是不
3、一样的。4.采样器 声明方式: textureTexture;//纹理变量 samplerTextureSampler=sampler_state//纹理采样器 { Texture=;//纹理采样器使用的纹理对象 MinFilter=Linear;//缩小图形使用线性滤波 MagFilter=Linear;//放大图形使用线性滤波 MipFilter=Linear;//Mipmap使用线性滤波 AddressU=Wrap;//U方向上的纹理寻址模式采用Wrap方式 AddressV
4、=Wrap;//V方向上的纹理寻址模式采用Wrap方式 }; 赋值方式:在C#中对Texture赋值,effect.Parameters["Texture"].SetValue(Game.Content.Load("*")); 取值方式:tex2D(TextureSampler,TEXCOORD0); 说明:MinFilter、MagFilter、MipFilter、AddressU、AddressV是可选项,如果不写将会使用默认值,也就是上面赋予的值。5.结构体 声明方式: structVertexShader
5、Input { float4Position:POSITION; float2TextureCoordinates:TEXCOORD0; float3Normal:NORMAL; }; VertexShaderInputinput; 此处与C#语法有些区别,直接这么写,不需要再写个new什么的。 赋值方式:与C#语法一致。 取值方式:与C#语法一致。 说明:其它的地方都好理解,关键是每个字段后面还有个“小尾巴”,这是什么玩意啊?这个我也不太清楚,自己想当然感觉吧,应该就是显存里面有一些特殊的空间
6、,它们有着自己名字,比如TEXCOORD0什么的,就像C#中的Dictionary。 所以TextureCoordinates这行的意思是创建一个float2类型的向量,它的名字是TextureCoordinates,值存储在TEXCOORD0这个内存空间。 Position的意思对所有POSITION(POSITION0-POSITION9,貌似是这样。)内存空间的引用。 这也就说明了入口函数的参数为什么可以千变万化,其实只是换了个名字,数据该在哪永远都在哪。 语法 语法什么的,与C#相差不大,不过还是有点区别的,至于区别的地方,我所知道的上
7、面都写出来了。函数列表本表来自网络,我对说明做了些修改。NameSyntaxDescriptionabsabs(x)返回x的绝对值。对x的每个元素都会独立计算一次。Absolutevalue(percomponent).acosacos(x)返回x的反余弦值。对x的每个元素都会独立计算一次。Returnsthearccosineofeachcomponentofx.allall(x)检测x的所有元数的值是否为0.Testifallcomponentsofxarenonzero.anyany(x)检测x是否有某个元数的值为0.Testifanycompon
8、entofxisnonzero.asfloatasfloat(x)将x转换为fl
此文档下载收益归作者所有