我是着色器和 HLSL 的新手,我希望我没有做任何严重不正确的事情。我正在尝试在 HLSL 中混合两种纹理。我已经设置了我的纹理和采样器:
Texture2D<float4> First : register(t0);
Texture2D<float4> Second : register(t1);
uniform sampler FirstSampler : register(s0);
uniform sampler SecondSampler : register(s1);
在我的像素着色器中,我正在对我的纹理进行采样:
float4 firstSample = First.Sample(FirstSampler, coords);
float4 secondSample = Second.Sample(SecondSampler, coords);
现在,在这一点上,如果我直接返回firstSample
or secondSample
,我会得到正确的结果。但是,我试图在我的纹理之间进行插值。我试过了:
float4 returnValue = lerp(firstSample, secondSample, 0.5);
但我得到的是纯黑色和我的第二个纹理之间的插值。如果我交换他们的位置,我会得到相同的结果。如果我将权重设置为 0.0,我会得到纯黑色等。这意味着firstSample
. 我还尝试使用纯数学组件而不是 手动在它们之间进行插值lerp
,但它也会产生相同的结果。最奇怪的是,当我直接返回我的firstSample
或返回一些值而不与其他样本交互时(例如return float4(firstSample.b, firstSample.g, firstSample.r, 1);
对于通道交换),我得到了一个工作结果,但是每当我尝试将我的纹理与任何其他样本一起使用时,我的纹理样本实际上变得无效(黑色)。可能是什么原因?我对着色器很陌生,这可能是我做错了,但我不知道它是什么。