Qt OpenGL Antialiasing-MSAA
QtOpenGLMSAA算法介绍...
Qt OpenGL Antialiasing - MSAA
锯齿是图形绘制中常见的问题
- 这是一个采样不足然后信号丢失导致的问题
- 经过各位前辈们的其扑后继的研究,终究是有了看起来不错的解决方案
- 本文中我们采用一种名为
MSAA的抗锯齿的技术
MSAA
超级采样抗锯齿(Super Sampling Anti-Aliasing)的原理是把当前分辨率成倍提高,然后再把画缩放到当前的显示器上。这样的做法实际上就是在显示尺寸不变的情况提高分辨率,让单个像素变得极小,这样就能够大幅减轻画面的锯齿感了。不过是由于对整个显示画面的放大,因此它消耗的显示资源也是非常大的。
Qt OpengGL 的
MSAA
走样展示
开启QtOpenGLWidget的MSAA
如何开启QtOpenGL的MSAA
Qt有他自己的关于OpenGL的封装,我们使用的Qt的关于OpenGL封装在创建
QOpenGLWidget窗口时,在构造函数中添加如下代码:1
2
3QSurfaceFormat format;
format.setSamples(4);
setFormat(format);setFormat是窗口QOpenGLWidget的函数,在构造函数中使用,会给后面所有依赖的小部件设置一个默认的format,对于后面的小部件(窗口),如果不做格式的修改,将会使用在构造函数中调用setFormat函数设置的格式作为默认格式
失败的尝试
我尝试,单独修改QopenGLContext的QSurfaceFormat,前面的部分是成功,我获取了当前窗口的QopenGLContext,修改了QSurfaceFormat,向其中添加了
启用MSAA的代码.然后调用QopenGLContext的create函数,企图重新创建一个QopenGLContext,但是失败了,在初始化QopenGLFunction失败,
暂时不知道原因,目测可能需要重新将当前窗口的绑定到重新创建后的上下文,以及调用这个上下文的OpenGL函数