XNA(3.1)DrawUserPrimitives和SpriteBatch alpha问题

时间:2012-12-10 15:02:53

标签: c# xna vertex spritebatch

我正在使用XNA 3.1创建一些东西,并且我正在尝试使用DrawUserPrimitives创建2D Ribbon路径。我的算法只是在每个帧中添加新的顶点(假设发生了一些移动),并且还遍历顶点并逐渐淡出它们,删除不需要的顶点。这非常有效,除了我正在为许多其他图形使用SpriteBatch。现在,我将整个屏幕绘制到RenderTarget2D(出于各种原因,我无法避免它),而且我得到了这个奇怪的alpha问题。

我遇到的问题看起来像这样:

Trail is clearly not behaving correctly

这应该是白色的痕迹,随着它的消失逐渐消失。显然这没有发生。相反,它正在逐渐淡化到图形设备的清晰色彩。在绘制这条线索时,我暂停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纹理中半透明的正确着色。我的猜测是这里有什么东西引起了这个问题,但我不确定是什么。如果有人能帮助我,我会非常感激。

干杯。

1 个答案:

答案 0 :(得分:2)

哦......我修好了。需要将SaveStateMode.SaveState替换为SaveStateMode.None。

仍然想知道为什么我不能对它进行抗锯齿,但是......