我正在使用 XNA 3.1 制作一些东西,并且正在尝试使用 DrawUserPrimitives 创建 2D Ribbon 轨迹。我的算法只是在每一帧添加新的顶点(假设发生了一些运动),并且还遍历顶点并将它们淡出,删除不需要的顶点。这工作得很好,除了我使用 SpriteBatch 来处理许多其他图形。现在,我将整个屏幕绘制到 RenderTarget2D(出于各种原因,我无法避免),并且遇到了这个奇怪的 alpha 问题。
我遇到的问题如下所示:
这应该是一条随着它消失的白色痕迹。显然这不会发生。相反,它正在褪色为图形设备的清晰颜色。绘制这条轨迹时,我暂停 SpriteBatch(通过调用 End(),然后在绘制完成后调用 Begin()),这样我就可以得到正确的深度。我用来绘制图元的效果只是一个没有什么特别之处的 BasicEffect,初始化 SpriteBatch 的代码在这里:
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
graphics.GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true;
graphics.GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One;
graphics.GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha;
graphics.GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
graphics.GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
初始化 SpriteBatch 后的设置可确保 RenderTarget 纹理中半透明的正确着色。我的猜测是这里的某些东西导致了这个问题,但我不确定是什么。如果有人可以帮助我,我将不胜感激。
干杯。