OpenGL学习之使用glm库实现变换

一、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中添加自己录的视频的方法,所以暂时不放结果。

你可能感兴趣的:(opengl学习,glm)