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 <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

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<<vec.x<<vec.y<<vec.z<<std::endl;

以上代码中,我们首先用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中添加自己录的视频的方法,所以暂时不放结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Estelle_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值