OpenGL没有自带任何的矩阵和向量知识,但是有专门为OpenGL量身定做的数学库GLM
GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译
下载地址:https://github.com/g-truc/glm
下载整个项目,解压之后,将下面的glm文件夹放在第三方库的文件夹includes下
GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(对角元素为1,其它元素为0)。如果你使用的是0.9.9或0.9.9以上的版本,你需要将所有的矩阵初始化改为 glm::mat4 mat = glm::mat4(1.0f)
。(可以自己测试,我们现在最新下载的一般都是大于0.9.9版本的)
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
int main()
{
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f); // 列向量(1, 0, 0, 1)
// 0.9.9及以上版本
glm::mat4 trans = glm::mat4(1.0f); // 单位矩阵
// 传递单位矩阵和一个位移向量,这个函数时构造一个用来位移的向量
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
/*
单位举证每一列和vec3的每一个数相乘,返回的就是位移矩阵
*/
vec = trans * vec; // trans为位移矩阵
std::cout << vec.x << vec.y << vec.z << std::endl; // 210
}