Qt OpenGL Antialiasing-MSAA

  QtOpenGLMSAA算法介绍...

Qt OpenGL Antialiasing - MSAA

锯齿是图形绘制中常见的问题

  • 这是一个采样不足然后信号丢失导致的问题
  • 经过各位前辈们的其扑后继的研究,终究是有了看起来不错的解决方案
  • 本文中我们采用一种名为MSAA的抗锯齿的技术

MSAA

  超级采样抗锯齿(Super Sampling Anti-Aliasing)的原理是把当前分辨率成倍提高,然后再把画缩放到当前的显示器上。这样的做法实际上就是在显示尺寸不变的情况提高分辨率,让单个像素变得极小,这样就能够大幅减轻画面的锯齿感了。不过是由于对整个显示画面的放大,因此它消耗的显示资源也是非常大的。

Qt OpengGLMSAA

走样展示

走样

开启QtOpenGLWidgetMSAA

MSAA

如何开启QtOpenGLMSAA

  • Qt有他自己的关于OpenGL的封装,我们使用的Qt的关于OpenGL封装

  • 在创建QOpenGLWidget窗口时,在构造函数中添加如下代码:

    1
    2
    3
    QSurfaceFormat format;
    format.setSamples(4);
    setFormat(format);

    • setFormat是窗口QOpenGLWidget的函数,在构造函数中使用,会给后面所有依赖的小部件设置一个默认的format,对于后面的小部件(窗口),如果不做格式的修改,将会使用在构造函数中调用setFormat函数设置的格式作为默认格式

失败的尝试

  我尝试,单独修改QopenGLContextQSurfaceFormat,前面的部分是成功,我获取了当前窗口的QopenGLContext,修改了QSurfaceFormat,向其中添加了 启用MSAA的代码.然后调用QopenGLContextcreate函数,企图重新创建一个QopenGLContext,但是失败了,在初始化QopenGLFunction失败,

暂时不知道原因,目测可能需要重新将当前窗口的绑定到重新创建后的上下文,以及调用这个上下文的OpenGL函数