1

ピクセルシェーダーを試しているだけです。素敵なぼかし効果を見つけたので、画像を何度もぼかす効果を作成しようとしています。

その方法:ぼかし効果を適用する RenderTarget で画像の hellokittyTexture をレンダリングし、 hellokittyTextureをそのレンダリングの結果に置き換えて、Draw 反復ごとに何度も繰り返します。

protected override void Draw(GameTime gameTime)
    {

        GraphicsDevice.Clear(Color.CornflowerBlue);


        GraphicsDevice.SetRenderTarget(buffer1);

        // Begin the sprite batch, using our custom effect.
        spriteBatch.Begin(0, null, null, null, null, blur);
        spriteBatch.Draw(hellokittyTexture , Vector2.Zero, Color.White);
        spriteBatch.End();
        GraphicsDevice.SetRenderTarget(null);

        hellokittyTexture = (Texture2D) buffer1;

        // Draw the texture in the screen
        spriteBatch.Begin(0, null, null, null, null, null);
        spriteBatch.Draw(hellokittyTexture , Vector2.Zero, Color.White);
        spriteBatch.End();

        base.Draw(gameTime);
    }

しかし、「The render target must not be set on the device when it is used as a texture.」というエラーが表示されます。hellokittyTexture = (Texture2D) buffer1;テクスチャをコピーするのではなく、RenderTarget への参照をコピーするためです (基本的に、割り当て後は同じオブジェクトです) 。

RenderTarget 内のテクスチャを取得する良い方法を知っていますか? または、私がしようとしていることをよりエレガントに行う方法はありますか?

4

2 に答える 2

3
    spriteBatch.Draw(hellokittyTexture , Vector2.Zero, Color.White);

この行では、テクスチャを描画しています...それ自体に...それは起こり得ません。

と が適切に初期化されていると仮定buffer1hellokittyTextureて、次の行を置き換えます。

    hellokittyTexture = (Texture2D) buffer1;

これとともに:

        Color[] texdata = new Color[hellokittyTexture.Width * hellokittyTexture.Height];
        buffer1.GetData(texdata);
        hellokittyTexture.SetData(texdata);

このように、はへのポインタではなく、 のコピーとしてhellokittyTexture設定されます。buffer1

于 2013-07-12T01:41:43.923 に答える