游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2913|回复: 0

HLSL中的sampler

[复制链接]

23

主题

63

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2007-1-25 15:19:00 | 显示全部楼层 |阅读模式
在访问纹理时,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).
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 08:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表