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

如果将OpenGL的MVP矩阵设置为单位阵

如果将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出一些复杂的图形了

相关文章:

  • 2020智算之道复赛 C - 有向无环图(思维+二进制拆分)
  • 技术人生
  • 2020智算之道复赛 D - 分数(素筛)
  • 无stencil buffer,绘制半透明planar shadow的一种方法
  • 2020牛客暑期多校第十场 A - Permutation(思维)
  • 2020牛客暑期多校第十场 E - Game(思维)
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之30---基于BREW的PTT服务...
  • HDU - 6805 Deliver the Cake(拆点+最短路)
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之31---LBS基于BREW的位置服务...
  • STL之multiset
  • Java网络编程从入门到精通(16):客户端套接字(Socket)的超时
  • 2020牛客暑期多校第十场 C - Decrement on the Tree(树的思维好题)
  • 页面校验用通用js
  • SPOJ - FIBOSUM Fibonacci Sum(递推公式/矩阵快速幂)
  • 保证唯一性只能靠建唯一索引
  • php的引用
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • AngularJS指令开发(1)——参数详解
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • LeetCode29.两数相除 JavaScript
  • ng6--错误信息小结(持续更新)
  • PHP那些事儿
  • Python_OOP
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • sessionStorage和localStorage
  • SQLServer之索引简介
  • vue-loader 源码解析系列之 selector
  • 安装python包到指定虚拟环境
  • 成为一名优秀的Developer的书单
  • 关于List、List?、ListObject的区别
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于axios的vue插件,让http请求更简单
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 少走弯路,给Java 1~5 年程序员的建议
  • 设计模式(12)迭代器模式(讲解+应用)
  • 用mpvue开发微信小程序
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • #pragma 指令
  • #每天一道面试题# 什么是MySQL的回表查询
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)JAVA中的堆栈
  • (转)德国人的记事本
  • *2 echo、printf、mkdir命令的应用
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 设置默认首页
  • .Net7 环境安装配置
  • .net下的富文本编辑器FCKeditor的配置方法
  • .sys文件乱码_python vscode输出乱码