Pixel Shader - Basic

来源:互联网 发布:炉石传说比赛直播数据 编辑:程序博客网 时间:2024/06/05 09:36

像素Shader首先包含了三个采样器,分别对应3个不同的纹理。这里有个术语让很多初学者很迷惑——“采样器”,什么是“采样器”?,

采样器在程序中做了什么?


采样器:采样器这个关键词如果你在搜索引擎中搜索,大多得到的是音频上的处理,但是纹理采样器与其原理类似,我们利用更优秀

的采样算法将被赋予纹理的3D模型映射在2D屏幕上更加清晰,失真更小,下面是纹理采样器中最基本的3种采样技术:


1.最近点采样技术

2.线性采样技术

3.各向异性与MIPMAP采样技术


三种采样效果如下图所示


1.最近点采样



2.线性采样



3.各项异性与MIPMAP采样


(以上三幅图像均来自:http://www.cnitblog.com/luckydmz/archive/2011/04/04/73261.html)

这就是纹理采样器 —— 用作对纹理映射到2D屏幕的具体优化技术,避免过度失真。


理解了采样器,再回头来看着色Shader中的代码就容易明白许多了,首先知道了着色Shader中,sampler就是采样器,

用作对纹理进行处理的单元。那么来看下聚光灯的着色Shader代码:


// File name : Spotlight.psh// Date : 2011.12.20// Description :////// 3 textures needs these samplers.sampler box;sampler spot;sampler str;// Outputstruct PS_OUTPUT{vector color : COLOR0;};// Inputstruct PS_INPUT{float2 box: TEXCOORD0;float2 spot: TEXCOORD1;float3 str: TEXCOORD2;};// Main —— Pixel Shader exe functionPS_OUTPUT Main(PS_INPUT input){PS_OUTPUT output = (PS_OUTPUT)0;// tex2D(param1, param2);// param1 : sampler state, from app.// param2 : texture 2d coordinate.vector b = tex2D(box, input.box);vector s = tex2D(spot, input.spot);vector t = tex2D(str, input.str);// According following formula to mix.vector c = b * s + t;c = c + 0.1f;output.color = c;return output;}

原创粉丝点击