DirectCompute の学習を始めたばかりで、学習目的で、テクスチャをぼかす単純な畳み込みフィルターを作成したいと考えています。テクスチャをぼかすために、次の計算シェーダーを作成しました。
Texture2D<float4> inputTex;
RWTexture2D<float4> outputTex;
[numthreads(32, 32, 1)]
void main( uint3 DTid : SV_DispatchThreadID )
{
float4 totalPixVal = float4( 0.0f, 0.0f, 0.0f, 0.0f );
for ( int y = -3; y < 3; ++y )
for ( int x = -3; x < 3; ++x )
totalPixVal += inputTex.Load( uint3(DTid.x + x, DTid.y + y, DTid.z) );
totalPixVal = float4( totalPixVal.xyz / 49.0f, 1.0f );
float4 inPix = inputTex.Load( DTid );
outputTex[DTid.xy] = totalPixVal;
}
次のパラメーターを使用して呼び出します。
DeviceContext->Dispatch( inputTexture->Width / 32, inputTexture->Height / 32, 1 );
このシェーダは、現在のピクセルとその 48 個の隣接ピクセルの平均カラー値を取得し、ぼかし効果を発生させます。
ぼかし部分は正常に動作するようになりましたが、シェーダーが出力する色が正しくないようです。シェーダーをテストするために、黒の背景に真っ白な形状のシンプルな画像を使用しています。私が期待する出力は、黒い背景にぼやけた純粋な白い形ですが、白い形はもはや白ではなく、灰色です。コードを何度も見直しましたが、どこに問題があるのか わかりません。各テクスチャのサイズは同じ 512x512 ピクセルです。
これは私の入力画像です:
そして、これは私が得る出力です:
どんな助けでも大歓迎です。
ありがとう