Pixel Shader - Basic

像素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;

// Output
struct PS_OUTPUT
{
	vector color : COLOR0;
};

// Input
struct PS_INPUT
{
	float2 box	: TEXCOORD0;
	float2 spot	: TEXCOORD1;
	float3 str	: TEXCOORD2;
};

// Main —— Pixel Shader exe function
PS_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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值