XNA 4.0在窗口中出现锯齿状边缘问题...了解高质量输出的方法?

Sco*_*ott 0 3d xna multisampling high-resolution xna-4.0

我在我正在编写的应用程序中使用此示例项目的XNA 4.0表单控件:http: //creators.xna.com/en-US/sample/winforms_series1

它工作得很好,我已经完成了很多视觉和动画.我正在摸不着头脑的主要问题是3D模型和原始3D形状(曲面细分为30的圆柱体)我渲染的边缘非常锯齿状,就好像它们是低分辨率一样.

我试图找出如何启用多重采样,但我在网上找到的所有示例似乎都不适用于在自定义表单控件中使用XNA的这种新方法.

在GraphicsDeviceService()构造函数中,创建了一个PresentationParameters对象,但唯一可用的属性是integer.MultiSampleCount类型为integer.我尝试设置它没有任何效果.

我还尝试将后缓冲区设置为控件大小的两倍(GraphicsDeviceService.cs):

    GraphicsDeviceService(IntPtr windowHandle, int width, int height)
    {
        parameters.BackBufferWidth = width * 2;
        parameters.BackBufferHeight = height * 2;
        ...
    }

然后我改变了这个函数(GraphicsDeviceControl.cs):


    void EndDraw()
    {
        Rectangle sourceRectangle = new Rectangle(0, 0, ClientSize.Width * 2, ClientSize.Height * 2);
        Rectangle destinationRectangle = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);
        GraphicsDevice.Present(sourceRectangle, destinationRectangle, this.Handle);
    }

但这没有奏效.渲染到屏幕的对象被降级到窗口的1/4并被剪裁.尽管看起来确实看起来略显锯齿状......

所以在这一点上我不知道如何使用这种方法(窗口中的XNA控件)来获得高质量的图形.我对XNA很新,所以任何建议都会有所帮助.

谢谢

小智 5

我下载了该代码示例以查看PresentationParameters的设置位置.这些是您需要修改的内容.

它在GraphicsDeviceService类中.

在这个类的构造函数中,它正在设置一个名为"parameters"的对象,一个PresentationParamters对象.在new之后和将参数传递给graphicsDevice之前添加此行:

parameters.MultiSampleCount = 10;
Run Code Online (Sandbox Code Playgroud)

我任意挑选的价值.它提供健康的抗锯齿.如果您需要了解这个数字究竟是什么,请阅读有关抗锯齿的更多信息.这是通过抗混叠滤波器的次数.因此,您可能希望降低它以获得更好的性能,或者将其提高以进行更多抗锯齿处理.

  • 很抱歉没有完全阅读你的答案,似乎你已经尝试过MultiSampleCount.你似乎也没有尝试过很多不同的价值观.尝试使用更高的值; 对我来说,当它是1-2时我肯定可以看到锯齿状的边缘,当我将其增加到10时,边缘非常光滑.我已经使用代码示例附带的默认模型(如Cylinder,SpaceShip等)对此进行了测试. (2认同)