当前位置:  开发笔记 > 编程语言 > 正文

如何在OpenTK中的GlControl中实现更好的抗锯齿?

如何解决《如何在OpenTK中的GlControl中实现更好的抗锯齿?》经验,为你挑选了1个好方法。

OpenTK提供了两种使用OpenGL的方法:

    GlControl 这是标准的WinForms控件,和

    具有OpenGL上下文的本机窗口.

我使用的是GlControl,FSAA看起来质量很差.我正在开发一个围绕OpenGL控件的许多控件的应用程序,所以我有点被迫使用GlControl.

有没有办法在GLControl中实现更好的抗锯齿(例如超级采样)?在我的应用程序中,我渲染了许多具有像素或甚至子像素大小的东西,而当前的FSAA并没有很好地处理它.

我在构造函数中看到一个指定缓冲区数量的参数,将这个数字设置为(比方说)6并渲染4个样本,将它们组合到第5个缓冲区并与第6个交换是否可行?或者,如何自己实施SSAA最简单的方法是什么?

这就是我如何创建GlControl,即8FSAA的样本数量:

glControl = new GLControl(new OpenTK.Graphics.GraphicsMode(32, 24, 0, 8));

更新:这是一个8x FSAA的GlControl打印屏幕.我检查了我的驱动程序设置,然后说Antializaing mode = Application controlled.

别名示例

UPDATE2:好的,这是可怕的尴尬,在NVIDIA控制面板中有另一个选项Antialiasing - transparency被设置为Off.我没有注意,因为我认为这是一些alpha混合的东西,但我错了.我设置它8x (supersample),现在GlControl确实是8xSSAA.

别名固定



1> The Fiddler..:

有两种常见的基于硬件的抗锯齿方法:MSAA(多重采样抗锯齿)和SSAA(超级采样抗锯齿).这两种方法都是FSAA(又名全屏抗锯齿)的子类别.

使用哪种方法取决于您的GPU和驱动程序设置.默认情况下,所有现代GPU都会为您提供MSAA.您可以在驱动程序控制面板中覆盖它.

换句话说,这一行:

glControl = new GLControl(new OpenTK.Graphics.GraphicsMode(32, 24, 0, 8));

将在任何现代GPU上为您提供8x FSAA.这可以是MSAA(默认)或SSAA,具体取决于您的驱动程序设置.

如果您需要对抗锯齿实现进行更多控制,请在不使用抗锯齿的情况下创建GLControl,并使用您需要的确切设置渲染到FBO.

更多信息:

    OpenTK FBO示例

    WGL_ARB_multisample

    WGL_ARB_create_context

    GL_ARB_framebuffer_object

    OpenGL 4.4规范

    OpenGL 4.4参考卡

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有