摘要:
为了证明我们上节渲染出来的是一个立方体而不是一个平面,我们决定将它旋转一定角度,这样我们就需要一个旋转矩阵(也属于ModelTransformMatrix的一部分) 上一节我们的ModelTransformMatrix中做了一个移动(translation)的操作,所以我们将它重命名为transla 阅读全文
摘要:
本节我们将绘制一个3维物体,立方体。 如果要渲染3D物体,我们需要了解MVP(Model View Projection),它表示三个转换矩阵。实际上这个名字不够明确,更加确切的释义如下: Model - Model to World 模型空间到世界空间 View - World to View 世 阅读全文
摘要:
本节我们将尝试利用三角形制作一个“走马灯”效果。 一个三角形如图示方式,从左向右依次移动。 先看一下代码: MyGlWindow.cpp MyGlWindow.h 重点看cpp文件里的变化。 先定义了几个变量(其实也可以定义成常量),方便后面使用,他们分别是: float triangleWidth 阅读全文
摘要:
启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内。 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最大正值是1. 在未启用深度测试的情况下,同一个像素如果被绘制两次,后绘制的像素会覆盖先绘制的像素。 阅读全文
摘要:
使用之前的方法写Shader是一件很痛苦的事情,把Shader代码直接卸载C++文件中,需要使用很多引号来包裹,既不美观也不方便。 我们这节的目的是使用纯文本文件保存Shader。 首先在工程中创建两个文件,分别命名为VertexShaderCode.glsl 和 FragmentShaderCod 阅读全文
摘要:
上节的最后我们实现了两个绿色的三角形,而绿色是直接在Fragment Shader中指定的。 这节我们将为这两个三角形进行更加自由的着色——五个顶点各自使用不同的颜色。 要实现这个目的,我们分两步进行,首先 在顶点数组里增加数据用来表示颜色 修改sendDataToOpenGL()函数中的verts 阅读全文
摘要:
从这里就接触到了可编程图形渲染管线。 下面介绍使用Vertex Shader (顶点着色器)和 Fragment Shader(像素着色器)的方法。 我们的目标是使用这两个着色器给三角形填充绿色。 添加了一个cpp文件存放Shader文件,MyShaderCode.cpp: 书写Shader使用的是 阅读全文
摘要:
本节将采用两种方法绘制两个三角形。 先看第一种方法的代码 MyGlWindow.cpp 和上一节的代码很相似,区别是verts数组增加了6个元素(能额外表示3个顶点),另外glDrawArrays()函数的最后一个参数变成了6,表示绘制六个顶点。这样当然就可以绘制2个三角形了。 但是这种方法造成了一 阅读全文
摘要:
本节将绘制一个三角形 先看最终代码: MyGlWindow.cpp: 启用通道 每个顶点都有多种attributes,例如位置,颜色等。 为了让把数据从内存发送到显卡中,我们需要告诉OpenGL去开启某个attribute。 17 行使用glEnableVertexAttribArray()函数来启 阅读全文
摘要:
本节绘制一个三角形,并讲解Buffer Object-缓冲对象 OpenGL的窗口坐标 屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1. Buffer Object 缓冲对象为内存中的一块空间,用来和OpenGL交互数据。 使用BufferObject的步骤: 阅读全文