![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGL学习脚印
文章平均质量分 95
The fool
为每件事积极准备,争取结果的最优化.
展开
-
OpenGL学习脚印:模型加载初步-加载obj模型(load obj model)
写在前面 前面介绍了光照基础内容,以及材质和lighting maps,和光源类型,我们对使用光照增强场景真实感有了一定了解。但是到目前为止,我们通过在程序中指定的立方体数据,绘制立方体,看起来还是很乏味。本节开始介绍模型加载,通过加载丰富的模型,能够丰富我们的场景,变得好玩。本节的示例代码均可以在我的github下载。加载模型可以使用比较好的库,例如obj模型加载的库,Assimp加载库。本节作原创 2016-07-12 00:12:06 · 46283 阅读 · 16 评论 -
OpenGL学习脚印: 环境纹理映射(environment mapping)
写在前面 上一节初步学习了使用cubeMap创建天空包围盒,本节继续深入Cubemap这个主题,学习环境纹理贴图。本节示例程序均可以从我的github下载。 本节内容整理自: 1.www.learnopengl.com cubemaps环境纹理贴图同上一节的Cubemap创建天空包围盒有些类似,创建环境纹理贴图也是对当前待渲染物体,从包围的环境纹理上采样作为这个物体的纹理而渲染原创 2016-09-16 21:41:40 · 9899 阅读 · 5 评论 -
OpenGL学习脚印: 帧缓冲对象(Frame Buffer Object)
写在前面 一直以来,我们在使用OpenGL渲染时,最终的目的地是默认的帧缓冲区,实际上OpenGL也允许我们创建自定义的帧缓冲区。使用自定义的帧缓冲区,可以实现镜面,离屏渲染,以及很酷的后处理效果。本节将学习帧缓存的使用,文中示例代码均可以在我的github下载。 本节内容整理自 1.OpenGL Frame Buffer Object (FBO) 2.www.learn原创 2016-09-03 14:42:29 · 12049 阅读 · 1 评论 -
OpenGL学习脚印:背面剔除(Face Culling)
写在前面 在绘制封闭类型的几何对象时,开启背面剔除功能能够提高渲染性能。本节简要介绍下背面剔除。什么是背面剔除当我们观察场景中对象时,一般只能以一定角度来观察,那么对象的某些面我们是看不到的,例如你观察一个立方体,最多只能同时看到3个面,有时只能看到1个面,而我们绘制时如果不采取剔除背面的措施,则要绘制6个面,其中包括一些,我们根本看不到的面。对于立方体这个面较少的几何对象,性能开销不明显原创 2016-08-21 14:56:46 · 15667 阅读 · 0 评论 -
OpenGL学习脚印:立方体纹理和天空包围盒(Cubemaps And Skybox)
写在前面 之前学习了2D纹理映射,实际上还有其他类型的纹理有待我们进一步学习,本节将要学习的立方体纹理(cubemaps),是一种将多个纹理图片复合到一个立方体表面的技术。在游戏中应用得较多的天空包围盒可以使用cubemap实现。本节示例程序均可以在我的github下载。 本节内容整理自: 1.Tutorial 25:SkyBox 2.www.learnopengl.原创 2016-09-11 22:14:44 · 17724 阅读 · 6 评论 -
OpenGL学习脚印:混色(Blending)
写在前面 上一节学习了使用模板缓冲来制作特殊效果,本节将继续学习一个高级主题-混色(Blending)。通过使用混色,我们可以制作透明、半透明效果。本节示例代码均可以在我的github下载。 本节内容整理自www.learnopengl.com blending.混色的概念所谓混色,就是将当前要绘制的物体的颜色和颜色缓冲区中已经绘制了的物体的颜色进行混合,最终决定了当前物体的颜色。例如下原创 2016-08-21 00:00:37 · 4475 阅读 · 0 评论 -
OpenGL学习脚印: 视变换(view transformation)
写在前面 OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等内容,这个主题的内容有些多,因此分节学习,主题将分为5节内容来学习。上一节模型变换,本节学习模型变换的下一阶段——视变换。到目前位置,主要在2D下编写程序,学习了视变换后,我们可以看到3D应用的效果了。本节示例程序均可在我的github下载。通过本节可以了解到视变换的概念索引绘制立方体LookAt矩阵的推导(对原创 2016-06-03 17:44:44 · 21190 阅读 · 7 评论 -
OpenGL学习脚印:光源类型和使用多个光源(Light source and multiple lights)
写在前面 上一节光照中使用材质和lighting maps介绍了使用材质属性和lighting maps使物体的光照效果能反映物体的材料特性,看起来更逼真。在前面的章节中使用的实际上都是一个点光源,本节将学习其他几种光源类型,以及在场景中使用多个光源。本节代码均可以在我的github下载。 本节内容整理自: 1.www.learnopengl.com light caste原创 2016-07-09 17:11:11 · 14661 阅读 · 2 评论 -
OpenGL学习脚印: 环境搭建
OpenGL学习脚印: 环境搭建写在前面 如果你正在阅读本文,那么你和我一样可能喜欢图形学或者游戏编程,想尝试编写自己的图形App :)。图形学的初学者往往非常着急,希望能立即编写出丰富生动、逼真又富有交互性的3D应用,至少我是这样。笔者翻看了图形学教材,红宝书,3D数学基础等大部头书后,感觉到根据教材或者网络tutorial编写简单的应用程序并不困难,难点在于能够保持足够热情,坚持学习,使原创 2016-05-03 23:10:05 · 19998 阅读 · 4 评论 -
OpenGL学习脚印-AssImp模型加载
写在前面 上一节Obj模型加载作为模型加载的基础篇,介绍了模型中Mesh的概念,以及从Obj模型文件转换为OpenGL数据格式的方法。上一节绘制的结果还是很简陋,本节将给出上节承诺的酷炫的3D模型的加载方法:)。本节示例程序均可以在我的github下载。 本节内容参考自 1.www.learnopengl.com Model loading 2.Loading mode原创 2016-07-24 17:16:24 · 31635 阅读 · 44 评论 -
OpenGL学习脚印: 光照中材质和lighting maps使用(material and lighting maps)
写在前面 这一节隔了好久了,今天终于有时间写完。上一节光照基础学习实现了Phong reflection model,但是还存在不足,本节使用材质属性,以及使用diffuse map和specular map改善上一节的实现。本节示例程序均可以在我的github下载。 本节内容整理自: 1.www.learnopengl.com Materials 2.www.learnopeng原创 2016-07-03 23:56:38 · 8501 阅读 · 0 评论 -
OpenGL学习脚印:深度测试(depth testing)
写在前面 上一节我们使用AssImp加载了3d模型,效果已经令人激动了。但是绘制效率和场景真实感还存在不足,接下来我们还是要保持耐心,继续学习一些高级主题,等学完后面的高级主题,我们再次来改进我们加载模型的过程。本节将会学习深度测试,文中示例程序源代码均可以在我的github下载。 本节内容整理自 1.www.learnopengl.com Depth testing 2.de原创 2016-08-14 21:40:25 · 25414 阅读 · 3 评论 -
OpenGL学习脚印:模板测试(stencil testing)
写在前面 上一节介绍了深度测试,本节继续学习一个高级主题-模板测试(stencil testing)。模板缓冲同之前介绍的颜色缓冲、深度缓冲类似,通过它我们可以实现很多的特效,例如轮廓、镜面效果,阴影效果等。本节示例程序均可以从我的github下载。通过本节可以了解到模板缓冲的作用模板缓冲的使用方法-简单的矩形模板模板缓冲实现的outline和refleciton效果模板缓冲的作用上一节介原创 2016-08-08 09:04:53 · 21108 阅读 · 2 评论 -
OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)
写在前面 上一节介绍了向量和矩阵,本节将熟悉坐标、线性变换、仿射变换以及坐标转换等概念和计算方法,这些内容对后续的学习将会有很大帮助。部分内容不是OpenGL编程初学者所必须掌握的,可以在以后需要时再回头来看。这里是对这些知识点的一个总结,旨在对他们有个整体把握,后面具体应用时会使用这些概念。内容尽量以例子形式说明,仅在必要时会给出数学证明。一个主题往往涉及过多内容,对于文中省略的原创 2016-05-18 20:35:48 · 17621 阅读 · 4 评论 -
OpenGL学习脚印: 绘制一个三角形
写在前面 接着上一节内容,开发环境搭建好后,我们当然想立即编写3D应用程序了。不过我们还需要些耐心,因为OpenGL是一套底层的API,因而我们要掌握的基本知识稍微多一点,在开始绘制3D图形之前,本节我们将通过绘制一个三角形的程序来熟悉现代OpenGL的概念和流程。通过本节可以了解到:缓存对象VAO和VBOGLSL着色器程序的编译、链接和使用方法OpenGL绘图的基本流程绘原创 2016-05-04 23:10:17 · 32515 阅读 · 18 评论 -
OpenGL学习脚印:伽马校正(Gamma Correction)
写在前面 由于CRT,LED等显示设备显示颜色时并非按照线性方式工作,因此我们在程序中输出的颜色,最终输出到显示器上时会产生亮度减弱的现象,这种现象在计算光照和实时渲染时对图形质量有一定影响,需要我们加以处理。本节将熟悉Gamma校正的概念,并通过点光源的示例来表现Gamma校正对图形效果的影响。本节示例代码均可以在我的github下载。为什么需要γ\gamma校正我们在图形程序中认为(1.原创 2016-10-30 21:35:29 · 8868 阅读 · 0 评论 -
OpenGL学习脚印:Blinn-Phong光照模型
写在前面 在前面基础光照部分,我们学习了Phong Shading模型,Blinn-Phong模型对Phong模型的镜面光成分进行了改进,虽然在物理上解释没有Phong好,但是能更好地模拟光照。本节代码可以在我的github下载。 本节内容整理自: 1.www.learnopengl.com 2.Blinn-Phong ModelPhong不能处理的情况我们知道,Phon原创 2016-10-29 16:01:56 · 9143 阅读 · 0 评论 -
OpenGL学习脚印: 二维纹理映射(2D textures)
写在前面 前面两节介绍了向量和矩阵,以及坐标和转换相关的数学,再继续讨论模型变换等其他包含数学内容的部分之前,本节介绍二维纹理映射,为后面学习做一个准备。纹理映射本身也是比较大的主题,本节只限于讨论二维纹理的基本使用,对于纹理映射的其他方法,后面会继续学习。可以从我的github下载本节代码。通过本节可以了解到纹理映射的概念和原理二维纹理映射的处理方法使用纹理增加物体表面细节要使渲染原创 2016-05-20 17:17:59 · 59621 阅读 · 22 评论 -
OpenGL学习脚印:创建更多的实例(instancing object)
写在前面 前面我们学习了模型加载的相关内容,并成功加载了模型,令人十分兴奋。那时候加载的是少量的模型,如果需要加载多个模型,就需要考虑到效率问题了,例如下图所示的是加载了400多个纳米战斗服机器人的效果图:渲染一个模型更多的实例,需要使用到实例化技术,就是本节要介绍的instancing object方法。本节示例代码均可以从我的github下载。 本节内容整理自: www.l原创 2016-10-04 14:23:40 · 8069 阅读 · 0 评论 -
OpenGL学习脚印:几何着色器(geometry shader)
写在前面 一直以来我们使用了顶点着色器(vertex shader)和片元着色器(fragment shader),实际上OpenGL还提供了一个可选的几何着色器(geometry shader)。几何着色器位于顶点和片元着色器之间,如果没有使用时,则顶点着色器输出到片元着色器,在使用几何着色器后,顶点着色器输出组成一个基础图元的顶点信息到几何着色器,经过几何着色器处理后,再输出到片元着色原创 2016-10-02 22:46:36 · 19141 阅读 · 4 评论 -
OpenGL学习脚印: uniform blocks在着色器中的使用
写在前面 目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值;同时如果要在多个shader之间共享变量,例如投影矩阵projection和视变换矩阵view的话,仍然需要为不同shader分别设置这些uniform变量。本节将为大家介绍interface block,以及基于此的uniform buffer object原创 2016-10-01 19:18:56 · 9503 阅读 · 2 评论 -
OpenGL学习脚印: 反走样初步(Anti-aliasing basic)
写在前面 目前,我们绘制的图形中存在瑕疵的,观察下面这个立方体: 仔细看,立方体的边缘部分存在折线,如果我们放大了看,则可以看到这种瑕疵更明显:这种绘制的物体边缘部分出现锯齿的现象称之为走样(aliasing)。反走样(Anti-aliasing)是减轻这种现象的方法。反走样本身也是一个比较复杂的主题,深入了解需要有信号处理中的背景知识,例如信号采样、信号重构、滤波等知识,本节作原创 2016-10-16 16:17:28 · 9397 阅读 · 0 评论 -
OpenGL学习脚印:缓冲对象相关函数的使用(buffer object function usage)
写在前面 OpenGL中还包含除了我们前面介绍的VAO,VBO,EBO等其他类型的缓冲对象。关于如何使用这些缓冲对象的手册或者参考书籍上解释得非常详细,但是阅读起来确实很枯燥无味。 本文将通过简洁、可靠的例子说明一些重要方法的使用,以辅助学习这些方法。本文的目的不是写成详细而厚重的手册,对于文中未详细说明的部分,请参考官方文档。 学习这些内容的过程需要随着实践慢慢积累,因此本原创 2016-09-25 17:00:00 · 8333 阅读 · 4 评论 -
OpenGL学习脚印: 光照基础(basic lighting)
写在前面 上一节坐标变换过程,总结了OpenGL中顶点的处理过程。有了前面的基础,从本节开始,我们可以开始学习OpenGL中包括光照、模型加载等主题。光照是一个复杂的主题,本节学习简单的Phong reflection model.本节示例程序均可以在我的github下载。 本节内容整理自: 1. learnopengl.com Basic Lighting 2.Modern原创 2016-06-12 23:39:49 · 12890 阅读 · 6 评论 -
OpenGL学习脚印: 模型变换(model transformation)
写在前面 前面为本节内容准备了向量和矩阵、线性变换等内容,本节开始学习OpenGL中的坐标处理。OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等内容,这个主题的内容有些多,因此分节学习,主题将分为5节内容来学习。本节主要学习模型变换。本节示例代码均可在我的github处下载。通过本节可以了解到模型变换的作用模型变换的类型和计算方法坐标处理的全局过程(了解,另文详原创 2016-05-29 17:12:55 · 25917 阅读 · 5 评论 -
OpenGL学习脚印: 坐标变换过程(vertex transformation)
写在前面 前面几节分别介绍了模型变换,视变换,以及给出了投影矩阵和视口变换矩阵的推导,本节从全局把握一遍OpenGL坐标转换的过程,从整体上认识坐标变换过程。相关矩阵的数学推导过程请参考前面几节对应的内容。通过本节可以了解到坐标变换的各个阶段利用GLM数学库实现坐标变换坐标变换的全局图OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等过程,如下图所示: 在上面的图原创 2016-06-06 15:27:59 · 26576 阅读 · 8 评论 -
OpenGL学习脚印: 投影矩阵和视口变换矩阵(math-projection and viewport matrix)
写在前面 前面几节分别介绍了模型变换,视变换,本节继续学习OpenGL坐标变换过程中的投影变换。这里主要是从数学角度推导投影矩阵。对数学不感兴趣的,可以稍微了解下,或者跳过本节内容。本文主要翻译并整理自 songho OpenGL Projection Matrix一文,这里对他的推导思路稍微进行了整理。通过本节可以了解到透视投影矩阵的推导正交投影矩阵的 推导视口变换矩阵的推导zF翻译 2016-06-05 18:06:42 · 47527 阅读 · 15 评论 -
OpenGL学习脚印: 欧拉角实现第一人称相机(FPS camera with Euler angle)
写在前面 上一节视变换(view transformation) ,介绍了相机的设置参数,并建立了圆形坐标系和球形坐标系下的相机位置随着时间改变的绘制立方体程序。程序中用户无法通过键盘和鼠标来和场景中物体交互,本节实现一个第一人称相机来更好地与场景中物体交互。本节代码可以在我的github下载。通过本节可以了解到欧拉角第一人称相机的实现欧拉角和相机在一节中,我们设置相原创 2016-06-04 21:40:50 · 17994 阅读 · 7 评论 -
OpenGL学习脚印: 向量和矩阵要点(math-vector and matrices)
写在前面 前面几节内容环境搭建,绘制三角形,以及使用索引绘制,让我们对现代OpenGL中绘图做了简单了解。要继续后面的部分,需要熟悉OpenGL中涉及的数学知识。因此本节开始介绍OpenGL中的基本数学。介绍这部分内容的主旨在于对OpenGL涉及的数学有个整体把握,重点把握一些概念在OpenGL中的应用。内容尽量以例子形式说明,仅在必要时会给出数学证明。一个主题往往涉及过多内容,对于文中省略的部分原创 2016-05-12 21:48:19 · 22725 阅读 · 5 评论 -
OpenGL学习脚印: 使用索引绘图(index drawing)
写在前面 上一节熟悉了OpenGL绘图的中基本的VAO和VBO,以及着色器,并绘制了一个三角形。本节在上一节基础上,介绍利用EBO的索引绘图。通过本节可以了解到索引绘图使用方法索引绘图应用场合使用EBO开始索引绘图EBO即Element Buffer Objects,用来存储绘制物体的索引。所谓索引就是对顶点属性数组中元素的一个位置标记。使用索引绘图时,先通过顶点属性数原创 2016-05-05 17:06:13 · 12739 阅读 · 5 评论 -
OpenGL学习脚印: 基本图形绘制方式比较(glBegin,glCallList,glVertexPointer,VBO)
OpenGL学习脚印: 基本图形绘制方式比较原创 2014-08-29 11:19:23 · 12001 阅读 · 3 评论 -
OpenGL学习错误列表Error List
OpenGL学习错误列表Error List原创 2014-08-29 21:37:33 · 8546 阅读 · 0 评论