![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
qt之opengl入门学习
文章平均质量分 82
qt之opengl入门学习、qt环境使用的qt5.14
诺谦
热爱生活 活在当下
展开
-
16.opengl-qt 基础光照
学习链接:基础光照 - LearnOpenGL CN环境光照(Ambient Lighting):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。漫反射光照(Diffuse Lighting):模拟光源对物体的方向性影响(Directional Impact)。它是冯氏光照模型中视觉上最显著的分量。物体的某一部分越是正对着光源,它就会越亮。镜面光照(Specular Lig.原创 2022-03-27 03:24:45 · 1391 阅读 · 2 评论 -
15.opengl-qt 颜色(光照前述)
参考链接:颜色 - LearnOpenGL CN1.颜色我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。比如太阳光能被看见的白光其实是由需要不同的颜色组合而成的, 如果我们将白光照在一个蓝色的玩具上,这个蓝色的玩具会吸收白光中除了蓝色以外的所有子颜色,不被吸收的蓝色光被反射到我们的眼中,让这个玩具看起来是蓝色的。对应代码如下所示:QVector3D lightColor(1, 1, 1);QVector3D toyColor(1,.原创 2022-03-26 00:58:37 · 844 阅读 · 0 评论 -
14.opengl-qt显示多个立方体(添加摄像机)
参考摄像机 - LearnOpenGL CN本章demo效果如下所示(代码已上传至opengl技术交流群:929155430):1.摄像机介绍摄像机用来在3D场景中随意移动的东西,需要用到鼠标和键盘输入来控制摄像机方向和姿态.如下图所示:2.实现一个摄像机首先定义一个摄像机位置,然后获取一个摄影机指向原点的向量,并且获取指向摄像机的单位向量(只关心摄像机的方向,不关心其长度).代码如下所示:QVector3D cameraPos(0, 0, 3);QVector3.原创 2022-03-23 23:59:30 · 1347 阅读 · 0 评论 -
13.opengl-qt显示多个立方体(旋转、渐变)
首先给我们要显示的立方体们定一个规则:每个立方体旋转速度不同 每个立方体旋转的方向不同(并且碰到边界会反弹回来) 每个立方体位于观察者距离不同 每个立方体旋转时的颜色会跟着改变 立方体支持随意添加和删除运行效果如下所示(代码已上传至opengl技术交流群:929155430):需要注意的是:由于物体离我们距离越远,那么视野越宽阔,则它的可移动范围就越大,所以我们计算边界时需要根据Z值来调整物体的边界值.代码实现定义一个Cube立方体类代码如下所示:cla原创 2022-03-23 04:54:56 · 860 阅读 · 0 评论 -
12.opengl-显示一个立方体
1.设置3D场景显示物体实现3D场景少不3样矩阵:模型矩阵(model): 对一个物体如何进行摆放等,其本质就是平移、旋转和缩放 观察矩阵(view): 让物体位于观察者哪个地方 投影矩阵(projection):一般使用透视投影,让物体显示的更加真实(投影中心无变形,离中心越远变形越大)从群文件中下载我们之前的代码(10.opengl-2D物体旋转移动_code5).然后修改顶点着色器源码:// aPos: 顶点坐标// aColor: 顶点颜色// aTexCoord: 纹理坐标原创 2022-03-23 02:40:21 · 911 阅读 · 0 评论 -
11.opengl-正射投影和透视投影源码分析
由于OpenGl每次都会将物体都是变换为屏幕上的二维来显示,所以少不了坐标变换(将3D处理在2D上显示),然后并进行裁剪处理(显示范围之外的点都被裁剪掉(Clipped)),默认的可见坐标是-1.0~1.0,假如我们想自己显示投影的部分,那么就需要投影矩阵,通过投影矩阵可以创建一个观察箱(Viewing Box),又称为平截头体(Frustum),那么所有出现在观察箱里的顶点都会显示在屏幕上,创建一个投影矩阵有两种不同方法:正射投影矩阵(Orthographic Projection Matrix)或一原创 2022-03-22 19:59:26 · 2489 阅读 · 0 评论 -
10.opengl-2D物体旋转移动
在上章9.opengl-对qt中的QMatrix4x4进行矩阵实践_诺谦的博客-CSDN博客学习了矩阵如何使用.本章来学习如何通过矩阵让我们之前显示的物体进行移动.本章我们要实现一个2D物体在平面上不停的旋转+平移.效果如下所示:需要用的到函数如下所示:int QOpenGLShaderProgram::uniformLocation(const char *name);//获取着色器代码中的uniform变量位置值(本章用来获取着色器代码中的矩阵变量的位置值,方便我们传递矩阵值进原创 2022-03-21 22:48:54 · 1066 阅读 · 0 评论 -
9.opengl-对qt中的QMatrix4x4进行矩阵实践
在上章8.opengl-矩阵总结(平移、缩放、旋转)_诺谦的博客-CSDN博客我们学习了矩阵基础知识,现在我们就运用在代码上瞧瞧.1.Qt中的矩阵类在QT中,提供的矩阵类有4种:QMatrix用来实现2D空间的一个2X2矩阵、并且提供了旋转、缩放、位移等函数给我们使用,由于它只有2X2,所以并不支持透视变换(因为没有多余的参照元素)QTransform用来实现2D空间的一个3X3矩阵、并且提供了旋转、缩放、位移等函数给我们使用,QTransform 与 QMatrix 的不同之处在于原创 2022-03-21 20:32:15 · 4399 阅读 · 0 评论 -
8.opengl-矩阵总结(平移、缩放、旋转)
参考链接:变换 - LearnOpenGL CN矩阵与标量加减当一个矩阵与标量(一个数字)运算时,实际是对矩阵的每个元素和该标量进行运算,比如+为例:同样的减法也是类似.矩阵与矩阵加减矩阵与矩阵进行加减运算,就是对里面的每个元素进行加减.注意:必须是相同维度矩阵才行,比如2*3矩阵不能和3*3矩阵进行加减.如下所示:同样的减法也是类似.矩阵与标量数乘矩阵与标量数乘和矩阵与标量加减类似, 实际是对矩阵的每个元素和该标量进行相乘,如下图所示:.原创 2022-03-21 20:14:45 · 1797 阅读 · 0 评论 -
7.opengl-向量总结
向量与标量运算当一个向量与标量(一个数字)运算时,实际是对向量的每个分量进行运算,比如加法为例:向量取反向量取反实际是对向量的每个分量进行取反,从而让向量的方向进行逆转:向量加减两个向量进行加减,实际就是对每个分量进行加减,如下图所示:两个向量相加得到: 首尾相连,方向从首连到尾(由于a向量等于DC,所以a+b = (AD)+(DC)=(AC))两个向量相减得到: 需要将两个向量的起始点移到共同点,然后相减得出由减向量b的末尾指向由被减向量a的末尾位置..原创 2022-03-20 20:22:55 · 773 阅读 · 0 评论 -
6.opengl-EBO索引缓冲对象使用
1.介绍如果我们要通过两个三角形来绘制一个正方形,而正方形的顶点只有4个,而两个三角形的顶点却有6个,这意味着有两个顶点是重合了,所以为了避免额外开销,opengl提供了ebo索引缓冲对象(Element Buffer Object)。2.ebo使用首先定义顶点数组和索引号数组,代码如下所示: float vertices[] = { 0.5f, 0.5f, 0.0f, // 右上角 0.5f, -0.5f, 0.0f, // 右下角原创 2022-03-19 20:47:37 · 1069 阅读 · 0 评论 -
5.opengl-变量修饰符
3.00上支持的存储变量修饰符变量名称作用示例const编译过程常量,或者函数的只读参数const vec3 zAxis = vec3 (0.0, 0.0, 1.0);in用于连接 shader 的上一阶段;centroid 为质心采样关键字,用于避免伪像,不可用于顶点着色器;顶点着色器中的 out 和片段着色器中的 in 名称相...原创 2020-11-02 16:43:00 · 151 阅读 · 0 评论 -
4.QOpenGLWidget-对三角形进行纹理贴图、纹理叠加
在上章3.QOpenGLWidget-通过着色器来渲染渐变三角形,我们为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销。所以使用纹理(Texture)。纹理是一个2D图片(甚至也有1D和3D的纹理),你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了.下面你会看到之前教程的那个三角形贴上了一张砖墙图片:除了图像以外,纹理也可以被用来原创 2021-09-09 17:40:06 · 1137 阅读 · 0 评论 -
3.QOpenGLWidget-通过着色器来渲染渐变三角形
在上章2.通过QOpenGLWidget绘制三角形,我们学习绘制三角形还是单色的,本章将为三角形每个顶点着色.1.着色器描述着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。如果你不知道什么是uniform也不用担心,我们后面会进行讲解。一个典型的着色器有下面的结构...原创 2020-10-13 19:37:00 · 852 阅读 · 0 评论 -
2.通过QOpenGLWidget绘制三角形
参考:1.opengl绘制三角形1.QOpenGLWidget的早先版本QGLWidget是遗留Qt OpenGL模块的一部分,和其他QGL类一样,应该在新的应用程序中避免使用。相反,从Qt 5.4开始,最好使用QOpenGLWidget和QOpenGL类。如果开发XP平台,由于兼容性问题,Qt5.4(不含)之后的QtOpenglWidget 则不兼容,建议还是用QGLWidget.2.QOpenGLWidget类是用于呈现OpenGL图形的部件 QOpenGLWi...原创 2021-09-09 17:31:16 · 1055 阅读 · 0 评论 -
1.opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO,用于存储顶点状态配置信息,每当界面刷新时,则通过VAO进行绘制. 顶点缓冲对象:Vertex Buffer Object,VBO,通过VBO将大量顶点存储在GPU内存(通常被称为显存)中1.渲染步骤下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。注意:片段着色器也称为片元着色器顶点着色器(Vertex Shader)顶点着色器主要的目的是把3D坐标转为另一种3D原创 2021-09-09 17:26:33 · 1430 阅读 · 0 评论