http://blog.csdn.net/qq_23225317/article/details/65937396

GLM和MVP矩阵操作速记

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; 
}

OpenGL 矩阵变换GLM库的使用相关推荐

  1. OpenGL矩阵运算——GLM库的使用

    GLM库简介 OpenGL没有内建矩阵运算方法,常用的第三方库为GLM.GLM是OpenGL Mathematics的缩写.作为一个header only库,GLM只要包括了相应的头文件就可以使用它提 ...

  2. 【OpenGL】glm库的配置

    下载glm库,可点击这里直接下载 下载完后解压一下,把整个glm文件夹复制到你的项目所在文件夹下,如下图所示. 这个文件是glm父文件夹,不是子文件夹,该文件夹下还有一个glm子文件夹 右击你的项目, ...

  3. opengl glm库 改变mvp矩阵 实现3D漫游

    上一篇glm来实现的mvp矩阵变换实现opengl渲染模型,讲到了如何利用glm库实现mvp矩阵,这篇主要讲解下,我们如何利用glm库的平移.旋转矩阵实现一个简单的3d漫游的效果. 原理 移动 cam ...

  4. OpenGL-利用矩阵变换(缩放、旋转、位移),使用glm库

    目录 1. 矩阵知识总结 缩放 旋转 位移 2. glm使用方法 安装 使用 位移(使用translate函数) 旋转(使用rotate及radians函数) 缩放(使用scale函数) 在你的cpp ...

  5. OpenGL实用开源库 汇总

    https://blog.csdn.net/huawenguang/article/details/1393904 https://blog.csdn.net/hbtj_1216/article/de ...

  6. OpenGL 矩阵变换

    origin refer :http://www.songho.ca/opengl/gl_transform.html#modelview OpenGL 矩阵变换 Related Topics: Op ...

  7. 【OpenGL】使用OpenGL的GLU库绘制BSpline曲线

    [OpenGL]使用OpenGL的GLU库绘制BSpline曲线. 1.绘制目标 2.核心代码 3.运行结果 1.绘制目标 使用OpenGL的GLU库绘制BSpline曲线. 2.核心代码 /// T ...

  8. 【OpenGl】openGL 诸多库之间关系 及 环境配置

    [OpenGl]openGL 诸多库之间关系 及 环境配置 最近一直在学习OpenGL,但是看OpenGL编程指南不同版本之间使用一堆不同的库,概念名称全都混搅起来了,越看越糊涂,于是整理了一下Ope ...

  9. 有趣又好玩的glm库

    一.glm的优点 glm是一个发展了十年以上的数学库,这个库很不错.很多教材,书籍,资料大量使用glm,了解glm有助于阅读这些资料. 1.模仿glsl的接口 这个实在是非常方便理解和记忆,你不需要在 ...

  10. OpenGL编程指南3:GLUT:OpenGL使用工具库

    1.前言 我们知道的,OpenGL包含了很多的渲染函数,这些函数的设计目的就是独立与任何窗口系统或操作系统.因此,他并没有包含打开窗口或者从键盘或鼠标读取事件的函数.遗憾的是,如果连最基本的打开窗口的 ...

最新文章

  1. C++ : 矩阵初等行变换,化成最简矩阵
  2. SAP Spartacus的defaultUrlMatcher
  3. springmvc跨域问题
  4. Magicodes.SwaggerUI 已支持.NET Core 3.1
  5. 广州程序员辞职创业卖菠萝油,放弃30万年薪
  6. 从Scala2.13.0开始废弃了一些方法
  7. 机器学习之 特征工程
  8. 对称加密和非对称加密的理解
  9. docker-machine create --driver virtualbox myvm1 创建失败
  10. HDU-2082 找单词 母函数
  11. 地图找房(四)02——小区房源列表展示和隐藏 小区房源列表数据填充 接口数据-图片地址的基准路径
  12. SQL Server2000安装教程
  13. 安卓机型app的编译与反编译 apk文件的简单说明与解析
  14. C# SQLHelper类
  15. 飞秒激光制备量子计算机,制备出世界最大规模光量子计算芯片
  16. 对赌协议的经典案例分析
  17. Python3,多线程爬取某瓣小电影~ ~
  18. 2018 SUCTF招新赛
  19. html网页的主题标签是什么6,HTML标签以及各个标签属性大全(网页制作必备)
  20. 基于Python爬虫的大众点评商家评论的文本挖掘

热门文章

  1. web安全day3:文件共享服务器配置、共享权限和445端口
  2. 解决Windows10家庭版系统无法安装Docker Desktop问题
  3. python删除列表第一个,在Python中删除列表的第一个元素
  4. 第一方数据,第二方数据,第三方数据:你了解多少?
  5. 官方版win10重装系统(官方win10 镜像)
  6. Centos8上安装中文字符集zh_CN.UTF-8
  7. 学习TypeScript4这一篇就够了
  8. 不小心执行了rm -f,如何恢复?
  9. Intel处理器家族及命名规则
  10. 系统时间无法同步 rpc服务器不可用,win7系统时间同步出错RPC服务器不可用的解决手段...