HLSL学习笔记(一):基础.doc_第1页
HLSL学习笔记(一):基础.doc_第2页
HLSL学习笔记(一):基础.doc_第3页
HLSL学习笔记(一):基础.doc_第4页
HLSL学习笔记(一):基础.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HLSL学习笔记(一):基础前言五一在家无事,于是学习了一下HLSL,基于XAN4.0的。学习完了也就总结一下,纯粹是新手学习的经验之谈,纰漏之处还望见谅,不喜勿喷。HLSL是一种使用GPU渲染出图像的技术,不仅可以改变最终呈现的颜色,还可以物体的大小、胖瘦和位置等。例如物体的碎裂效果就可以使用HLSL来渲染得到。数据类型数据类型有值类型、向量、矩阵、采样器、和结构体。1.值类型bool 布尔变量half 16为整形int 32位整形float 单精度浮点数double 双精度浮点数声明方式:float f;赋值方式:f = 1;2.向量声明方式:float4 f;赋值方式:f = 1,2,3,4;取值方式:float3 ff = f.rgb;说明:向可以通过xyzw或者rgba访问向量中的指定字段,x或者r就是代表0号字段。不仅可以单独操作一个字段,还可以对多个字段同时操作,例如3*f.xyz,就是将f中的xyz都乘以个3。3.矩阵声明方式:float2x4 f; 先行后列。赋值方式:f = 1,1,2,2,3,3,4,4;取值方式:float ff = f00;说明:如果要对矩阵做乘法运算,请使用mul函数,另外,mul(ff,f)与mul(f,ff)的结果是不一样的。4.采样器声明方式:texture Texture; /纹理变量sampler TextureSampler = sampler_state /纹理采样器 Texture = ; /纹理采样器使用的纹理对象 MinFilter = Linear; /缩小图形使用线性滤波 MagFilter = Linear; /放大图形使用线性滤波 MipFilter = Linear; /Mipmap使用线性滤波 AddressU = Wrap; /U方向上的纹理寻址模式采用Wrap方式 AddressV = Wrap; /V方向上的纹理寻址模式采用Wrap方式;赋值方式:在C#中对Texture赋值,effect.ParametersTexture.SetValue(Game.Content.Load(*);取值方式:tex2D(TextureSampler, TEXCOORD0);说明:MinFilter、MagFilter、MipFilter、AddressU、AddressV是可选项,如果不写将会使用默认值,也就是上面赋予的值。5.结构体声明方式:struct VertexShaderInputfloat4 Position : POSITION;float2 TextureCoordinates : TEXCOORD0;float3 Normal: NORMAL;VertexShaderInput input;此处与C#语法有些区别,直接这么写,不需要再写个new什么的。赋值方式:与C#语法一致。取值方式:与C#语法一致。说明:其它的地方都好理解,关键是每个字段后面还有个“小尾巴”,这是什么玩意啊?这个我也不太清楚,自己想当然感觉吧,应该就是显存里面有一些特殊的空间,它们有着自己名字,比如TEXCOORD0什么的,就像C#中的Dictionary。所以TextureCoordinates这行的意思是 创建一个float2类型的向量,它的名字是TextureCoordinates,值存储在TEXCOORD0这个内存空间。Position的意思对所有POSITION(POSITION0-POSITION9,貌似是这样。)内存空间的引用。这也就说明了入口函数的参数为什么可以千变万化,其实只是换了个名字,数据该在哪永远都在哪。语法语法什么的,与C#相差不大,不过还是有点区别的,至于区别的地方,我所知道的上面都写出来了。函数列表本表来自网络,我对说明做了些修改。NameSyntaxDescriptionabsabs(x)返回x的绝对值。对x的每个元素都会独立计算一次。Absolute value (per component).acosacos(x)返回x的反余弦值。对x的每个元素都会独立计算一次。Returns the arccosine of each component of x.allall(x)检测x的所有元数的值是否为0.Test if all components of x are nonzero.anyany(x)检测x是否有某个元数的值为0.Test if any component of x is nonzero.asfloatasfloat(x)将x转换为float类型。Convert the input type to a float. asinasin(x)返回x的反正弦值。对x的每个元素都会独立计算一次。asintasint(x)将x转换为int类型。Convert the input type to an integer.asuintasuint(x)将x转换为uint类型。atanatan(x)返回x的反正切值。atan2atan2(y, x)返回y、x的反正切值。ceilceil(x)返回大于或等于x的最小整数。clampclamp(x, min, max)将x截取在min, max范围内。clipclip(x)如果x中存在值小于0的参数,则丢弃当前像素。coscos(x)返回x的余弦值。coshcosh(x)返回x的双曲余弦值。crosscross(x, y)返回x、y的叉积。 D3DCOLORtoUBYTE4D3DCOLORtoUBYTE4(x)混合和缩放4D向量x用于补偿一些对UBYTE4支持的硬件。Swizzles and scales components of the 4D vector x to compensate for the lack of UBYTE4 support in some hardware. ddxddx(x)返回关于屏幕坐标x轴的偏导数。 ddyddy(x)返回关于屏幕坐标y轴的偏导数。degreesdegrees(x)将x(弧度)转换到角度。determinantdeterminant(m)返回的正方形矩阵m的行列式。distancedistance(x, y)返回x、y之间的距离。dotdot(x, y)返回x、y的点积。expexp(x)返回以e为底数,x为指数的指数函数值。exp2exp2(x)返回以2为底数,x为指数的指数函数值。对x的每个字段都会计算一次。faceforwardfaceforward(n, i, ng)检测多边形是否位于正面。-n * sign(i, ng)。floorfloor(x)返回小于等于x的最大整数。fmodfmod(x, y)返回x/y的浮点余数。fracfrac(x)返回x的小数部分。frexpfrexp(x, exp)返回x的尾数和指数。fwidthfwidth(x)返回 abs(ddx(x) + abs(ddy(x),GetRenderTargetSampleCountGetRenderTargetSampleCount()返回渲染目标采样器的个数。Returns the number of render-target samples. GetRenderTargetSamplePositionGetRenderTargetSamplePosition(x)返回关于给定采样器的一个采样点(x,y)。Returns a sample position (x,y) for a given sample index. isfiniteisfinite(x)如果x为有限值则返回true,否则返回false。isinfisinf(x)如果x为无限值则返回true,否则返回false。isnanisnan(x)如果x为NAN或QNAN则返回true,否则返回false。ldexpldexp(x, exp)frexp的逆运算,返回 x * 2 exp。lengthlength(v)返回v向量的长度。lerplerp(x, y, s)对x、y进行插值计算。Returns x + s(y - x)。litlit(n l, n h, m)返回光照向量(环境光,漫反射光,镜面高光,1)。loglog(x)返回以e为底的对数。log10log10(x)返回以10为底的对数。log2log2(x)返回以2为底的对数。maxmax(x, y)返回x、y中较大值。minmin(x, y)返回x、y中较小值。modfmodf(x, out ip)把x分割为整数和小数部分。mulmul(x, y)返回x、y矩阵相乘的积。noisenoise(x)Generates a random value using the Perlin-noise algorithm. normalizenormalize(x)返回单位化向量,定义为 x / length(x)。powpow(x, y)返回xy。radiansradians(x)将x(角度)转换到弧度。reflectreflect(i, n)返回入射光线i对表面法线n的反射光线。refractrefract(i, n, R)返回在入射光线i,表面法线n,折射率为R下的折射光线。roundround(x)返回最接近x的整数。rsqrtrsqrt(x)返回x平方根的倒数。 1 / sqrt(x) 。saturatesaturate(x)把x截取在0, 1之间。signsign(x)返回x的符号。sinsin(x)返回x的正弦值。sincossincos(x, out s, out c)返回x的正弦值和余弦值。sinhsinh(x)返回x的双曲正弦值。smoothstepsmoothstep(min, max, x)如果x的范围是min, max,则返回一个介于0和1之间的Hermite插值。sqrtsqrt(x)返回x的平方根,对x的每个字段都会计算一次。stepstep(a, x)返回 (x = a) ? 1 : 0 。tantan(x)返回x的正切值。tanhtanh(x)返回x的双曲正切值。tex1Dtex1D(s, t)返回纹理s在t位置的颜色。1D texture lookup. tex1Dbiastex1Dbias(s, t)使用bias返回纹理s在t位置的颜色。1D texture lookup with bias. tex1Dgradtex1Dgrad(s, t, ddx, ddy)1D texture lookup with a gradient. tex1Dlodtex1Dlod(s, t)使用LOD返回纹理s在t位置的颜色。1D texture lookup with LOD. tex1Dprojtex1Dproj(s, t)使用透视分离返回纹理s在t位置的颜色。1D texture lookup with projective divide. tex2Dtex2D(s, t)返回纹理s在t位置的颜色。tex2Dbiastex2Dbias(s, t)2D texture lookup with bias. tex2Dgradtex2Dgrad(s, t, ddx, ddy)2D texture lookup with a gradient. tex2Dlodtex2Dlod(s, t)2D texture lookup with LOD. tex2Dprojtex2Dproj(s, t)2D texture lookup with projective divide. tex3Dtex3D(s, t)3D texture lookup. tex3Dbiastex3Dbias(s, t)3D texture lookup with bias. tex3Dgradtex3Dgrad(s, t, ddx, ddy)3D texture lookup with a gradient. tex3Dlodtex3Dlod(s, t)3D texture lookup with LOD. tex3Dprojtex3Dproj(s, t)3D texture lookup with projective divide. texCUBEtexCUBE(s, t)Cube texture lookup. texCUBEbiastexCUBEbias(s, t)Cube texture lookup

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论