欢迎来到军工软件开发人才培养基地——学到牛牛

OpenGL-GML与矩阵

时间:2024-05-06 07:01:10 来源:学到牛牛

 

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函数来实现矩阵的位移。

效果展示: