OpenGL学习笔记(三):了解管线、VAO、VBO的关系,介绍Qt如何使用OpenGL

简介: OpenGL学习笔记(三):了解管线、VAO、VBO的关系,介绍Qt如何使用OpenGL

原博主博客地址:http://blog.csdn.net/qq21497936

本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78762511


《OpenGL学习笔记》系列博客目录地址:http://blog.csdn.net/qq21497936/article/category/7315532


OpenGL学习笔记(三):了解管线、VAO、VBO的关系,介绍Qt如何使用OpenGL


前话

       经常看到技术需求当中有opengl,所以有时间就介绍并学习下opengl,opengl对于Qt来说只是窗口不一样,其调用的实际函数都是opengl的原生函数,所以这可以说学会opengl是完全意义上的一通百通,OpengGL经过了版本更新在编码方式上发生了很大的变化,从最开始的管线到后续的VAO和VBO,在这个过程中Qt的版本升级也对不同版本的opengl进行了一些封装。

渲染管线

       在OpenGL中任何事物都在3D空间中,但是屏幕和窗口是一个2D像素阵列,所以OpenGL的大部分工作都是关于如何把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线完成的。图像渲染管线可以被划分为两个主要部分:第一个部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。

  渲染管线接收一组3D坐标,然后把它们转变为你屏幕上的有色2D像素。渲染管线可以被划分为几个阶段,每个阶段需要把前一阶段的输出作为输入。所有这些阶段都是高度专门化的,它们能简单地并行执行。由于它们的并行执行的特征,当今大多数显卡都有成千上万的小处理核心GPU,在GPU上为每一个阶段运行各自的小程序,从而在图形输送管道中快速处理你的数据。这些小程序叫做着色器。有些着色器允许开发者自己配置,用我们自己写的着色器替换默认存在的。这样我们就可以更细致地控制渲染管线的特定部分,因为它们运行在GPU上,所以它们也会节约宝贵的CPU时间。着色器是用OpenGL着色器语言(OpenGL Shading Language)GLSL写成的。

VAO和VBO

       OpenGL抛弃glEnable(),glColor(),glVertex(),glEnable()这一套流程的函数和管线以后,就需要一种新的方法来传递数据到Graphics Card来渲染几何体,我们可以用VBO, 在3+版本我们可以使用VAO和VBO。

       VAO(VertexArray Object-VAO)是一个对象,其中包含一个或者更多的VBO。  

       VBO(VertexBuffer Objects)是GraphicsCard中的一个内存缓冲区,用来保存顶点信息,颜色信息,法线信息,纹理坐标信息和索引信息等等。

GLWidget与QOpenGLWidget

       GLWidget与QOpenGLWidget类都是OpenGL图形渲染控件。重写其paintGL(),resizeGL(),initializeGL()三个函数。

       initializeGL() 设置OpenGL渲染上下文,定义了显示列表,等会调用一次,第一次调用resizeGL()或paintGL()之前调用,一般是加载顶点数据,着色器数据和一些初始化的工作。

       resizeGL() 设置OpenGL视口,投影,等被当部件已调整大小(也可以当它是第一次因为所有新创建的控件会自动调整大小事件),一般是调整GL视图的大小,窗口大小变化后需要重置OpenGL的视图窗口大小。

       paintGL() 渲染OpenGL场景。每当需要更新小部件时调用,即OpenGL画图都在此类当中,调用updateGL(QGLWdiget使用)和updateBehavior(QOpenGLWidget使用)来触该函数重绘OpenGL视口。

       此两类主要是使用gl和glu函数编程。

QGraphicsScene

       QGraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QgraphicsView使用来观察items,例如线,矩形,文本或者自定义的items,

       QGraphicsScene提供了方便的函数来让你高效的找到items的位置,或者决定在scene上哪个item可以看到,配合QGraphicsView窗口,你可以让可见scene,或者缩放场景来可见一部分。

       此类可托管给opengl,通过opengl来显示,实际编程与gl无太多关系。

学习方向转变

       经过对以上几个相关方面的了解和从各位前辈大神请教,除了qt的场景类与opengl编程无紧密的关系外,其他三种方式都是与opengl紧密相关。

       通过对管线,vao,vbo的了解,根据大神们的建议,转向非QtOpengl的学习,下一章节开始,将会更换学习的指导教程,侧重OpengGl本身的学习,按照新的教程,一步一步学习和总结OpengGl。

       不同语言的opengl使用,只是在窗口显示,键盘鼠标捕捉等编程语言平台的区别,核心的画图,显示,动作都是opengl本身可实现的,与编程平台无关(版本有关)。

系列博客更名

       下一章节,本系列博客将会更名为《OpenGL学习笔记(四):XXXXXXXXXXXXXXX》,学习OpenGL本身。


原博主博客地址:http://blog.csdn.net/qq21497936

本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78762511


相关文章
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
508 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
3月前
|
Linux
关于linux的qt发布(linuxdeployqt)中opengl版本过高的解决
关于linux的qt发布(linuxdeployqt)中opengl版本过高的解决
|
3月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
183 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
614 4
|
3月前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
319 4
|
3月前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
61 4
|
3月前
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
338 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
205 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
69 3
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
456 3