LearnOpenGL-P6 移动旋转和缩放图像
0 上一章我们绘制了带纹理的矩形,本章我们将对这张带图片进行移动、旋转以及缩放等操作,让其在窗口中能被调整为2d平面内的各种摆放姿态。
(1)创建变换矩阵,利用变换矩阵改变图片的姿态。
(2)使用键盘上的按键控制图片的摆放姿态。

1 创建变换矩阵,利用变换矩阵改变图片的姿态。
1.0 导入glm开源库(https://github.com/g-truc/glm/tags)。glm是一个处理矩阵变换的开源库。

1.1 将glm库的头文件路径包含到项目头文件路径中,并将以下三个hpp文件包含进main.cpp文件中。

1.2 在main.cpp的渲染循环中创建一个单位矩阵。然后将单位矩阵传入glm的旋转接口中转成绕z轴逆时针旋转90°的变换矩阵。再然后将矩阵传入glm的缩放接口中转成沿xyz三轴均缩小为0.5倍的变换矩阵。

1.3 在顶点着色器源码中添加坐标变换矩阵变量,变量的类型为mat4。将变换矩阵乘以顶点坐标得到转换后的新顶点坐标位置。(此时坐标转换的方式为先缩放0.5倍,再绕着z轴旋转90°。这个过程与我们设置转换矩阵的过程是反过来的。如不太理解,可去查阅一下线性代数的知识。)

1.4 在shader中添加新的接口。该接口用来设置mat4类型的uniform变量。

1.5 每次渲染循环中,都将我们之前设置好的转换矩阵传入到着色器中。

1.6 编译运行程序可得到一个先缩放了0.5倍后绕着z轴逆时针旋转了90°的图像。

1.7 我们现在可以再玩点花的。我们在每个渲染帧中,都先让图像从坐标原点移动到右下角,再随着时间的变换相对坐标原点绕z轴逆时针旋转一个角度,最后将其缩放0.5倍。其运动轨迹如下。


1.8 我们也可以换一种变换矩阵的组合顺序,先让图像在原点处绕z轴旋转一定的角度,再将其移动到右下角位置,最后将其缩放0.5倍。其运动轨迹将发生改变。



2 使用键盘上的按键控制图片的摆放姿态。
2.0 我们接下来不搞之前的那种固定轨迹的图像移动了。我们现在要让图像根据我们自己的意愿自由地运动。我们需要通过键盘来与程序进行交互。
2.1 首先我们在main()函数之前,定义好关于缩放、旋转和移动的全局变量。

2.2 然后设置好矩阵转换的顺序(此时不同的设置顺序会产生不一样的效果,你们可以自己去尝试一下。)

2.3 在键盘响应的回调函数中设置好按键的响应。
2.4 上下左右键负责控制图像的上下坐标移动(此时要注意移动量不能超出窗口的尺寸。)


2.5 WADS四个键负责控制图像的缩放(此时要注意缩放量不能小于0.0f。)


2.6 qe二键负责控制图像的旋转(旋转角度值不限制。)


2.7 最后编译运行程序即可得到一个通过键盘控制的在2d平面内可以任意调整姿态的图像。


