|
|
在访问纹理时,HLSL像素着色器要使用纹理采样器(texture sampler).采样器是对Direct3D纹理级(texture stage)的封装,包括对本级纹理的引用和所应用的过滤信息。一种简单的定义纹理采样器的方法是定义效果文件(effect files)支持的采样状态,这包括纹理坐标的包装模式(wrap mode)和所有的mipmap过滤信息。实际上,对于sampler的定义取代了我们在使用固定功能的渲染管线是的一系列SetTextureStageState函数。
下面是一个简单的HLSL pixel shader,在全局作用域,定义了一个texture和一个用来访问它的sampler.在使用这个shader之前,程序必须给Tex0赋一个D3DTexture9对象.
texture Tex0;
// define a sampler.
// this tells DirectX how we intend
// to use our texture in the
// pixel shader
sampler MySampler = sampler_state
{
Texture = (Tex0);
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
// all unsataed values
// are left to their defaults
};
float4 PS(float2 TexCoords : TEXCOORD0) : COLOR
{
return tex2D(MySampler, TexCoords);
}
HLSL支持四种sampler:sampler1D,sampler2D,sampler3D和samplerCUBE.每一种sampler都是为特定类型的纹理使用的。也可以像上面的shader程序一样使用通用的sampler类型,这样的话,通用的sampler会根据给定的纹理类型,映射到四种专用的sampler之一。然后,pixel shader使用这个sampler对象来从指定的mipmap链表中查找纹理元素(texel),查找要使用HLSL
提供的一些内建的纹理采样函数来完成。上面的示例使用的是tex2D.示例pixel shader的结果是使用程序传来的纹理坐标参数来采样Tex0指向的纹理。对于程序的每一次采样请求,它都会返回一个采样到的texel的颜色(一个RGBA COLOR). |
|