OpenGL学习5——变换

2021-06-17  本文已影响0人  蓬篙人

变换(Transformations)

1. 矢量(Vector)

1.1 矢量与标量的运算

1.2 矢量的负运算

1.3 矢量的加减运算

1.4 矢量的长度

1.5 矢量的乘运算

2. 矩阵(Matrices)

2.1 矩阵的加减

2.1 矩阵与标量的乘积

2.3 矩阵之间的乘积

2.4 矩阵与矢量乘积

2.5 单位矩阵

2.6 缩放(Scaling)

2.7 平移(Translation)

2.8 旋转(Rotation)

2.9 组合变换矩阵

3. GLM

#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
#include "glm/gtc/type_ptr.hpp"
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = glm::mat4(1.0f);    // 单位矩阵
// 通过平移单位矩阵获取平移矩阵
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::mat4 trans = glm::mat4(1.0f);
// 以z轴旋转90度
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));
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

uniform mat4 transform;

void main()
{
    gl_Position = transform * vec4(aPos, 1.0f);
    TexCoord = aTexCoord;
}
unsigned int transformLoc = glGetUniformLocation(ourShader.ID, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));
glm::mat4 trans = glm::mat4(1.0f);
// 平移
trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f));
// 随时间旋转
trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0, 0.0, 1.0));
上一篇 下一篇

猜你喜欢

热点阅读