当前位置: 首页 > news >正文

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解

右手坐标系

右手坐标系与左手坐标系都是三维笛卡尔坐标系,他们唯一的不同在于z轴的方向,如下图,左边是左手坐标系,右边是右手坐标系
在这里插入图片描述
OpenGL中一般用的是右手坐标系

1.模型坐标系(Local Space)
模型坐标系(或者叫本地坐标系、局部坐标系,本文后面统一称模型坐标系)顾名思义,就是以物体的正中心为原点的坐标系,通常,我们从三维软件中导出的模型基本是局部坐标系,以模型的中心为原点,其他顶点相对于模型的原点来定义。
2. 世界坐标系 (World Space)
世界坐标系就是全局的那个坐标系,我们的物体,以及后面观察物体用到的摄像机全都在世界坐标系中,原点为(0,0,0)
3. 视图坐标系(View Space)
视图坐标系也就是在世界坐标系中通过假想一个摄像机或者观察者的存在,以摄像机的位置为中心原点,然后从摄像机这个观察者的角度去重新计算世界中的物体相对于摄像机原点的坐标

什么是MVP矩阵?

MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。

 gl_Position = projection * view * model * vec4(x,y,z, 1.0);

模型(Model)矩阵

模型矩阵主要做的旋转、缩放、平移操作
案例:
按世界坐标(0,0,0)为原点,绘制一个正方体如下图,这时候,模型坐标系和世界坐标系原点是重合的,A为正方体的左上前方位置坐标。对应坐标(-0.5,0.5,0.5)
在这里插入图片描述

如果,绘制10个,分别进行旋转、平移、缩放,对应如下图,对应的每个3维正方体,对应世界坐标的位置(0,0,0),对应的A的坐标,模型坐标系还是(-0.5,0.5,0.5),那个世界坐标呢?就是A(-0.5,0.5,0.5)进行旋转、平移、缩放的坐标
在这里插入图片描述
对应具体矩阵看该章节
第四章 OpenGL ES 基础-位移、缩放、旋转原理
[

观察(View)矩阵

OpenGL中其实不存在专门的相机,view矩阵的目的就是确定物体与相机的相对位置。注意,此处的物体指的是全部的物体形成的集合,也就是案例中的十个正方体形成的组,而不是某个单一物体
在这里插入图片描述
先简单的把相机的位置按世界坐标系相对相机cameraPos(0,0,-3)按轴进行观察,想看到物体看起来变得更远,可以此时物体位于相对相机(0,0,-5),相机位置在z轴更远,正方体更小。这里说明一下视图坐标系,如果按视图坐标系原点cameraTarget(0,0,0),世界坐标系的原点位置就是(0,0,-3)。上图相机观察方向可以自己补充,相对的移动旋转等操作

glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, -3.0f);
glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);

对应的矩阵变化可以LookAt观察矩阵https://blog.csdn.net/qinze5857/article/details/130505925

投影(Projection)矩阵

投影矩阵为了把3D的渲染在2D的屏幕
第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵

上面文章有参考,该文章https://blog.csdn.net/Lindy_pass/article/details/132408991

http://www.lryc.cn/news/327979.html

相关文章:

  • 前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇
  • C++11入门手册第一节,学完直接上手Qt(共两节)
  • Docker部署MinIO对象存储服务
  • 基于Echarts的超市销售可视化分析系统(数据+程序+论文)
  • 使用ai智能写作场景之gpt整理资料,如何ai智能写作整理资料
  • C/C++ 内存管理
  • android pdf框架-10,相册浏览
  • 基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。
  • 数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)
  • Jackson 2.x 系列【6】注解大全篇二
  • 在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料
  • 【linux】基础IO |文件操作符
  • 探索 2024 年 Web 开发最佳前端框架
  • 解决: MAC ERROR [internal] load metadata for docker.io/library/openjdk:17
  • View事件分发
  • 监听页面的使用时间
  • 【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】
  • Redis与数据库的一致性
  • 使用maxwell实时同步mysql数据到kafka
  • 知识图谱与大数据:区别、联系与应用
  • Nagios工具
  • 微信小程序全局数据共享
  • 算法训练营第24天|回溯算法理论基础 LeetCode 77.组合
  • pip永久修改镜像地址
  • RK3588平台开发系列讲解(硬件篇-功能外设2)
  • SpringBoot学习记录
  • 财富池指标--通达信顾比均线实战指标免费源码
  • AJAX(一):初识AJAX、http协议、配置环境、发送AJAX请求、请求时的问题
  • idea常用的快捷键总结:
  • LeetCode 热题 100 题解(一):哈希部分