1

我是着色器和 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);

现在,在这一点上,如果我直接返回firstSampleor secondSample,我会得到正确的结果。但是,我试图在我的纹理之间进行插值。我试过了:

float4 returnValue = lerp(firstSample, secondSample, 0.5);

但我得到的是纯黑色和我的第二个纹理之间的插值。如果我交换他们的位置,我会得到相同的结果。如果我将权重设置为 0.0,我会得到纯黑色等。这意味着firstSample. 我还尝试使用纯数学组件而不是 手动在它们之间进行插值lerp,但它也会产生相同的结果。最奇怪的是,当我直接返回我的firstSample或返回一些值而不与其他样本交互时(例如return float4(firstSample.b, firstSample.g, firstSample.r, 1);对于通道交换),我得到了一个工作结果,但是每当我尝试将我的纹理与任何其他样本一起使用时,我的纹理样本实际上变得无效(黑色)。可能是什么原因?我对着色器很陌生,这可能是我做错了,但我不知道它是什么。

4

1 回答 1

0

您看到的结果可能是由于编译器错误。确保您使用的是最新版本的 HLSL 编译器,无论是来自Windows SDK的版本 46,还是来自2010 年 6 月 DirectX SDK的版本 43 。

于 2013-08-30T23:28:12.967 回答