OpenGL 矩阵变换GLM库的使用
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库的使用相关推荐
- OpenGL矩阵运算——GLM库的使用
GLM库简介 OpenGL没有内建矩阵运算方法,常用的第三方库为GLM.GLM是OpenGL Mathematics的缩写.作为一个header only库,GLM只要包括了相应的头文件就可以使用它提 ...
- 【OpenGL】glm库的配置
下载glm库,可点击这里直接下载 下载完后解压一下,把整个glm文件夹复制到你的项目所在文件夹下,如下图所示. 这个文件是glm父文件夹,不是子文件夹,该文件夹下还有一个glm子文件夹 右击你的项目, ...
- opengl glm库 改变mvp矩阵 实现3D漫游
上一篇glm来实现的mvp矩阵变换实现opengl渲染模型,讲到了如何利用glm库实现mvp矩阵,这篇主要讲解下,我们如何利用glm库的平移.旋转矩阵实现一个简单的3d漫游的效果. 原理 移动 cam ...
- OpenGL-利用矩阵变换(缩放、旋转、位移),使用glm库
目录 1. 矩阵知识总结 缩放 旋转 位移 2. glm使用方法 安装 使用 位移(使用translate函数) 旋转(使用rotate及radians函数) 缩放(使用scale函数) 在你的cpp ...
- OpenGL实用开源库 汇总
https://blog.csdn.net/huawenguang/article/details/1393904 https://blog.csdn.net/hbtj_1216/article/de ...
- OpenGL 矩阵变换
origin refer :http://www.songho.ca/opengl/gl_transform.html#modelview OpenGL 矩阵变换 Related Topics: Op ...
- 【OpenGL】使用OpenGL的GLU库绘制BSpline曲线
[OpenGL]使用OpenGL的GLU库绘制BSpline曲线. 1.绘制目标 2.核心代码 3.运行结果 1.绘制目标 使用OpenGL的GLU库绘制BSpline曲线. 2.核心代码 /// T ...
- 【OpenGl】openGL 诸多库之间关系 及 环境配置
[OpenGl]openGL 诸多库之间关系 及 环境配置 最近一直在学习OpenGL,但是看OpenGL编程指南不同版本之间使用一堆不同的库,概念名称全都混搅起来了,越看越糊涂,于是整理了一下Ope ...
- 有趣又好玩的glm库
一.glm的优点 glm是一个发展了十年以上的数学库,这个库很不错.很多教材,书籍,资料大量使用glm,了解glm有助于阅读这些资料. 1.模仿glsl的接口 这个实在是非常方便理解和记忆,你不需要在 ...
- OpenGL编程指南3:GLUT:OpenGL使用工具库
1.前言 我们知道的,OpenGL包含了很多的渲染函数,这些函数的设计目的就是独立与任何窗口系统或操作系统.因此,他并没有包含打开窗口或者从键盘或鼠标读取事件的函数.遗憾的是,如果连最基本的打开窗口的 ...
最新文章
- C++ : 矩阵初等行变换,化成最简矩阵
- SAP Spartacus的defaultUrlMatcher
- springmvc跨域问题
- Magicodes.SwaggerUI 已支持.NET Core 3.1
- 广州程序员辞职创业卖菠萝油,放弃30万年薪
- 从Scala2.13.0开始废弃了一些方法
- 机器学习之 特征工程
- 对称加密和非对称加密的理解
- docker-machine create --driver virtualbox myvm1 创建失败
- HDU-2082 找单词 母函数
- 地图找房(四)02——小区房源列表展示和隐藏 小区房源列表数据填充 接口数据-图片地址的基准路径
- SQL Server2000安装教程
- 安卓机型app的编译与反编译 apk文件的简单说明与解析
- C# SQLHelper类
- 飞秒激光制备量子计算机,制备出世界最大规模光量子计算芯片
- 对赌协议的经典案例分析
- Python3,多线程爬取某瓣小电影~ ~
- 2018 SUCTF招新赛
- html网页的主题标签是什么6,HTML标签以及各个标签属性大全(网页制作必备)
- 基于Python爬虫的大众点评商家评论的文本挖掘
热门文章
- web安全day3:文件共享服务器配置、共享权限和445端口
- 解决Windows10家庭版系统无法安装Docker Desktop问题
- python删除列表第一个,在Python中删除列表的第一个元素
- 第一方数据,第二方数据,第三方数据:你了解多少?
- 官方版win10重装系统(官方win10 镜像)
- Centos8上安装中文字符集zh_CN.UTF-8
- 学习TypeScript4这一篇就够了
- 不小心执行了rm -f,如何恢复?
- Intel处理器家族及命名规则
- 系统时间无法同步 rpc服务器不可用,win7系统时间同步出错RPC服务器不可用的解决手段...