如果将OpenGL的MVP矩阵设置为单位阵,会发生什么?

opengl的几个坐标空间: object space-> eye space-> clip space -> NDC -> WC

那么,MVP矩阵即model-view-projection matrix是将object sapce的vertex直接变换到clip space

即 (X,Y,Z) -> (Xc, Yc, Zc, Wc)  如果点在视锥体内则满足-Wc<=Xc<=Wc; -Wc<=Yc<=Wc; -Wc<=Zc<=Wc;

所以如果MVP matrix是identity matrix,对于object space中的顶点(X,Y,Z) (其实是(X,Y,Z,1)因为OpenGL中w默认为1.0),进行变换:

(X,Y,Z,1)*I = (X,Y,Z,1) 注意:为了书写方便这儿使用行向量了,如我们所知OpenGL是这样变换点的P'=MP

也就是说MVP为单位阵的情况下,在object space用(X,Y,Z)表达的一个vertex就是在clip space中用(Xc,Yc,Zc,Wc)表达的一个vertex,且Wc=1

那么这有什么用?最常见的用法是画一个全屏的矩形。想象一下,你在一个x,y,z坐标都是[-1,1]的空间中,x,y平面对应着屏幕,z轴是深度,z=-1的点在near clip plane上,z=1的点在far clip plane上,所以这样指定4个点,画出的矩形将覆盖屏幕,且z值离camera最近:

glVertex3i (-1, -1, -1);

glVertex3i (1, -1, -1);

glVertex3i (1, 1, -1);

glVertex3i (-1, 1, -1);

需要区别的是,这个时候的z还没有经过depth range的映射(那是在view port变换中进行的),且这儿z在[-1,1]间是因为w=1,不要混淆。

此时,可以通过buffer的mask做一些操作,比如先关闭color buffer,只更新depth buffer,然后画全屏矩形,通过设置合适的z值进行深度测试(一般要关闭z write)就可以mask出一些复杂的图形了

如果将OpenGL的MVP矩阵设置为单位阵相关推荐

  1. 【20211127】【Python】Python中常用的矩阵操作,单位阵、对角阵、矩阵的特征值和特征向量、矩阵的协方差

    一.生成单位阵 numpy.identity(N) 和 numpy.eye(N) 都可以用来产生单位阵,且产生的单位阵都是 np.array() 类型,矩阵元素都是 float 型. import n ...

  2. 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

    文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...

  3. C++ opengl 对OpenGL中矩阵设置的初步认识

    对OpenGL中矩阵设置的初步认识: 在入门级的代码里面,通常在初始化OpenGL中可以看到这样的代码: void init(){glMatrixMode(GL_PROJECTION);gluPers ...

  4. 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

    文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...

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

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

  6. 深入理解OpenGL之投影矩阵推导

    深入理解OpenGL之投影矩阵推导 OpenGL流水线中的投影矩阵以及坐标变换 OpenGL中,投影矩阵在Vertex shader中使用,用于变换顶点.一般和Model, View矩阵结合成MVP矩 ...

  7. OpenGL中摄像机矩阵的计算原理

    OpenGL中摄像机矩阵的计算原理 熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄 ...

  8. OpenGL的glViewPort窗口设置函数实现分屏

    OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPo ...

  9. osgEarth的Rex引擎原理分析(九十)如何设置高度单位(m、km等)

    目标:(八十二)中的问题160 默认的单位是m,如果要修改为其它单位,需要直接修改profile文件,或者设置缩放比例 <profile srs="+proj=merc +a=6378 ...

最新文章

  1. 《系统集成项目管理工程师》必背100个知识点-56X理论和Y理论
  2. html标签的下一级遍历,HTML遍历某个元素下的子元素
  3. CodeForces - 1370E Binary Subsequence Rotation(思维)
  4. qt调用opencv汇总(2)
  5. 基于ARM的车牌识别技术研究与实现
  6. django传递URL到某个app的urls.py文件中
  7. mongodb 良贴
  8. Linux iptables防火墙详解(二)——iptables基本配置
  9. 运营商网络IP地址分配原则
  10. 为什么我们需要企业架构?
  11. 高质量发展-协调发展指标体系构建及测算
  12. java网页开发中的乱码问题解决(过滤器)
  13. 鸿蒙大陆罪恶深渊哪里出,库库马力
  14. 给全栈人员,如何用ps让图片不改变尺寸分辨率大小的情况下,让图片质量变的更小
  15. 人工智能-语音交互-NLP自然语言(三) 语法-敲黑板
  16. python替换 输入手机号_python file模块 替换输入内容脚本
  17. c语言程序设计作业心得,C语言程序设计实习心得体会
  18. 【json】JsonFX
  19. Spring Security Oauth2 授权码模式下 自定义登录、授权页面
  20. redis实战教程_Redis详解新手教程_Redis入门到精通

热门文章

  1. Google网页加速器的工作原理
  2. 研究生科研素养提升的测试题
  3. Mac升级node版本
  4. 梨子的功效与作用_梨的9种不为人知的价值
  5. 怎么把半角引号替换成全角_巧妙批量互换全角与半角双引号
  6. directx是什么?
  7. 微信公众号js接口安全域名的MP_verify_*.txt文件的放置路径
  8. 让AI拥有好奇心,它就可以一直看电视了
  9. 专访百度AI交互设计院院长关岱松:感知类学科的尽头都是心理学 | 甲子光年
  10. 空间分辨率和灰度分辨率