变换
变换主要为缩放、平移和旋转。
我们使用GLM库实现变换。
GLM中,向量类型为glm::vec,其中glm::vec2是二维向量,glm::vec3是三维向量,glm::vec4是四维向量。矩阵类型为glm::mat,其中glm::mat2是2x2矩阵,glm::mat3是3x3矩阵,glm::mat4是4x4矩阵。
注意:从0.9.9版本起,GLM库会将矩阵类型默认初始化为零矩阵,而不是单位矩阵。创建单位矩阵的方法为使用glm::mat2/3/4(1.0f)。
缩放
glm::scale()用于创建一个缩放矩阵。

scale表示在各个坐标轴上的缩放因子。
Case:

平移
glm::translate()用于创建表示平移变换的矩阵。平移(Translation)就是在原始向量的基础上加上另一个向量从而获得一个在不同位置的新向量的过程。

Case:

在矩阵和向量相乘时,顺序不能交换。
旋转
glm::rotate()用于执行旋转变换,创建一个旋转矩阵。

angle:旋转角度,以弧度为单位。axis:旋转轴,一个三维向量,表示绕哪个轴进行旋转。
函数glm::radians()用于将角度转换为弧度:

Case:

应用变换
首先需要把矩阵传递给着色器。
在着色器中声明一个uniform的mat4变量,然后用矩阵乘以位置向量:

接着为uniform变量赋值,调用函数glUniformMatrix4fv()。

count:要设置的矩阵的数量。通常情况下为1,因为只设置一个矩阵。
transpose:指示矩阵是否应该被转置。一般为GL_FALSE。
value:一个指向矩阵数据的指针。我们使用函数glm::value_ptr()获得这个指针。
Case:

这是应用变换后得到的效果:
