2

我正在使用 XNA 3.1 制作一些东西,并且正在尝试使用 DrawUserPrimitives 创建 2D Ribbon 轨迹。我的算法只是在每一帧添加新的顶点(假设发生了一些运动),并且还遍历顶点并将它们淡出,删除不需要的顶点。这工作得很好,除了我使用 SpriteBatch 来处理许多其他图形。现在,我将整个屏幕绘制到 RenderTarget2D(出于各种原因,我无法避免),并且遇到了这个奇怪的 alpha 问题。

我遇到的问题如下所示:

Trail 显然行为不正确

这应该是一条随着它消失的白色痕迹。显然这不会发生。相反,它正在褪色为图形设备的清晰颜色。绘制这条轨迹时,我暂停 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 纹理中半透明的正确着色。我的猜测是这里的某些东西导致了这个问题,但我不确定是什么。如果有人可以帮助我,我将不胜感激。

干杯。

4

1 回答 1

2

哦……我修好了。需要将 SaveStateMode.SaveState 换成 SaveStateMode.None。

不过,我仍然想知道为什么我不能对其进行抗锯齿处理......

于 2012-12-10T15:20:24.840 回答