Directx 是否对多个纹理使用多个采样器状态
如果我将两个纹理传递到HLSL着色器中,是否还需要两个采样器状态?我对采样器状态实际上是如何工作的有点困惑。我从不实例化它们或任何东西,我只是调用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
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;
}
事实上,正如您所看到的,您只需将纹理的两种颜色相乘即可获得多纹理对象