【发布时间】:2012-12-10 15:02:53
【问题描述】:
我正在使用 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 纹理中半透明的正确着色。我的猜测是这里的某些东西导致了这个问题,但我不确定是什么。如果有人能帮我解决这个问题,我将不胜感激。
干杯。
【问题讨论】:
标签: c# xna vertex spritebatch