具有抗锯齿功能的XNA 3.1 DrawUserPrimitives - MultiSampling不起作用?

时间:2012-12-10 16:54:50

标签: c# xna antialiasing multisampling

所以这是我今天早些时候提出的一个问题的延续。我使用XNA 3.1的DrawUserPrimitives方法构建了一些漂亮的色带轨迹,主要是通过在运动时扩展多边形。它看起来非常时尚和漂亮,除了一件事 - 抗锯齿。我不能为我的生活弄清楚如何应用它。

我在游戏构造函数中设置了它:

graphics.PreferMultiSampling = true;

我还添加了这个以测试硬件:

        graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>((sender, e) =>
        {
            PresentationParameters parameters = e.GraphicsDeviceInformation.PresentationParameters;
            parameters.MultiSampleQuality = 0;

        #if XBOX
                pp.MultiSampleType = MultiSampleType.FourSamples;
                return;
        #else

            int quality;
            GraphicsAdapter adapter = e.GraphicsDeviceInformation.Adapter;
            SurfaceFormat format = adapter.CurrentDisplayMode.Format;

            if (adapter.CheckDeviceMultiSampleType(DeviceType.Hardware, format, false, MultiSampleType.FourSamples, out quality))
            {
                parameters.MultiSampleType = MultiSampleType.FourSamples;
            }
            else if (adapter.CheckDeviceMultiSampleType(DeviceType.Hardware, format, false, MultiSampleType.TwoSamples, out quality))
            {
                parameters.MultiSampleType = MultiSampleType.TwoSamples;
            }
        #endif
        });

通过添加一些打印线,我知道我的硬件可以支持4个样本AA,但这一切似乎都没有区别。我似乎无法让它发挥作用。

以下是我的一条路径的屏幕截图,其中包含所有代码:

See? No AA!

我真的很感激一些帮助。我刚才看了一下这个问题,解决了一个不同的问题,然后也无法让它工作。

好吧,干杯。

1 个答案:

答案 0 :(得分:3)

修正了这个问题!

问题是,虽然后台缓冲区获得了正确的反别名设置,但渲染目标却没有。这意味着绘制到渲染目标是在没有AA的情况下完成的,但随后将绘制到后缓冲区的纹理完成。我现在已经修好了。