Directx 是否对多个纹理使用多个采样器状态

Directx 是否对多个纹理使用多个采样器状态,directx,hlsl,Directx,Hlsl,如果我将两个纹理传递到HLSL着色器中,是否还需要两个采样器状态?我对采样器状态实际上是如何工作的有点困惑。我从不实例化它们或任何东西,我只是调用 Tex.Sample(sampler, pos); 我正在为profile 9.3(WP8,如果有任何不同的话)编译着色器 示例着色器: Texture2D InputTexture; SamplerState Sampler; float4 PSMain(float2 pos: TEXCOORD, float4 SVP : SV_POSITIO

如果我将两个纹理传递到HLSL着色器中,是否还需要两个采样器状态?我对采样器状态实际上是如何工作的有点困惑。我从不实例化它们或任何东西,我只是调用

Tex.Sample(sampler, pos);
我正在为profile 9.3(WP8,如果有任何不同的话)编译着色器

示例着色器:

Texture2D InputTexture;
SamplerState Sampler;

float4 PSMain(float2 pos: TEXCOORD, float4 SVP : SV_POSITION) : SV_TARGET {  
    float4 image = InputTexture.Sample(Sampler, pos);   
    return image;   
}

technique  {
    pass {
        Profile = 9.3;
        PixelShader = PSMain;
    }
}

你想做的就是所谓的多重文本

对象包含采样和过滤选项,采样器允许您使用该选项从纹理读取数据

可以设置许多采样器状态:

Filter
AddressU
AddressV
AddressW
MipLODBias
MaxAnisotropy
ComparisonFunc
BorderColor
MinLOD
MaxLOD
在Direct3D 10中,语法如下所示:

//example
SamplerState mySampler{
    Filter = MIN_MAG_MIP_LINEAR; //sets min/mag/mip filter to linear
    AddressU = Wrap;
    AddressV = Wrap;
};
您可以找到默认值和状态的一些含义

毕竟我可以说,你需要的
samplestate
s的数量取决于你想要达到什么样的效果。但实际上,您的代码可以是:

Texture2D InputTextures[2];
SamplerState Sampler;

float4 PSMain(float2 pos: TEXCOORD, float4 SVP : SV_POSITION) : SV_TARGET {
    float4 color = InputTexture[0].Sample(Sampler, pos) * InputTexture[1].Sample(Sampler, pos);
    return color;  
}
事实上,正如您所看到的,您只需将纹理的两种颜色相乘即可获得多纹理对象