首先需要了解矩阵,程序里经常用矩阵做坐标变换
常见的矩阵有:
1.缩放矩阵
2.位移矩阵
多一维坐标:齐次坐标(Homogeneous Coordinates)
用途:
1.允许我们在3D向量上进行位移(如果没有w分量我们是不能位移向量的)
2.把x、y和z坐标分别除以w坐标,用w值创建3D视觉效果
如果一个向量的齐次坐标是0,这个坐标就是方向向量(Direction Vector)
3.旋转矩阵
不同轴向的旋转矩阵
任意轴旋转的复合矩阵
.
注意:不同的矩阵可以组合,比如:缩放+旋转,但是要注意顺序
OpenGL如何使用矩阵呢?
使用库: OpenGL Mathematics (GLM)
传送门
矩阵的用法:
详情见代码注释
//引入相关头文件
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
//矩阵定义,默认里面的数据都是非法数据,需要初始化
glm::mat4 trans;
//初始化方式1
// trans = mat4(1.0f);
//mat4中4行4列的元素是按照列的方式排列的
// 主要是因为opengl在显存中是按列存储的,所以在准备好数据后可以直接将mat4复制到显存中
//可以使用[]操作符来访问mat4的第几列,并使用二级[]来访问某一列的第几个元素,
//初始化方式2,熟悉内存分布
trans[0][0] = 1.0f; trans[1][0] = 0.0f; trans[2][0] = 0.0f; trans[3][0] = 0.0f;
trans[0][1] = 0.0f; trans[1][1] = 1.0f; trans[2][1] = 0.0f; trans[3][1] = 0.0f;
trans[0][2] = 0.0f; trans[1][2] = 0.0f; trans[2][2] = 1.0f; trans