0

基本的なピクセル シェーダーをセットアップしましたが (現在はテスト用に構成されています)、何もしないようです。私はそれを次のように設定しました:

uniform extern texture ScreenTexture;    
const float bloomThreshhold = 0.4;
const float existingPixelColorMult = 1.1;

sampler ScreenS = sampler_state
{
    Texture = <ScreenTexture>;    
};

float4 BloomedColor(float2 texCoord: TEXCOORD0) : COLOR
{
    // pick a pixel on the screen for this pixel, based on
    // the calculated offset and direction
    float2 temp = texCoord;
    temp.x += 1;
    float4 mainPixelColor = 0;    
    /*
    float4 pixelPlus1X = tex2D(ScreenS, temp);
    temp.x -= 2;
    float4 pixelMinus1X = tex2D(ScreenS, temp);
    temp.x += 1;
    temp.y += 1;
    float4 pixelPlus1Y = tex2D(ScreenS, temp);
    temp.y -= 2;
    float4 pixelMinus1Y = tex2D(ScreenS, temp);
    */

    return mainPixelColor;
}

technique Bloom
{
    pass P0
    {
        PixelShader = compile ps_1_1 BloomedColor();
    }
}

次のような読み込みコードを使用します。

        glowEffect = Content.Load<Effect>("GlowShader");
        glowEffect.CurrentTechnique = glowEffect.Techniques[0];

使用コードは次のとおりです。

            spriteBatch.Begin();
            glowEffect.Begin();
            glowEffect.CurrentTechnique.Passes[0].Begin();
            spriteBatch.Draw(screenImage, Vector2.Zero, Color.White);
            spriteBatch.End();
            glowEffect.CurrentTechnique.Passes[0].End();
            glowEffect.End();

ロードは正常に機能しているようで、そのメソッドを使用してテクスチャをレンダリングするときにスローされるエラーはありませんが、エフェクト コードがそこにないように動作します。間違ったバージョンのシェーダーを使用している可能性はありません (2.0 および 1.1 バージョンでテストしました)。(XNA 3.1 を使用)

4

2 に答える 2

1

すべてのピクセルに対して 0 を返しています。0 以外の値を返すコードはすべてコメント アウトしました。0 は黒であり、何らかのレンダリングを行っている場合は、黒 (ブレンド モードでこれが色として表示される場合) または変更なし (場合) のいずれかになります。ブレンド モードは結果を乗算します)。もちろん、(シェーダーがロードされて操作されているかどうかを確認しようとしているだけの場合)、変わった色を使用してみることができます。ネオングリーンの誰か?次に、少なくとも処理されていることを確認したら、そのコードのコメントを外して結果を評価します。

最後に、ブルームがあなたの求めているものなら、マイクロソフトは非常に便利なサンプルを持っています。おそらくここから多くのことを学ぶでしょう:

http://create.msdn.com/en-US/education/catalog/sample/bloom

于 2011-11-03T16:00:43.790 に答える
0

XNA 4.0 を使用している場合は、Shawn Hargreaves のコメントを参照してください。

于 2011-11-03T13:33:52.657 に答える