HLSL中采样器关联纹理的方法

HLSL中的采样器实际上一个结构类型,PixelShader程序使用采样器指定被采样纹理、纹理过滤方式和纹理寻址模式,采样器的使用语法大致如下: 
texture tex0;   // 声明一个纹理对象 
sampler2D s_2D = sampler_state  // 声明一个采样器对象 

    Texture = <tex0>;         // 指定被采样的纹理 
    MinFilter = Linear;       // 纹理过滤方式 
    MagFilter = Linear; 
    AddressU = Wrap;          // 纹理寻址模式 
    AddressV = Wrap; 
}; 
float4 PS_Main(float2 tex : TEXCOORD0) : COLOR 

return tex2D(s_2D, texcoord); // 像素渲染程序返回结果为纹理采样颜色 
} 

    以上像素渲染程序代码中,并没有明确指定采样器s_2D对应的是纹理(tex0对象并没有被赋值),然而在多纹理采样的程序中,是需要明确指定采样器所采样的纹理对应第几个通道(最多8个通道,通过Device的SetTexture指定)的纹理。 有两种方法指定采样器对应的纹理: 
1)通过指定采样器寄存器来绑定所采样的纹理: 
sampler2D sColor : register(s0);    // 绑定通道0中的纹理 
sampler2D sNormal : register(s1);   // 绑定通道1中的纹理  
2)通过ConstantTable接口获取像素渲染程序中全局texture对象的RegisterIndex,从而把纹理设置到相应的通道: 
LPD3DXCONSTANTTABLE pConstantTable = NULL; 
D3DXCompileShaderFromFile( 
     "ps_multitex.txt", 
     0, 
     0, 
     "PS_Main", 
     "ps_1_1", 
     D3DXSHADER_DEBUG, 
     &shader, 
     &errorBuffer, 
     &pConstantTable); 
D3DXHANDLE hTex0 = pConstantTable->GetConstantByName(0, "tex0"); 
UINT count; 
D3DXCONSTANT_DESC Tex0Desc; 
pConstantTable->GetConstantDesc(hTex0, &Tex0Desc, &count); 
pDevice->SetTexture(Tex0Desc.RegisterIndex, pTexture0);     // 设置纹理到tex0对象对应的通道
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值