QtOpenGL--使用OpenGL绘制曲面图(四)

这篇具有很好参考价值的文章主要介绍了QtOpenGL--使用OpenGL绘制曲面图(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的使用大致有三种方式

    1. 使用基于QOpenGLPaintDevice的QPainter绘制2D图形,可以达到硬件加速的效果;
    1. 为了提供对3.0或更高版本的桌面OpenGL的支持,在Qt5提供了一种带有版本信息提示的函数封装机制,即QOpenGLFunction_N_N类族,支持可选核心模式(core)和兼容模式(compatibilty),如我在上篇文章中使用的那样,QtOpenGL–使用OpenGL绘制曲面图(三):自定义类继承QOpenGLFunctions_4_5_Core。使用这种方式,可以很方便的开发依赖于modern,desktop-only OpenGL才特有的功能的桌面应用程序。
    1. 为了克服桌面开发和移动以及嵌入式开发的代码兼容性和一致性问题,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,这些类可以帮助实现向量矩阵之间的操作,方便实现图形的旋转,平移,缩放等各种变换。

3. 后续

接下来尝试用上述中提到第3种方式,实现以下前面几篇文章中QtOpenGL画曲面图的功能。😄

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用opengl绘制茶壶并实现鼠标拖动

    难点如下:         坐标轴绘制             选定一个原点,将坐标轴正方向和反方向的俩个点进行连线,代码及效果如上图所示(本次程序中由于渲染原因,坐标轴颜色统一为棕色)         如何实现鼠标响应         OPENGL中封存有对鼠标进行相应的函数,

    2024年01月17日
    浏览(37)
  • OpenGL超级宝典第八章学习笔记:基元处理之曲面细分

    前言 本篇在讲什么 OpenGL蓝宝书第八章学习笔记之曲面细分 本篇适合什么 适合 初学OpenGL 的小白 本篇需要什么 对 C++ 语法有简单认知 对 OpenGL 有简单认知 最好是有 OpenGL超级宝典 蓝宝书 依赖 Visual Studio 编辑器 本篇的特色 具有全流程的 图文教学 重实践,轻理论,快速上手

    2024年02月07日
    浏览(43)
  • 计算机图形学与opengl C++版 学习笔记 第12章 曲面细分

    术语Tessellation(镶嵌)是指一大类设计活动,通常是指在平坦的表面上,用各种几何形状的瓷砖相邻排列以形成图案。它的目的可以是艺术性的或实用性的,很多例子可以追溯到几千年前[TS16]。 在3D图形学中,Tessellation指的是有点不同的东西(曲面细分),但显然是由它的经

    2024年02月08日
    浏览(39)
  • 计算机图形学与opengl C++版 学习笔记 第11章 参数曲面

    在20世纪50年代和60年代在雷诺公司工作期间,皮埃尔·贝塞尔(Pierre Bézier)开发了用于设计汽车车身的软件系统。他的程序利用了Paul de Casteljau之前开发的数学方程组,后者曾为竞争对手雪铁龙汽车制造商[BE72,DC63]工作。de Casteljau方程仅使用几个标量参数描述曲线,同时使用

    2024年02月08日
    浏览(46)
  • 使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

    这篇博客将介绍如何使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓。 使用Python绘制端午dragboat消消乐 美轮美奂的界面效果 选了我最爱的小林老师的漫画图~ 纵有千种风情,更与谁人说。 端午粽子原始图VS素描图: 端午粽子

    2024年02月08日
    浏览(45)
  • Java使用Maven工程操作OpenGL ES绘制三角形和圆形;绘制完成后操作键盘控制然图形移动

    PS:想快速看到效果的小伙伴,可以在引入依赖后,先跳到完整代码部分 第一步:依赖引入 第二步:创建类,引入需要的包,设置全局参数 1.创建类 2. 包引入 3. 全局参数 第三步:定义一个初始化方法 init() 1. GLFW 错误信息的回调函数 这样做,在发生 GLFW 错误时,错误信息将

    2024年02月08日
    浏览(42)
  • Python绘制3D曲面图

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据可视化的世界中,3D曲面图是一种强大的工具,能够将复杂的数据模式以清晰直观的方式展现出来。Python提供了多种库和工具,使得创

    2024年04月28日
    浏览(36)
  • uniapp中使用原生canvas标签绘制视频帧来模拟拍照,拍照后将图绘制在另外一个canvas上编辑画图,这样反复操作

    uniapp中使用原生canvas标签绘制视频帧来模拟拍照,拍照后将图绘制在另外一个canvas上编辑画图,这样反复操作会导致ios系统上白屏,canvas2d上下文为null,经查阅找到相关资料 IOS 创建Canvas过多导致getContext(‘2d’) 返回null 总 Canvas 内存使用超过最大限制 (Safari 12) 从一个 bug 中延伸

    2024年02月10日
    浏览(42)
  • 在QT中使用OPENGL的步聚

    OPENGL初始化:   初始化OpenGL函数 : initializeOpenGLFunctions 初始化各种flag :  glEnable 创建各种缓存对象 : VAO,VBO 创建并链接shader :  QOpenGLShaderProgram::addShaderFromSourceCode  QOpenGLShaderProgram::Link 启用shader :  QOpenGLShaderProgram::bind 启用缓存 :     m_vao.bind(); 绑定缓存(加载不变的数据)

    2024年02月09日
    浏览(33)
  • 使用OpenGL 和 opengl ES 渲染YUV图片文件的QT示例

    头文件:CPlayWidget.h cpp文件:CPlayWidget.cpp 默认打开 ./test.yuv文件 头文件:CPlayWidget.h  与上面没有差别 cpp文件:只替换了着色器代码:

    2024年01月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包