所以,我正在尝试将我的游戏玩法渲染到 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 的书,这在某些情况下很有帮助。
无论如何,这里的一些帮助将不胜感激......