1

私はシェーダーと HLSL を初めて使用します。深刻な間違いをしていないことを願っています。HLSL で 2 つのテクスチャをブレンドしようとしています。テクスチャとサンプラーの両方をセットアップしました。

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

しかし、私が得ているのは、純粋な黒と 2 番目のテクスチャの間の補間です。場所を入れ替えても、同じ結果が得られます。重みを 0.0 に設定すると、純粋な黒などになります。これは、 に何か問題があることを意味しfirstSampleます。の代わりに純粋な数学コンポーネントごとにそれらの間を手動で補間しようとしましたlerpが、同じ結果が得られます。最も奇妙なことはfirstSample、他のサンプルと対話せずに自分の値を直接返すか、何らかの値を返す場合です (例:return float4(firstSample.b, firstSample.g, firstSample.r, 1);チャネル スワッピングの場合)、動作する結果が得られますが、テクスチャを他のサンプルで使用しようとすると、テクスチャ サンプルが実質的に無効 (黒) になります。その理由は何ですか?私はシェーダーに非常に慣れていないため、おそらく私が明らかに間違っていることですが、それが何であるかを見つけることができませんでした。

4

1 に答える 1

0

表示されている結果は、コンパイラのバグが原因である可能性があります。Windows SDKのバージョン 46 または2010 年 6 月の DirectX SDKのバージョン 43のいずれかの最新バージョンの HLSL コンパイラを使用していることを確認します。

于 2013-08-30T23:28:12.967 に答える