我是着色器和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
或secondSample
,我会得到正确的结果。但是,我正在尝试在我的纹理之间进行插值。我试过了:
float4 returnValue = lerp(firstSample, secondSample, 0.5);
但我得到的是纯黑色和第二个纹理之间的插值。如果我改变他们的位置,我会得到相同的结果。如果我将权重设置为0.0,我会得到纯黑色等,这意味着firstSample
有问题。我还尝试使用纯数学分量而不是lerp
在它们之间手动插值,但它也产生相同的结果。最奇怪的是,当我直接返回我的firstSample
或返回一些值而没有与另一个样本交互时(例如return float4(firstSample.b, firstSample.g, firstSample.r, 1);
进行频道交换),我得到一个工作结果,但每当我尝试使用我的纹理与任何其他样本,我的纹理样本变得有效无效(黑色)。可能是什么原因?我对着色器很新,这可能是我明显做错了,但我找不到它是什么。