GLM
OpenGL没有自带任何的矩阵和向量知识,所以我们必须定义我们自己的数学类和函数,GLM就是为OpenGL量身定做的数学库
GLM下载链接:
下载完成后, 我们将下图文件放入我们工程文件的include文件夹目录下。
GLM是OpenGL Mathematics的缩写,他是一个只有头文件的库,那么我们只需要包含他的头文件。
如果头文件加载无误、那么我们可以将以下代码加载到主函数中进行测试:
我们先用GLM内建的向量类定义一个叫做vec的向量。
接下来定义一个mat4类型的trans,默认是一个4x4单位矩阵。
下一步是创建一个变换矩阵,我们是把一个单位矩阵和一个位移向量传递给glm::translate()函数来完成这个工作,使得我们的矩阵根据我们给定的x、y、z值进行位移。
结果展示:
我们可以看到,在原来坐标的基础之上x平移了1 y平移了1。
我们还可以使我们的矩阵进行旋转或者是缩放:
矩阵旋转我们是通过glm::rotate()函数来完成的,同样的第一个参数也是填入我们创建的mat4对象,第二个参数就是我们所需要旋转的角度,第三个参数就是我们根据那个轴进行旋转。
结果展示:
那么同样的道理,缩放的话我们是通过glm::scale()函数实现的,第一个参数也是填入trans,第二个参数就代表的是矩阵哪个轴进行缩放,并且缩放大小是多少。(1代表缩放大小不变)。
结果展示:
我们掌握了这个知识点后, 我们就可以将我们之前所绘制的图形进行位移操作。
我们将修改顶点着色器让其接收一个mat4的uniform变量,然后再用矩阵uniform乘以位置向量:
在把位置向量传给gl_Position之前,我们先添加一个uniform,并且将其与变换矩阵相乘。我们的箱子现在应该是原来的二分之一大小并(向左)旋转了90度。当然,我们仍需要把变换矩阵传递给着色器:
接着,我们的shader就可以调用setMat4函数来实现矩阵的位移。
效果展示: