一、glm简介
glm常用三维数据类型
vec2 二维向量
vec3 三维向量
vec4 四维向量
mat2 二阶矩阵
mat3 三阶矩阵
mat4 四阶矩阵
常用的函数
glm::radians()角度制转弧度制
glm::translate()创建一个平移矩阵,第一个参数是目标矩阵,第二个参数是平移的方向向量
glm::rotate()创建一个将点绕某个轴旋转x弧度的旋转矩阵,第一个参数是弧度,第二个参数是旋转轴
glm::scale()创建一个缩放矩阵,第一个参数是目标矩阵,第二个参数是缩放系数
二、glm使用
我们使用GLM(OpenGL Mathematics),我们使用d它是一个只有头文件的库。根据教程建议,我们使用低于0.9.9版本的GLM。把下载好的头文件包含到我们的include文件夹下,就可以使用了。
然后我们在.cpp中添加
#include
#include
#include
1.测试
glm::vec(1.0f,0.0f,0.0f,1.0f);
glm::mat4 trans;
trans=glm::translate(trans,glm::vec3(1.0f,1.0f,0.0f));
vec =trans*vec;
std::cout<
以上代码中,我们首先用GLM内建的向量类定义一个叫做vec的向量。
然后定义一个mat4类型的trans,默认是一个4*4矩阵。
接着我们创建一个变换矩阵,最后用给定的矩阵乘以位移矩阵就能获得最后需要的矩阵。
2.利用glm函数
glm::mat4 trans;
trans=glm::rotate(trans,glm::radians(90.0f),glm::vec3(0.0,0.0,1.0));
trans=glm::scale(trans,glm::vec3(0.5,0.5,0.5));
上述代码实现的功能是:把箱子的每个轴都缩放0.5倍,然后沿z轴旋转90度(使用glm::radians将角度转化为弧度,逆时针为正),由于有纹理的面是在XY平面上的,所以把箱子绕着z轴旋转。
修改顶点着色器
#version 330 core
layout(location=0)in vec3 apos;
layout(location=1)in vec2 aTexCoord;
out vec2 TextCoord;
uniform mat4 transform;
void main()
{
gl_Position = transform * vec4(aPos,1.0f);
TexCoord = vec2(aTexCoord.x,1.0-aTexCoord.y);
}
把变换矩阵传递给着色器
unsingned int transformLoc=glGetUniformLocation(ourShader.ID,"transform");
glUniformMatrix4fv(transformLoc,1,GL_FALSE,glm::value_ptr(trans));
由于还没掌握在CSDN中添加自己录的视频的方法,所以暂时不放结果。