gpt4 book ai didi

directx - 您是否对多个纹理使用多个 SamplerStates

转载 作者:行者123 更新时间:2023-12-04 05:18:13 25 4
gpt4 key购买 nike

如果我将两个纹理传递给 HLSL 着色器,我还需要两个 SamplerState 吗?我对 SamplerStates 的实际工作方式有些困惑。我从不实例化它们或任何东西,我只是调用

Tex.Sample(sampler, pos);

我正在为配置文件 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;
}
}

最佳答案

你想要做的是所谓的多重纹理。

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

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

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;
};

Here您可以找到默认值和 here状态的一些含义。

毕竟我可以说 SamplerState的数量你需要什么取决于你想要达到什么样的效果。但实际上很简单,您的代码可能是这样的:
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;
}

事实上,如您所见,您只需要将纹理的两种颜色相乘即可获得多纹理对象。

关于directx - 您是否对多个纹理使用多个 SamplerStates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13981361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com