![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
learn opengl with Qt
Italink
瞳閉 & 心開
展开
-
Qt 脚本引擎实现思路
#include <QApplication>#include <QtDebug>#define SP_VALUE(type,name) \ Q_PROPERTY(type name READ get_##name) \ inline type get_##name() { return name; };\ type nameclass Value :public QObject{ //参数类 Q_OBJECTpublic:.原创 2021-05-11 15:13:25 · 1224 阅读 · 0 评论 -
Learn OpenGL with Qt——必备知识(易出错导致绘图失败的地方)
OpenGL Context(上下文)的概念:如果你使用过Qt的QPainter类的话,可能理解起来会简单一点,QPainter需要一个参数(PaintDevic)原创 2020-08-16 19:25:42 · 2773 阅读 · 0 评论 -
OpenGL——使用几何着色器绘制平滑(bezier)曲线
效果图:顶点数据 float vertices[]={ -0.6f, -0.8f, 0.0f, //首尾填充 -0.6f, -0.8f, 0.0f, -0.4f, -0.3f, 0.0f, -0.2f, -0.5f, 0.0f, 0.0f, 0.4f, 0.0f, 0.2f, 0.4f, 0.0f, 0.3f, 0.1f, 0.0f,原创 2020-06-17 18:40:00 · 3573 阅读 · 1 评论 -
水纹(涟漪)特效壁纸——程序+实现原理
waitting原创 2020-06-01 18:27:19 · 1954 阅读 · 5 评论 -
Learn OpenGL with Qt——加载3D模型
模型现在是时候着手启用Assimp,并开始创建实际的加载和转换代码了。我们重新创建一个项目,回忆一下是否还能想起如何创建opengl窗口?——创建新项目(ModelLoading)——以QWidget为基类,取消勾选创建界面——修改Widget公有继承自QOpenGLWidget,QOpenGLExtraFunctions(注意引入头文件)——实现三个虚函数——在initializeGL中初始化opengl——在paintGL中清屏——在resizeGL中设置Viewpo..原创 2020-05-25 17:55:57 · 8128 阅读 · 39 评论 -
Learn OpenGL with Qt——模型加载:Qt搭建Assimp环境
Assimp到目前为止,我们已经在所有的场景中大面积滥用了我们的容器盒小盆友,但就是容器盒是我们的好朋友,时间久了我们也会喜新厌旧。一些图形应用里经常会使用很多复杂且好玩儿的模型,它们看起来比静态的容器盒可爱多了。但是,我们无法像定义容器盒一样手动地去指定房子、货车或人形角色这些复杂模型的顶点、法线和纹理坐标。我们需要做的也是应该要做的,是把这些模型导入到应用程序中,而设计制作这些3D模型的工作应该交给像Blender、3DS Max或者Maya这样的工具软件。那些3D建模工具,可以让美工们构建一些原创 2020-05-24 20:38:08 · 6100 阅读 · 39 评论 -
Learn OpenGL with Qt——投光物
投光物我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。在这一节中,我们将会讨论几种不同类型的投光物。学会模拟不同种类的光源是又一个能够进一步丰富场景的工具。我们首先将会讨论定向光(Directional Light),接下来是点光源(Point Light),它是我们之前学习的光源的拓展,最后我们将会讨论聚光(Spotlight)。在下一节中我们将讨论如何将这原创 2020-05-20 15:07:50 · 799 阅读 · 0 评论 -
Learn OpenGL with Qt——光照贴图
光照贴图在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个物体的视觉输出提供足够多的灵活性。在上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽,所以它没有镜面高光,轮毂非常闪亮(如果你洗车了的话)。汽车同样会有漫反射和环境光颜色,它们在整个物体上也不原创 2020-05-18 21:12:45 · 927 阅读 · 1 评论 -
Learn OpenGL with Qt——模板测试
先上代码,教程等更新到此是再细说:widget.h#ifndef WIDGET_H#define WIDGET_H#include "camera.h"#include <QOpenGLWidget>#include <QOpenGLExtraFunctions>#include <QOpenGLBuffer>#include <QOpenGLShaderProgram>#include <QOpenGLVertexArray原创 2020-05-17 15:58:22 · 652 阅读 · 0 评论 -
Learn OpenGL with Qt——基础光照
基础光照现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子:环境光原创 2020-05-16 14:02:02 · 1806 阅读 · 10 评论 -
Learn OpenGL with Qt——颜色
颜色、在前面的教程中我们已经简要提到过该如何在OpenGL中使用颜色(Color),但是我们至今所接触到的都是很浅层的知识。本节我们将会更深入地讨论什么是颜色,并且还会为接下来的光照(Lighting)教程创建一个场景。现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异。颜色可以数字化的由红色(Red原创 2020-05-15 12:29:09 · 1526 阅读 · 3 评论 -
Learn OpenGL with Qt——完美的Qt摄像机
摄像机前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。本节我们将会讨论如何在Qt中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘和鼠标输入,最终完成一个带有摄像机的窗口。摄像机/观察空间当我们讨论摄像机/观察空间(Camera/View Space)的原创 2020-05-10 13:02:56 · 7333 阅读 · 14 评论 -
Learn OpenGL with Qt——坐标系统
坐标系统在上一个教程中,我们学习了如何有效地利用矩阵的变换来对所有顶点进行变换。OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将这些坐标变换为...原创 2020-05-08 11:16:18 · 3413 阅读 · 4 评论 -
Learn OpenGL with Qt——变换
变换尽管我们现在已经知道了如何创建一个物体、着色、加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣。我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的处理时间。我们现在有一个更好的解决方案,使用(多个)矩阵(Matrix)对象可以更好的变换(Transform)一个物体。当然,这并不是说我们会去讨论武术和数字虚拟世界(译注...原创 2020-05-07 12:39:07 · 2512 阅读 · 0 评论 -
Learn OpenGL with Qt——纹理
我们了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。艺术家和程序员更喜欢使用纹理(Texture)。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸...原创 2020-05-05 13:06:30 · 4186 阅读 · 2 评论 -
Learn OpenGL with Qt——你好,三角形
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。笔者注:代码里也有管线?图形渲...原创 2020-05-03 15:11:26 · 4078 阅读 · 8 评论 -
Learn OpenGL with Qt——创建窗口
QOpenGLWidgetQt5.4之前,Qt可以通过一个QGLWidget类来创建opengl窗口,但由于opengl的发展,在5.4版本的时候,Qt提供了一个QGLWidget的现代替代品——QOpenGLWidget。因此,这个教程使用的是QOpenGLWidget来创建和管理窗口。创建opengl窗口只需新建类继承于QOpenGLWidegt,再实现QOpenGL提供的三个虚...原创 2020-05-03 12:37:28 · 3503 阅读 · 4 评论 -
Learn OpenGL with Qt——OpenGL简述
OpenGL在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数该如何...原创 2020-05-03 10:07:13 · 1735 阅读 · 0 评论 -
Learn OpenGL with Qt—— 简介
笔者序言笔者最近在通过learnopengl网站学习opengl,但这个系列的教程使用的是原生的openGL函数以及GLFW来管理窗口,而Qt对OpenGL有着很好的支持,可惜的是网络上关于Qt 现代OpenGL的教程比较匮乏,因此笔者打算通过使用Qt来制作一期openGL的教程,内容板块与learnopengl一致。欢迎来到OpenGL的世界欢迎来到OpenGL的世界。这个工程...原创 2020-05-03 09:14:02 · 1651 阅读 · 0 评论