2


現在、XNAゲームのエフェクトファイルの言語「HLSL」を学習しています。でも; SpriteBatchにエフェクトを適用する問題に遭遇しました。

私のエフェクトファイルは次のようになり、レンダリングされたテクスチャが白になります。:]

float4 PSFunction(float2 coord : TEXCOORD0) : COLOR0
{
    return float4(0, 0, 0, 1); // Return a white pixel
}

technique Sample
{
    pass pass0
    {
        PixelShader = compile ps_2_0 PSFunction();
    }
}

次の引数でSpriteBatchを開始すると、正常に機能しています。

SpriteBatch.Begin(0, null, null, null, null, SampleEffect);

でも; SpriteBatch.Beginメソッドは複数の効果を受け入れません。したがって、私はやろうとしました

SampleEffect.CurrentTechnique.Passes[0].Apply();

電話する前に

SpriteBatch.Begin();

しかし、何も起こらなかったので、私はいくつかの異なる方法を試しました。そのような

SampleEffect.CurrentTechnique.Passes["pass0"].Apply();

しかし、それでも機能しませんでした。そこで、object.ReferenceEquals関数を使用して、エフェクトが正しいGraphicsDeviceにアタッチされていることを確認しましたが、それは正しいgraphicsDeviceと同等でした。私は何が間違っているのですか?SpriteBatchに複数のエフェクトをアタッチするにはどうすればよいですか?

よろしくお願いします、ラスムス:]

4

1 に答える 1

3

複数のエフェクトパスを同時に使用して描画することはできません。代わりに、同じものを複数回描画して、結果を組み合わせる必要があります。

この例として、周囲光、拡散光、鏡面光の3つの効果を持つ照明のシミュレーションを想像してみてください。これらのそれぞれは、エフェクトパスによって表されます。それらを順番にレンダリングし、結果を追加的に組み合わせます(光が一緒に追加するのと同じように)。

複数のエフェクトを組み合わせる場合は、それらを組み合わせる方法を手動で指定する必要があります。通常、これを行うには、使用するエフェクトパスをループし、一度に1つずつ適用して、各反復でシーンを描画します。

于 2012-06-30T14:16:03.273 に答える