OpenGL
文章平均质量分 83
OpenGL相关
龚建波
熟悉C++ Qt,Python等
展开
-
Qt示例学习:OpenGL Under QML
0.前言Qt Creator 中提供了两个 QML 和 OpenGL 混合使用的示例。示例 "fbo" 是在帧缓冲对象(FBO)上渲染小部件,可以和已有的 QML Item 混合使用;示例 "opengl under qml" 是在 QML Item 渲染之前或之后绘制自定义的 OpenGL 内容,是对整个 Window 操作,和 QML Item 一起用比较麻烦,不是处于最底层就是浮在表面。在 Qt Creator 搜索 opengl under qml,或者源码示例中查找Qt 安装后示例原创 2022-05-14 16:45:19 · 2000 阅读 · 1 评论 -
Qt示例学习:Cube OpenGL ES 2.0
0.前言该示例展示了如何在 Qt 中使用 OpenGL ES 2.0 编写可鼠标操作旋转的 3D 立方体。示例整体比较简单,只需要一点点 OpenGL 基础。主要有两个点可作为学习参考,一是 Qt 封装的 OpenGL 便捷类(顶点缓冲,着色器程序等)的基本使用,二是四元数类 QQuaternion 的基本使用。在 Qt Creator 搜索 cube,或者源码示例中查找Qt 安装后示例路径:D:\QtOnline\Examples\Qt-5.15.2\opengl\cubeQt 源码路原创 2022-02-15 17:08:05 · 2958 阅读 · 0 评论 -
OpenGL with QtWidgets:屏幕坐标转世界坐标
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2022-04-04)0.前言在之前的图形绘制操作中,都是将模型顶点坐标转换为屏幕坐标进行显示。但在进行如人机交互时,可能需要将屏幕坐标转换到世界坐标,比如点击物体进行选中,如果采用射线拾取法,就需要将屏幕坐标系的点转到世界坐标系去。1.知识点先复习下顶.原创 2022-04-04 23:50:06 · 2913 阅读 · 13 评论 -
OpenGL with QtWidgets:帧缓冲/离屏渲染
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2022-03-06)0.前言(摘抄自 LearnOpenGL 教程中文版)到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebu.原创 2022-03-06 01:26:56 · 2412 阅读 · 0 评论 -
OpenGL with QtWidgets:练习之甜甜圈
甜甜圈是 《OpenGL 超级宝典》上的一个示例,用来演示面剔除和深度测试应用,原本的代码顶点和着色器部分不便于学习,我就重新写了下,略去了法线和光照相关。当我们对渲染出来的甜甜圈进行旋转的时候,会出现一些不符合预期的渲染效果,一些原本应该被遮挡的部分被渲染了出来。如果只是简单的不渲染被遮挡的背面,可以使用面剔除。因为渲染的面减少了,这也提高了性能。如果确定正面还是背面呢?OpenGL 是通过三角顶点的绕序来决定的,从观察者角度看,默认逆时针的顶点连接顺序被定义为三角形的正面,同时面剔除默认是剔原创 2022-02-22 23:58:10 · 3574 阅读 · 3 评论 -
OpenGL with QtWidgets:使用Assimp库加载模型
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2021-10-19)0.前言教程加载模型这一章节主要是讲 Assimp 库的基本使用,所以本文就记录下 Assimp 使用 VS2019 编译,以及在 Qt 中的基本使用。1.Assimp 下载与编译源码可以直接去 github 下载(搜 assimp.原创 2021-10-20 00:08:28 · 1441 阅读 · 1 评论 -
OpenGL with QtWidgets:投光物、多光源
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2021-10-2)0.前言上一节学习了材质和光照贴图(https://gongjianbo1992.blog.csdn.net/article/details/120397134),教程接下来讲了投光物和多光源。1.知识点投光物就是在基础光照的内容上..原创 2021-10-02 15:26:59 · 292 阅读 · 0 评论 -
OpenGL with QtWidgets:材质、光照贴图
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2021-9-20)0.前言上一节学习了基础光照(https://mp.csdn.net/mp_blog/creation/editor/106005766),教程接下来讲了材质和光照贴图。1.知识点如果我们想要在OpenGL中模拟多种类型的物体,我们必.原创 2021-09-21 00:13:41 · 473 阅读 · 0 评论 -
OpenGL DSA(Direct State Access)
前言直接状态访问( DSA ) 是一种修改 OpenGL 对象而无需将它们绑定到上下文的方法。这允许在本地上下文中修改对象状态,而不会影响应用程序所有部分共享的全局状态,即直接访问一个对象的状态而不需要绑定到全局状态机上。它还使 API 更加面向对象,因为可以清楚地识别修改对象状态的函数。在 2014 年发布的 OpenGL4.5 标准,ARB_direct_state_access 扩展进入核心。在没有 DSA 的时代,需要按照状态机模式 bind 对象为当前操作对象后在进行全局操作。文档:h原创 2021-07-26 03:37:18 · 835 阅读 · 0 评论 -
OpenGL with QtWidgets:练习之绘制2D波浪进度球
接上次的环形进度条练习:环形进度条1.实现思路在上次环形进度条的基础上稍加改进,通过调节着色器颜色绘制的波浪进度球。文本绘制:使用 Qt 自带的 QPainter 绘制,由于是平面图,没有自己做纹理或者字体。抗锯齿:还是使用的smoothstep 算过渡值,这也导致 shader 代码有点臃肿。圆形绘制:根据坐标到中心距离来填充不同的颜色,波浪也是根据幅度来填充不同的颜色,后面打算用几何着色器改一改。存在的两个问题:1.1.这里面有个比较麻烦的就是多个色块之间的抗锯齿,目前还没.原创 2021-05-05 20:01:17 · 867 阅读 · 4 评论 -
OpenGL固定管线设置投影矩阵
0.前言OpenGL如果没有设置投影矩阵,默认使用一个坐标范围在[-1.0,1.0]的正交投影。如果使用固定管线编程时要切换投影矩阵,步骤如下://切换当前矩阵为投影矩阵glMatrixMode(GL_PROJECTION);//将当前矩阵置为单位矩阵,即抛弃之前的更改//OpenGL是状态机,会保存之前的状态glLoadIdentity(); //设置投影矩阵//如:设置为正交投影//void glOrtho(GLdouble left, GLdouble right, GLdou原创 2020-07-05 23:57:35 · 948 阅读 · 0 评论 -
OpenGL with QtWidgets:练习之绘制2D环形进度条
1.实现思路这里主要涉及几个点:绘制圆环,绘制文字,动画,抗锯齿。绘制圆环网上有些人是计算好圆边的顶点后传入的,我这里直接在片段着色器里根据距离圆心的距离来渲染的圆环。void main(){ float len = abs(sqrt(pow(thePos.x,2)+pow(thePos.y,2))); float alpha = abs(len-0.75); alpha = (alpha>0.15)?0.0:1.0; FragColor = vec4(原创 2020-05-10 22:04:33 · 1636 阅读 · 11 评论 -
OpenGL with QtWidgets:基础光照
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言上一节学习了基础光照(https://blog.csdn.net/gongjianbo1992/article/details/104176837),教程在本节主要讲了冯氏光照模型,代码在上一节的基础上修改。1.知识点现实世界的光照是极其复杂的,OpenGL的光照使用的是简化的模型,其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯原创 2020-05-08 23:23:29 · 491 阅读 · 0 评论 -
OpenGL with QtWidgets:光照颜色
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言前面学习了LearnOpenGL的入门章节,本文开始学习光照 (Lighting) 的颜色 (Colors)。1.如何实现颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。我们在现实生活中看到...原创 2020-02-04 23:48:07 · 633 阅读 · 0 评论 -
OpenGL with QtWidgets:练习之扑克翻转
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2020-2-4,并在 2021-9-5进行了更新)1.实现思路(本来想拿扑克的正反面来做练习,奈何没找到免费的资源图片,白嫖不易,于是拿两张明星图片来代替了)代码主要参考教程 "坐标系统" 一节的源码,把顶点坐标和纹理坐标传递给着色器,然后旋转model..原创 2020-02-04 10:15:38 · 654 阅读 · 1 评论 -
OpenGL with QtWidgets:摄像机
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言上一篇笔记记录了坐标系统:https://blog.csdn.net/gongjianbo1992/article/details/104131776,本文将学习Camera摄像机。1.如何实现观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观...原创 2020-02-02 13:37:31 · 729 阅读 · 0 评论 -
OpenGL with QtWidgets:坐标系统
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言上一篇笔记记录了利用矩阵变换来对所有顶点进行变换(Transform):https://blog.csdn.net/gongjianbo1992/article/details/104121687,本文将学习OpenGL坐标系统。OpenGL希望在每次顶...原创 2020-02-01 12:50:56 · 1204 阅读 · 0 评论 -
OpenGL with QtWidgets:变换
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2020-1-31,并在 2021-8-14进行了更新)0.前言上一篇笔记记录了纹理(Texture)使用:https://blog.csdn.net/gongjianbo1992/article/details/104119033,本文将学习变换(Trans..原创 2020-01-31 12:29:57 · 394 阅读 · 0 评论 -
OpenGL with QtWidgets:纹理
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言上一篇笔记记录了OpenGL在QtWidgets中的使用:https://blog.csdn.net/gongjianbo1992/article/details/104113006,本文将学习纹理(Texture)的使用。1.知识点根据教程所述,...原创 2020-01-30 23:59:49 · 545 阅读 · 0 评论 -
OpenGL with QtWidgets:在Qt中使用OpenGL绘制一个三角形
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/)0.前言LearnOpenGL教程目前使用的是glfw+glad的方式来使用OpenGL,而在Qt Widgets框架中也封装了相应的类,并且配合其他工具类,操作起来更加方便。1.如何实现在Qt旧版本中,提供有QGLWidget类,从Qt5.4开始提供了QO...原创 2020-01-30 11:21:41 · 2754 阅读 · 0 评论 -
Qt Quick OpenGL学习笔记:通过FBO帧缓冲绘制一个三角
0.前言Qt Creator 上提供了一些在 Qt Quick 程序中使用 OpenGL 的示例,本文主要参考示例 "fboitem"。搜索示例 "fbo",有两个QQuickFramebufferObject 相关的 demo,演示了如何运用 Qt 帧缓冲对象渲染QML 小部件。(之前学习这个 demo 时很多东西还没理解,现在把代码重新整理了下)1.知识点(主要翻译自 Qt 文档)QQuickFramebufferObject 继承自 QQuickItem,该类型使得我们可...原创 2020-01-29 17:23:17 · 4118 阅读 · 1 评论 -
LearnOpenGL学习笔记:纹理
( 本文对应学习章节:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/)0.前言之前我们是用顶点和颜色来完成几何图形的绘制,但是遇到复杂的图形就会变得很复杂,这时候纹理(Texture)就登场了。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。因为我们可以在一张图片上插入...原创 2019-11-19 15:26:07 · 628 阅读 · 3 评论 -
LearnOpenGL学习笔记:着色器
( 本文对应学习章节:https://learnopengl-cn.github.io/01%20Getting%20started/05%20Shaders/)0.前言在之前绘制三角形的章节中已经初步了解了着色器和着色器语言。在本章节中,教程进一步讲解着色器和着色器语言GLSL,及相关的数据类型,参数传递等。在最后,封装了一个简易的着色器类,简化主体流程。1.了解着色器与着色器语言...原创 2019-11-11 13:43:04 · 374 阅读 · 0 评论 -
LearnOpenGL学习笔记:第一个三角形
( 本文对应学习章节:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/)0.前言本章节主要介绍了VAO/VBO以及顶点着色器/片段着色器,并绘制了一个三角形。1.重要的东西在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作...原创 2019-11-07 17:13:17 · 584 阅读 · 0 评论 -
VS2019 OpenGL配置环境并创建第一个窗口
( 本文为LearnOpenGL教程的学习记录及拓展学习,教程链接:https://learnopengl-cn.github.io/)0、前言创建OpenGL上下文通常需要编写特定于平台的代码才能创建窗口。它还需要从该上下文手动加载OpenGL函数。这些工具在大多数情况下提供了跨平台的解决方案,极大地简化了这些任务。LearnOpenGL教程使用GLFW创建上下文和窗口,使用GLAD来...原创 2019-11-03 14:12:27 · 4416 阅读 · 5 评论