因此,我试图将游戏玩法渲染到XNA中的RenderTarget2D,以便可以将着色器应用于场景。它在某种程度上可以正常工作,但是使用除255以外的其他Alpha级别绘制的任何内容似乎都带有紫色。 Alpha效果有效,但也带有紫色。我尝试寻找一种解决方案,而我似乎只能找到的解决方案是将全屏显示为紫色,或者将alpha替换为紫色。

我的问题不是那些...



我抛出这个场景是为了向您展示发生了什么。如您所见,alpha效果正在起作用,但是对象被染成紫色。

这是我发布渲染代码的部分:

gameTarget = new RenderTarget2D(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, 1, SurfaceFormat.Color, RenderTargetUsage.PreserveContents);

gameDepthBuffer = new DepthStencilBuffer(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, GraphicsDevice.DepthStencilBuffer.Format);


这是我正在使用的初始化。

GraphicsDevice g = GraphicsDevice;
DepthStencilBuffer d = g.DepthStencilBuffer;
g.SetRenderTarget(0, gameTarget);
g.DepthStencilBuffer = gameDepthBuffer;
g.Clear(Color.Black);
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
        level.Draw(GameBatch);

GameBatch.End();
g.SetRenderTarget(0, null);
g.DepthStencilBuffer = d;
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
        if (renderEffect != null)
        {
            renderEffect.Begin();
            renderEffect.CurrentTechnique.Passes[0].Begin();
        }
        Sprite.Draw(GameBatch, gameTarget.GetTexture(), new Rectangle(0, 0, (int)assumedSize.X, (int)assumedSize.Y), Color.White);
        if (renderEffect != null)
        {
            renderEffect.CurrentTechnique.Passes[0].End();
            renderEffect.End();
        }
        GameBatch.End();


renderEffect是效果文件,Sprite是用于处理相对于假定的屏幕尺寸(以应付变化的分辨率)的绘图的类。

我正在XNA 3.1中工作。我知道我现在应该使用4.0,但不是因为我有关于3.1的书,这在某些情况下很有用。

无论如何,这里的一些帮助将不胜感激...

最佳答案

通常,紫色是RenderTarget清除为的默认颜色。

考虑到这一点,在将渲染目标设置为null之后,我看到您没有清除Back Buffer。因此您的代码应如下所示:

g.SetRenderTarget(0, null);
g.Clear(Color.Transparent);//or black

关于c# - RenderTarget2D将所有alpha紫色着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10549654/

10-10 02:57