OpenGL 矩阵变换GLM库的使用

2023-05-16

GLM和MVP矩阵操作速记
连续工作15小时,累了,睡觉。

include “glm/glm.hpp”

include “glm/gtc/matrix_transform.hpp”

若未特别说明,以下示例均假设矩阵/向量为四维
glm::mat4 mat;
glm::vec4 vec;
对于vec来说,第四位为1代表坐标,0代表方向

平移矩阵
| 1 0 0 X |
| 0 1 0 Y |
| 0 0 1 Z |
| 0 0 0 1 |

构造平移矩阵
glm::mat4 mat = glm::translate(X, Y, Z);

拉伸矩阵
| x 0 0 0 |
| 0 y 0 0 |
| 0 0 z 0 |
| 0 0 0 1 |

构造拉伸矩阵
glm:mat4 mat = glm::scale(x, y, z);

旋转矩阵
若转轴为 x, y, z, 角度为 a
X = x sin(a), Y = y sin(a), Z = z sin(a), W = cos(a)
| 1 - 2(Y*Y+Z*Z) | 2(X*Y+Z*W) | 2(X*Z-Y*W) | 0 |
| 2(X*Y-Z*W) | 1 - 2(X*X+Z*Z) | 2(Y*Z+X*W) | 0 |
| 2(X*Z+Y*W) | 2(Y*Z-X*W) | 1 - 2(X*X+Y*Y) | 0 |
| 0 | 0 | 0 | 1 |

构造旋转矩阵
glm::vec3 axis(x, y, z);
glm::mat4 transformedMatrix = glm::rotate(mat, a, axis);

初等变换矩阵与坐标相乘可得变换后的坐标
mat * vec (= vec)
glm::vec4 transformedVector = mat * vec;

构造模型矩阵
glm::mat4 mat = transmat3 * transmat2 * transmat1 * mat;

构造视图矩阵
glm::mat4 mat = glm::LookAt(CameraPos, CameraTarget, upVector);
若相机正置,则 upVector = glm:vec3(0, 1, 0)

构造投影矩阵
glm::mat4 mat = glm::perspective(FoV, AspectRatio, NearClipPlane, FarClipPlane);

            模型矩阵                视图矩阵                 投影矩阵

模型坐标 ———-> 绝对坐标 ———-> 相机坐标 ———-> 齐次坐标
最后一步是用仿射变换模拟人眼成像的过程
glm:mat3 MVP = projection * view * model;

循环前注册句柄
GLuint MatrixID = glGetUniformLocation(programID, “MVP”);
循环中传递给GLSL
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);

GLSL vertex shader 末期处理
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main() {
vec4 v = vec4(vertexPosition_modelspace, 1);
gl_Position = MVP * v;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 矩阵变换GLM库的使用 的相关文章

随机推荐

  • 【AI 学习笔记】第二章:国内套壳犹如雨后春笋,贩卖焦虑成最大赢家

    关于AI的新闻和各种视频在网络上实在是太多太杂了 xff0c 于是我开始更新这个专栏 AI学习笔记 xff0c 本专栏是以用通俗易懂的语言 xff0c 以我们普通人小白测试人的视角 xff0c 领略2023年的最大黑马人工智能领域 xff0
  • XuperOS真·监督与真·共建合成藏品亮相!

    2023年年初 xff0c XuperOS发布了成长计划 xff0c 分别为 xff1a 创世 监督 共建 国际化四个阶段 开放网络 xff08 XuperOS xff09 是基于百度自主研发且开源的区块链技术XuperChain搭建的区块
  • Nginx编译安装时常见错误分析

    本篇文章主要是关于Nginx在编译安装时 xff0c 可能出现的错误的解决方法 1 Nginx启动脚本错误 xff1a env etc init d nginx No such file or directory 明明上传了Nginx服务控
  • Pytorch模型如何查看每层输入维度输出维度

    在 PyTorch 中 xff0c 可以使用 torchsummary 库来实现对 PyTorch 模型的结构及参数统计的输出 xff0c 其可以方便我们查看每层输入 输出的维度以及参数数量等信息 安装 torchsummary 库 xff
  • ERROR: Cannot uninstall ‘xxx‘. It is a distutils installed project and thus we cannot accurately det

    ERROR Cannot uninstall TBB It is a distutils installed project and thus we cannot accurately determine which files belon
  • python装饰器的使用方法

    0 前言 装饰器在 python 中使用的频率非常高 xff0c 它可以在不改动原有函数的基础上对其进行增强功能 下面主要是介绍装饰器的各种用法 xff0c 并理解其运行过程 1 使用 1 1 在函数上添加装饰器 decro 是一个装饰器函
  • 【Linux operation 46】Centos 7.9中安装使用nmap

    1 nmap 介绍 nmap xff08 Network Mapper xff09 是一个开源的网络探测和安全扫描程序 nmap 的设计目标是快速地扫描大型网络 xff0c 当然用它扫描单个主机也没有问题 nmap 以新颖的方式使用原始 I
  • Nginx配置ssl证书

    1 下载证书 在ssl证书管理界面下载对应于Nginx的证书 下载的Nginx证书压缩文件解压后包含 xff1a pem xff1a 证书文件 PEM文件的扩展名为CRT格式 key xff1a 证书的密钥文件 申请证书时如果未选择自动创建
  • 0009基于51单片机智能门禁系统设计

    资料下载地址 单片机原理教程 初级 xff08 视频 xff0c 源仿真源代码 xff09 功能 60 可输入密码进行解锁 可以对IC卡进行注册或注销 可用已注册的IC卡解锁 可实现液晶显示当前时间 密码连续输错三次时能强制退出并报警 具有
  • 基于openstreetmap数据的SUMO路网生成路线

    一 一步到位 xff1a 基于SUMO自带工具smWebWizard py 使用SUMO自带的osmWebWizard py脚本 xff08 sumo tools xff09 进行下载 xff0c 脚本执行后会打开一个操作网页 xff0c
  • STM32烧写一次程序后,再次烧写识别不到单片机

    STM32cubeMX生成的程序 xff0c 编译后烧录一次后 xff0c 在次烧录会发现识别不到单片机了 xff0c 解决方案 xff1a 在STM32cubeMX工程中的SYS中 xff0c Debug中选择Serial Wire 使能
  • 百度超级链学院开课啦!第一讲教你《如何快速建链》

    百度超级链Xuperchain开源之后 xff0c 我们感受到了开发者伙伴们的热情关注 xff0c 其中有不少朋友提到希望进一步了解百度超级链网络的搭建方法 今天 xff0c 百度超级链小X姐姐和百度资深研发工程师静姐姐 xff0c 为大家
  • centos7操作/关闭防火墙

    前言 xff1a 测试环境部署不同端口的服务 xff0c 需要频繁使用防火墙放行端口 xff0c 比较麻烦 xff0c 所以需要彻底关闭防火墙 xff0c 整理了以下命令 xff0c 提供使用 systemctl status firewa
  • [kubernates]kube-flannel-ds 一直 CrashLoopBackOff

    使用 Kubeadm 安装 K8s 集群 xff0c 在安装 flannel 网络插件后 xff0c 发现 kube flannel ds 一直处于 CrashLoopBackOff 状态 xff1a span class token pu
  • Bottom-up And Top-down

    Bottom up 自下而上的处理可以理解为 xff1a 将感应器结果作为输入 xff0c 也就是激励 因此自下而上可以被描述为是数据驱动的 例如 xff0c 在一个人的花园正中有一朵花儿 xff0c 这个花儿的视觉和所有的激励信息都从视网
  • pyqt5在statusbar中不断的刷新显示不同的信息

    在PYQT5中不断的显示新的信息 需求 xff1a 需要在statusbar 上不断的显示新的测试数据 现在在测试例子中 xff0c 数据由numpy生成 总结如下 xff1a span class token comment coding
  • 如何在VS下调试自己写的dll

    一 准备资料 1 qt写的应用程序 test pro xff0c 编译程序可执行文件test exe 2 qt写的动态库程序 dll pro 二 调试步骤 1 用vs打开dll pro 2 dll工程右键属性如下图所示修改 3 编译运行dl
  • 通俗理解网络架构搜索(NAS)

    什么是NAS 我们假设模型必须是一个三层的全连接神经网络 xff08 一个输入层 一个隐层 一个输出层 xff09 xff0c 隐层可以有不同的激活函数和节点个数 xff0c 假设激活函数必须是relu或sigmoid中的一种 xff0c
  • GDB 的进入和退出

    进入和退出GDB 本节讨论如何启动和退出GDB 主要包括 xff1a 输入 39 gdb 进入GDB调试器输入quit或者按下Ctrl d退出调用GDB xff1a 如何启动GDB退出GDB xff1a 如何退出GDBShell脚本命令 x
  • OpenGL 矩阵变换GLM库的使用

    GLM和MVP矩阵操作速记 连续工作15小时 xff0c 累了 xff0c 睡觉 include glm glm hpp include glm gtc matrix transform hpp 若未特别说明 xff0c 以下示例均假设矩阵