随笔分类 -  OpenGL

摘要:在上一节的案例中,我们使用了四个Buffer Object,立方体的VertexBuffer,立方体的索引Buffer,四面体的VertexBuffer,四面体的索引Buffer。 我们这节尝试把两个图形的Vertex Buffer结合,两个图形的索引Buffer结合,形成两个Buffer,让程序更 阅读全文
posted @ 2018-02-05 12:00 Ken_An 阅读(251) 评论(0) 推荐(0)
摘要:大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上。因此直到教程已经进行了一大半,作者才引入VAO这个概念。在我看来这也是非常合理和自然的。 先预览一下最终的代码逻辑: 准备工作 为了讲解后面的内容,我们对代码进行 阅读全文
posted @ 2018-02-03 13:17 Ken_An 阅读(1156) 评论(0) 推荐(0)
摘要:移动相机需要用到键盘按键,按键事件的引入需要包含头文件 #include <Qt3DInput\qkeyevent.h> 并实现QWidget中定义的虚函数keyPressEvent 我们首先在MyGlWindow中重写这个虚函数。 在MyGlWindow.h加入 在MyGlWindow.cpp中定 阅读全文
posted @ 2018-02-02 11:45 Ken_An 阅读(408) 评论(0) 推荐(0)
摘要:在11节我们说过,MVP矩阵中目前只应用了两个矩阵,World to View 矩阵被省略了,这就导致我们的画面没有办法转换视角。 本节我们将添加这一环节,让相机可以旋转。 为了实现这一目的,我们添加一个相机类, Camera类。 Camera.h: Camera.cpp: glm::lookAt 阅读全文
posted @ 2018-02-01 17:16 Ken_An 阅读(1244) 评论(0) 推荐(0)
摘要:我们使用15节学到的知识来绘制14节的立方体。 在第14节我们使用了两次glDrawElements实现了OpenGL实例化,发现这样仍然不太方便,如果需要绘制成千上万的立方体,就需要手写成千上万次的glDrawElements(). 而15节我们知道了glDrawElementsInstanced 阅读全文
posted @ 2018-01-29 17:01 Ken_An 阅读(812) 评论(0) 推荐(0)
摘要:友情提示:继续本节之前,需要保存此前的代码,本节为了试验,会对代码做一些修改,但后续的修改需要我们把代码返回之前的进度。 OpenGL内置支持Instancing,有专门的函数来处理这件事情。 为了方便,我们先使用最简单的三角形来学习 先修改sendDataToOpenGL()函数: 相应的修改ve 阅读全文
posted @ 2018-01-29 15:58 Ken_An 阅读(593) 评论(0) 推荐(0)
摘要:如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置、缩放、旋转不一样,那么我们可以不需要多次将这个物体的顶点信息、颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不同的转换矩阵。这种方法叫做OpenGL Instancing。它的效率比每次都重新发送一次数据到显卡 阅读全文
posted @ 2018-01-29 11:21 Ken_An 阅读(311) 评论(0) 推荐(0)
摘要:上节说过矩阵是可以结合的,而且相乘是按照和应用顺序相反的顺序进行的。我们之前初始化translationMatrix和rotationMatrix的时候,第一个参数都是使用的一个初始矩阵 glm::matrix4(),实际上我们可以对代码稍作优化,让初始化过程精简一些。 对比一下优化之前和优化之后的 阅读全文
posted @ 2018-01-29 09:26 Ken_An 阅读(177) 评论(0) 推荐(0)
摘要:为了证明我们上节渲染出来的是一个立方体而不是一个平面,我们决定将它旋转一定角度,这样我们就需要一个旋转矩阵(也属于ModelTransformMatrix的一部分) 上一节我们的ModelTransformMatrix中做了一个移动(translation)的操作,所以我们将它重命名为transla 阅读全文
posted @ 2018-01-26 16:29 Ken_An 阅读(284) 评论(0) 推荐(0)
摘要:本节我们将绘制一个3维物体,立方体。 如果要渲染3D物体,我们需要了解MVP(Model View Projection),它表示三个转换矩阵。实际上这个名字不够明确,更加确切的释义如下: Model - Model to World 模型空间到世界空间 View - World to View 世 阅读全文
posted @ 2018-01-25 10:46 Ken_An 阅读(562) 评论(0) 推荐(0)
摘要:本节我们将尝试利用三角形制作一个“走马灯”效果。 一个三角形如图示方式,从左向右依次移动。 先看一下代码: MyGlWindow.cpp MyGlWindow.h 重点看cpp文件里的变化。 先定义了几个变量(其实也可以定义成常量),方便后面使用,他们分别是: float triangleWidth 阅读全文
posted @ 2018-01-24 22:32 Ken_An 阅读(329) 评论(0) 推荐(0)
摘要:启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内。 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最大正值是1. 在未启用深度测试的情况下,同一个像素如果被绘制两次,后绘制的像素会覆盖先绘制的像素。 阅读全文
posted @ 2018-01-24 16:12 Ken_An 阅读(248) 评论(0) 推荐(0)
摘要:使用之前的方法写Shader是一件很痛苦的事情,把Shader代码直接卸载C++文件中,需要使用很多引号来包裹,既不美观也不方便。 我们这节的目的是使用纯文本文件保存Shader。 首先在工程中创建两个文件,分别命名为VertexShaderCode.glsl 和 FragmentShaderCod 阅读全文
posted @ 2018-01-23 21:43 Ken_An 阅读(252) 评论(0) 推荐(0)
摘要:上节的最后我们实现了两个绿色的三角形,而绿色是直接在Fragment Shader中指定的。 这节我们将为这两个三角形进行更加自由的着色——五个顶点各自使用不同的颜色。 要实现这个目的,我们分两步进行,首先 在顶点数组里增加数据用来表示颜色 修改sendDataToOpenGL()函数中的verts 阅读全文
posted @ 2018-01-23 20:54 Ken_An 阅读(238) 评论(1) 推荐(0)
摘要:从这里就接触到了可编程图形渲染管线。 下面介绍使用Vertex Shader (顶点着色器)和 Fragment Shader(像素着色器)的方法。 我们的目标是使用这两个着色器给三角形填充绿色。 添加了一个cpp文件存放Shader文件,MyShaderCode.cpp: 书写Shader使用的是 阅读全文
posted @ 2018-01-23 19:22 Ken_An 阅读(444) 评论(0) 推荐(0)
摘要:本节将采用两种方法绘制两个三角形。 先看第一种方法的代码 MyGlWindow.cpp 和上一节的代码很相似,区别是verts数组增加了6个元素(能额外表示3个顶点),另外glDrawArrays()函数的最后一个参数变成了6,表示绘制六个顶点。这样当然就可以绘制2个三角形了。 但是这种方法造成了一 阅读全文
posted @ 2018-01-22 21:22 Ken_An 阅读(179) 评论(0) 推荐(0)
摘要:本节将绘制一个三角形 先看最终代码: MyGlWindow.cpp: 启用通道 每个顶点都有多种attributes,例如位置,颜色等。 为了让把数据从内存发送到显卡中,我们需要告诉OpenGL去开启某个attribute。 17 行使用glEnableVertexAttribArray()函数来启 阅读全文
posted @ 2018-01-22 20:33 Ken_An 阅读(194) 评论(0) 推荐(0)
摘要:本节绘制一个三角形,并讲解Buffer Object-缓冲对象 OpenGL的窗口坐标 屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1. Buffer Object 缓冲对象为内存中的一块空间,用来和OpenGL交互数据。 使用BufferObject的步骤: 阅读全文
posted @ 2018-01-22 20:09 Ken_An 阅读(228) 评论(0) 推荐(0)
摘要:用红色来填充GLWidget窗口 修改MyGlWindow.h,添加两个函数,一个用来初始化OpengGL,一个用来绘制OpenGL MyGlWindow.cpp 运行可见一个红色的窗口 阅读全文
posted @ 2018-01-22 19:37 Ken_An 阅读(264) 评论(0) 推荐(0)
摘要:这系列文章是我学习Youtube上一套OpenGL教程的笔记,自己对教程的案例重新制作并且做了一定程度的修改(更有条理,且修正了一些问题)。后续将持续更新。 Visual Studio 2017工程 教程使用的是visual studio 2012,我电脑上装的是visual studio 2017 阅读全文
posted @ 2018-01-22 19:32 Ken_An 阅读(416) 评论(0) 推荐(0)