OpenGL在Qt5中支持情况的简单说明
1. Qt5中的OpenGL
OpenGL是用于硬件加速和3D绘图最广泛使用的图形API接口,几乎所有的桌面平台系统和大多数移动和嵌入式平台都对它提供了支持,有自己对应的实现版本。Qt库就提供了一系列方便的C++类,来帮助用户将由OpenGL支持而绘制的图形集成到自己的应用程序中。
在Qt5.0之前,也就Qt4的时代,Qt对OpenGL的支持是通过Qt OpenGL扩展模块提供的,而进入Qt5时代,该模块已经被废弃,不再建议使用。这个模块在Qt5中仍然存在,但是新开发的程序应该使用Qt GUI模块中的QOpenGL前缀开始的类,如QOpenGLWidget等,而不是以QGL开始那些类了。需要注意的是,Qt OpenGL模块在Qt6中又重新纳进来了,用于提供对Qt Quick和Qt Widgets两种UI开发方式的OpenGL支持,兼容Qt5中关于Opengl使用方式,同时也方便应用程序本省集成那些基于OpenGL开发的第三方渲染程序支持。不过,这里我们主要关注Qt5对OpenGL的支持。
多说一点,其实Qt对3D的支持还有一些其他更高阶的扩展模块,如Qt Data Visualization用于支持三维图表,Qt Quick 3D,Qt 3D等对三维渲染和更加丰富的三维内容和UI提供支持,有兴趣大家可以自行研究。我们这里重点关注 OpenGL in Qt GUI.
2. Qt GUI中的OpenGL
在Qt GUI中,或者说Qt Widgets中, 对OpenGL的使用大致有三种方式
-
- 使用基于QOpenGLPaintDevice的QPainter绘制2D图形,可以达到硬件加速的效果;
-
- 为了提供对3.0或更高版本的桌面OpenGL的支持,在Qt5提供了一种带有版本信息提示的函数封装机制,即QOpenGLFunction_N_N类族,支持可选核心模式(core)和兼容模式(compatibilty),如我在上篇文章中使用的那样,QtOpenGL–使用OpenGL绘制曲面图(三):自定义类继承QOpenGLFunctions_4_5_Core。使用这种方式,可以很方便的开发依赖于modern,desktop-only OpenGL才特有的功能的桌面应用程序。
-
- 为了克服桌面开发和移动以及嵌入式开发的代码兼容性和一致性问题,Qt5中提供一些方便类的封装,即可以简化OpenGL程序的编写,还可以隐藏扩展以及OpenGL ES 和桌面OpenGL之间的不同而带来的复杂性问题。如QOpenGLFunctions 类可以帮助程序在桌面OpenGL中使用全部OpenGL ES 2.0中的函数,而不用去管函数指针相关的所谓的函数决议的问题(Function Resolution), 因此达到一种跨平台开发的效果。
除此之外,还提供许多对原生OpenGL中所关心的功能和资源的封装类,比如QOpenGLBuffer(对应VBO,EBO), QOpenGLVertexArrayObject(对应VAO),QOpenGLShaderProgram(对应着色器程序),QOpenGLShader(对应着色器概念),QOpenGLContext(对应上下文),以及QOpenGLTexture(对应着纹理)等。同时Qt还提供了一些非常常用的关于3D图形操作数学类,如QMatrix4x4, QVector4D 和 QQuaternion,这些类可以帮助实现向量矩阵之间的操作,方便实现图形的旋转,平移,缩放等各种变换。
- 为了克服桌面开发和移动以及嵌入式开发的代码兼容性和一致性问题,Qt5中提供一些方便类的封装,即可以简化OpenGL程序的编写,还可以隐藏扩展以及OpenGL ES 和桌面OpenGL之间的不同而带来的复杂性问题。如QOpenGLFunctions 类可以帮助程序在桌面OpenGL中使用全部OpenGL ES 2.0中的函数,而不用去管函数指针相关的所谓的函数决议的问题(Function Resolution), 因此达到一种跨平台开发的效果。
3. 后续
接下来尝试用上述中提到第3种方式,实现以下前面几篇文章中QtOpenGL画曲面图的功能。😄文章来源:https://www.toymoban.com/news/detail-632769.html
4.参考链接
QT GUI: https://doc.qt.io/qt-5/qtgui-index.html
QT Graphics: https://doc.qt.io/qt-5/topics-graphics.html文章来源地址https://www.toymoban.com/news/detail-632769.html
到了这里,关于QtOpenGL--使用OpenGL绘制曲面图(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!