Qt OpenGL核心模式
文章平均质量分 81
OpenGL的入门或者上手,不是很方便,我写这个专栏的目的,就是希望大家能快速入门OpenGL,上手做项目,不用像我一开始学习的时候走很多的弯路。由于Qt对OpenGL有着良好的封装,特别利于入门学习OpenGL,所以我就在Qt的平台上写这个专栏了,同时也需要你有点C++的底子。
冯一川
如果理论和现实出现冲突的时候,我们一般认为理论错了。你好,我是冯一川,这是我最喜欢的一句话。
展开
-
Qt OpenGL 核心模式版本文章目录
其实,本文应该写在本系列的第一篇,便于需要的小伙伴查阅。所以,现在觉得还是应该补充一篇目录的文章。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。后续本系列更新的文章,我也将在本篇文章里更新目录。原创 2023-01-08 18:12:24 · 3081 阅读 · 1 评论 -
Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)
通过上面的图片,我们可以看到,在GLSL语法中,变量分为Transparent type(透明类型)和Opaque type(不透明类型)。冯一川注:GLSL其实也是不断迭代的,比如像3.3版本中,基本数据类型浮点型只支持float型,而GLSL4.0版本开始就有double型数据的支持了,所以本系列GLSL部分以GLSL4.5版本为例介绍。GLSL中,矩阵通常有2×2, 2×3, 2×4, 3×2, 3×3, 3×4, 4×2, 4×3, 和 4×4几种。不透明类型,专门用来进行纹理采样的相关操作。原创 2023-06-04 14:40:13 · 1080 阅读 · 2 评论 -
Qt OpenGL(四十一)——Qt OpenGL 核心模式-GLSL(一)
这意味着色器可以做一些常规程序做不到的事情。在管线的不同阶段运行的着色器也不同。我们主要关注的就是顶点着色器和片段着色器。而着色器则使用被称为“着色器语言”的编程语言编写,着色器语言有很多,OpenGL图形库的着色器语言叫做OpenGL Shading Language,即GLSL。这个语言很像C语言,语法也很相似,我们下一篇继续。但是,你一定要记住一点:着色器就是在GUP显卡上执行的程序。原创 2023-03-14 15:58:12 · 574 阅读 · 0 评论 -
Qt OpenGL(四十)——Qt OpenGL 核心模式-雷达扫描效果
绘制由给定矩形、startAngle开始角度和spanAngle跨度角度的饼图,饼图有当前设置的画刷填充。startAngle开始角度和spanAngle跨度角度必须是角度的1/16,即整个圆等于5760(16*360),角度正值表示顺时针,角度负值表示逆时针。三点钟方向表示0度。实现这个效果的本质就是使用了Qt的渐变效果,平常的Qt的项目中绘制QPushButton也会使用到渐变效果。drawPie的rectangle坐标和角度,应如下图所示。绘制的函数主要使用QPainter类中的drawPie函数。原创 2023-02-20 08:45:00 · 1580 阅读 · 1 评论 -
Qt OpenGL(三十九)——Qt OpenGL 核心模式-在雷达坐标系中绘制飞行的飞机
严格的来说这部分是Qt的东西,但是,如果拿到OpenGL里面有点牵强,但是,可能我们的小伙伴有时候,会在雷达坐标系中有绘制这个的需求,我也就都放到这个专栏里了,方便需要的小伙伴来参考。在之前绘制完毕雷达显示图之后,这时候,我们能匹配的场景就更广泛了,比如说,我们在雷达图上绘制扫描到的点,或者是一个图形(点组成),或者是一个图片比如一个飞机的图片。基于以上的信息,你可以绘制根据判断条件,绘制不同类型的飞机,只要有相应的图片,你都可以很形象的展示扫描到的物体(静态或者动态的显示)。原创 2023-02-13 13:33:14 · 2065 阅读 · 1 评论 -
Qt OpenGL(三十八)——Qt OpenGL 核心模式-绘制彩色的点
我们可以看到点数彩色的了,只不过我用的是随机生成的,不是指定的。如果使用点云绘制彩色的时候,可能需要相应的项目场景中的算法来生成了。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。加了一组生成rgb颜色的点,这里我使用的是一组随机数,生成随机的颜色。如果,我们需要的点的绘制是彩色的呢?原创 2023-02-13 08:45:00 · 880 阅读 · 6 评论 -
Qt OpenGL(三十七)——Qt OpenGL 核心模式-动态刷新点云
我还是,在上一篇雷达坐标系的基础上,去绘制动态的点,这样雷达扫描的点就能动态实时的显示在坐标系中了,我只是简单的创造了几个点,如果你具体的项目中目标点不同,你自己再调整,我只是告诉你这个动态的点云如何去实现。绘制完这个兔子之后,可能还是不能满足我们的需求,如果我们的需求是绘制一个动态的点云,也就是说数据点是不断刷新的,这个时候才是点云真正的应用场景。上图的点云数据,实际上都是实时刷新的,所以才会有这种效果(你可以忽略图中的颜色,因为不是本篇关注的重点)。我们在绘制点云的时候,使用的代码(在。原创 2023-02-08 23:20:38 · 2070 阅读 · 0 评论 -
Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系
绘制雷达扫描坐标系的方式,你可以简单的这样思考,因为是2维的坐标系统。它就包括xy轴,然后有一圈圈表示距离的外圈,这样来看,绘制这个就很简单了。现在,日常生活中,激光雷达等测距设备已经非常广泛的应用于我们身边了,像送餐机器人、扫地机、服务机器人等,它们可以360度测距。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。这些设备采集的点云数据,对应的显示在雷达坐标系统中,就非常的合适了。有了这样的坐标系统,你就可以在上面绘制目标物了。原创 2023-02-03 08:45:00 · 1068 阅读 · 0 评论 -
Qt OpenGL(三十五)——Qt OpenGL 核心模式-点云(斯坦福兔子)
是一个数据集,数据集中的每个点代表一组X、Y、Z几何坐标和一个强度值,这个强度值根据物体表面反射率记录返回信号的强度。我以斯坦福兔子为例,来绘制点云。我们在平时的项目中,有的时候会遇到,激光雷达等这些设置采集的数据集,不管是在机器人、扫地机、还是车载激光雷达等设备上,对于测距的的数据的采集,得到的就是点云数据。一川将会在上一篇,三维坐标系的基础上,添加斯坦福兔子的绘制。可以通过鼠标滚轮的滑动对点云数据实现缩放,通过鼠标拖动,实现对三维坐标系和斯坦福兔子进行旋转。本篇绘制简单的点云数据,展示点云的绘制过程。原创 2023-02-02 08:15:00 · 2058 阅读 · 6 评论 -
Qt OpenGL(三十四)——Qt OpenGL 核心模式-旋转三维坐标系
本篇将在上一篇的基础上,让三维坐标系能实现旋转和缩放功能。在这个实现的过程中,用到了OpenGL的变换功能,这个后续,一川打算再单独写一篇,本篇就不介绍这部分了,回头我会把变换的链接贴到本片里。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。原创 2023-02-01 08:00:00 · 1299 阅读 · 1 评论 -
Qt OpenGL(三十三)——Qt OpenGL 核心模式-绘制三维坐标系
在平常的项目中,我们会遇到在界面绘制的时候,展示坐标系的需求。本篇介绍三维坐标系的绘制方法。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。在绘制三维坐标系的时候,可以由三个XYZ坐标轴加上各个坐标轴顶部的棱锥组成。原创 2023-01-31 23:10:13 · 3439 阅读 · 0 评论 -
Qt OpenGL(三十二)——Qt OpenGL 核心模式-文字
在Qt中使用OpenGL绘制文字,我们可以通过Qt提供的QPainter类来实现在OpenGLWidget界面上绘制我们需要的文字,这也是实现这个功能需求的一种方法。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。原创 2023-01-30 22:32:25 · 1574 阅读 · 0 评论 -
Qt OpenGL(三十一)——Qt OpenGL 核心模式-纹理三
本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。本篇文章会继续介绍纹理的相关内容。原创 2023-01-30 22:08:31 · 317 阅读 · 0 评论 -
Qt OpenGL(三十)——Qt OpenGL 核心模式-纹理二(给正方体贴上图片)
通过前两篇文章,我们知道了如何绘制一个正六面体和使用纹理贴图,本篇继续介绍在正方体(正六面体)上进行纹理贴图。同样的对于,一个正方体(正六面体)而言,如果每个面都贴上图片,就相当于给一个三维的物体贴上纹理图片了。本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。在核心模式下正方体的纹理贴图有点不一样,但是思路是差不多的。原创 2023-01-29 23:37:02 · 784 阅读 · 0 评论 -
Qt OpenGL(二十九)——Qt OpenGL 核心模式-纹理(给四边形贴上图片)
如上图所示,我们希望三角形的左下角对应纹理的左下角,因此我们把三角形左下角顶点的纹理坐标设置为(0, 0);也就是说我们把墙纸贴到四边形墙面上,需要确定墙纸的哪个脚对应墙面的哪个脚,如果没有对应好,可能就贴反了。你家房子装修,你想要在不同的房间贴上不同风格的墙纸,有科技感的,有雍容华贵的,还有动漫的等等,此时的墙纸就是我们所说的纹理了。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。原创 2023-01-19 14:55:33 · 1647 阅读 · 0 评论 -
Qt OpenGL(二十八)——Qt OpenGL 核心模式-绘制一个正方体(正六面体)
上一篇在介绍了使用变换矩阵的时候,一川想了想,还是得抽空写一篇变换和介绍GLSL的文章,这样才能把这写文章的知识点串起来。绘制一个正方体,我们可以这样来拆解,就是绘制六个四边形,合在一起就是一个六面体,如果每个四边形组成的面是真方形,那么这个六面体就是一个正方体了。接下来通过纹理图片,就可以完整的看到效果了。上面的代码运行之后,由于是正对着屏幕的设置,看不出来是正方体,所以,我们使用旋转矩阵,让他旋转起来,就能看出来了。截止到上一篇文章,一川想使用Qt封装的类绘制一个旋转的彩色三角形的目标就实现了。原创 2023-01-18 11:07:30 · 1309 阅读 · 0 评论 -
Qt OpenGL(二十七)——Qt OpenGL 核心模式--EBO
上篇文章,一川绘制了能旋转的彩色三角形,在之前也介绍了VAO、VBO。但是EBO这个概念没有介绍,现在经历了,前几篇文章的介绍后,该把VEO这个概念一起在熟悉一下了。在介绍之前,我们绘制一个四边形,绘制四边形和绘制三角形的步骤都是一模一样,只不过点是4个点,glDrawArrays函数的第一个参数,传入的是GL_QUADS。下面是完整的代码。原创 2022-12-14 23:12:59 · 1127 阅读 · 0 评论 -
Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形
上一篇文章我们绘制了彩色的三角形,接下来其实就应该是让这个三角形旋转起来了,但是,旋转起来之前,还是想通过Qt自己的封装类实现彩色的三角形,并且让他旋转起来。这才我(冯一川)是写这个系列的的目的,这样和Qt的代码兼容性更好。 这是上一篇文章中绘制的彩色的三角形,本篇就是使用Qt的方式绘制。不管是否使用Qt封装的类,还是使用OpenGL自己的函数,其本质都是核心模式下的绘制思路,我们先看一下上一篇文章的绘制步骤:绘制函数:步骤,就是上面的step1-11,这些内容。Qt封装的代码主要的有几个:具体原创 2022-12-05 06:00:00 · 1039 阅读 · 0 评论 -
Qt OpenGL(二十六)——Qt OpenGL 核心模式-旋转的彩色三角形
上篇文章我们把三角形上色成了,彩色的三角形: 离我们想要绘制的图形,旋转的三角形,又近了一步,本篇文章就让这个彩色的三角形旋转起来。不过从上篇开始使用的代码就是Qt封装的类了,不过也是核心模式的,步骤基本上和前几篇的都一致,你可以认为只不过是使用的函数有点不一样。如果我们要让三角形旋转起来,需要插入一个概念:变换,OpenGL中的变换包括:视图、模型、模型视图、投影、视口等。关于这部分的简单说明,大家可以查看冯一川之前的文章:OpenGL(二)——OpenGL基础知识点(一)OpenGL(三)——OpenG原创 2022-12-06 22:49:19 · 1089 阅读 · 0 评论 -
Qt OpenGL(二十四)——Qt OpenGL 核心模式-实现彩色三角形
要注意的是由于我们知道这个数组是紧密排列的(在两个顶点属性之间没有空隙)我们也可以设置为0来让OpenGL决定具体步长是多少(只有当数值是紧密排列时才可用)。一旦我们有更多的顶点属性,我们就必须更小心地定义每个顶点属性之间的间隔,我们在后面会看到更多的例子(译注: 这个参数的意思简单说就是从这个属性第二次出现的地方到整个数组0位置之间有多少字节)。中,看到了Qt关于OpenGL的例程,是一个旋转的彩色三角形,本篇文章我们就使用OpenGL核心模式,实现这个彩色三角形。和图1动态图的颜色基本是一样的。原创 2022-11-22 22:12:06 · 1129 阅读 · 0 评论 -
Qt OpenGL(二十三)——Qt OpenGL 核心模式-给三角形上色
本篇文章本来打算和上一篇文章写到一块的,但是考虑到VAO和VBO的概念是学习OpenGL核心模式绕不开的一个概念,所以单独再写一篇了,并且后面切换到使用Qt封装的VAO和VBO的时候,流程和这个也差不多,所以还是要做到理解这个概念的。今天继续分享给三角形上色。原创 2022-11-20 04:15:00 · 1252 阅读 · 0 评论 -
Qt OpenGL(二十二)——Qt OpenGL 核心模式-VAO和VBO
你只需要记住现在这些步骤就行。在调用VAO的时候,使用的函数glVertexAttribPointer函数,Attrib就是属性的意思,这个函数就是指定输入数据的哪一个部分对应顶点着色器的哪一个顶点属性。所以,VBO的作用就是在CPU和GPU之间充当一个桥梁的作用,当我们把顶点数据存到VBO,VBO就会把数据自动的送到GPU,我们不需要关心他怎么送过去的,我们只要负责往VBO中送数据就行了(使用函数实现)。上面是我们需要绘制的顶点,同时也包含顶点颜色数据,也有可能会包含纹理数据,这个以后会介绍。原创 2022-11-19 17:21:06 · 1973 阅读 · 0 评论 -
Qt OpenGL(二十一)——Qt OpenGL 核心模式绘制一个三角形的流程
上一篇文章介绍了Qt Creator中的示例,旋转的三角形。本篇介绍通过OpenGL核心模式的代码实现绘制三角形,稍后会通过Qt封装的OpenGL核心模式的代码(即OpenGL 3.2及之后的版本)实现旋转的三角形。接下来的几篇会实现上一篇中的会旋转的彩色三角形。在OpenGL3.2版本之前,OpenGL使用的都是固定渲染管线的写法,在3.2版本之后,进入核心模式之后,使用的都是图形渲染管线。渲染管线又称渲染流水线,它是图形图像从数据一步一步形成最终输出的画面所要经历的各种操作过程。原创 2022-11-04 11:06:19 · 2456 阅读 · 0 评论 -
Qt OpenGL(二十)——Qt OpenGL 核心模式版本
在之前的OpenGL教程(1~19)中,采用的方式都是固定渲染管线,也就是OpenGL3.2版本之前的写法,但是OpenGL从3.2版本开始,就鼓励使用核心模式进行开发了,其目的就是为了提高效率,增加编程的灵活性。从本篇开始,我把核心模式方法的写法分享给大家,主要还是借助以Qt开发。原创 2022-10-26 23:37:31 · 3749 阅读 · 1 评论