1

解決できない問題に遭遇しました。同じ効果を複数回使用しながらテクスチャを描画する必要があります。私はこのようなことを達成しようとしています:

spriteBatch.Begin(); 

// Use the effect multiple times with a different parameter:
lightEffect.Parameters["parameter"].SetValue(value1);
lightEffect.CurrentTechnique.Passes[0].Apply();      
lightEffect.Parameters["parameter"].SetValue(value2);
lightEffect.CurrentTechnique.Passes[0].Apply();                                        

spriteBatch.Draw(texture, new Vector2(0, 0), Color.White);

spriteBatch.End(); 

2 番目の効果のみが使用されます。そのため、毎回エフェクトを使用して RenderTarget をそれ自体に複数回再描画することにしましたが、それも惨めに失敗します"The render target must not be set on the device when it is used as a texture"

graphicsDevice.SetRenderTarget(tempRenderTarget);

spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
spriteBatch.Draw(texture, new Vector2(0,0), Color.White);
spriteBatch.End();           

foreach (Value value in values)
{
    spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);            

    lightEffect.Parameters["paramter"].SetValue(value);
    lightEffect.CurrentTechnique.Passes[0].Apply();                    

    spriteBatch.Draw(tempRenderTarget, new Vector2(0, 0), Color.White);

    spriteBatch.End();  
}
4

1 に答える 1

2

2 つの交互のレンダー ターゲットを使用する必要があります。

RenderTarget input;
RenderTarget output;

for (int i = 0; i < numberOfPasses; i++)
{
    // Bind the target that is currently the output
    graphicsDevice.SetRenderTarget(output);

    // Use the current input target as texture in your effect
    // ...

    // Swap input and output
    RenderTarget temp = input;
    input = output;
    output = temp;
}
于 2013-02-05T14:26:39.713 に答える