如果将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出一些复杂的图形了
如果将OpenGL的MVP矩阵设置为单位阵相关推荐
- 【20211127】【Python】Python中常用的矩阵操作,单位阵、对角阵、矩阵的特征值和特征向量、矩阵的协方差
一.生成单位阵 numpy.identity(N) 和 numpy.eye(N) 都可以用来产生单位阵,且产生的单位阵都是 np.array() 类型,矩阵元素都是 float 型. import n ...
- 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )
文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...
- C++ opengl 对OpenGL中矩阵设置的初步认识
对OpenGL中矩阵设置的初步认识: 在入门级的代码里面,通常在初始化OpenGL中可以看到这样的代码: void init(){glMatrixMode(GL_PROJECTION);gluPers ...
- 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )
文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...
- opengl glm库 改变mvp矩阵 实现3D漫游
上一篇glm来实现的mvp矩阵变换实现opengl渲染模型,讲到了如何利用glm库实现mvp矩阵,这篇主要讲解下,我们如何利用glm库的平移.旋转矩阵实现一个简单的3d漫游的效果. 原理 移动 cam ...
- 深入理解OpenGL之投影矩阵推导
深入理解OpenGL之投影矩阵推导 OpenGL流水线中的投影矩阵以及坐标变换 OpenGL中,投影矩阵在Vertex shader中使用,用于变换顶点.一般和Model, View矩阵结合成MVP矩 ...
- OpenGL中摄像机矩阵的计算原理
OpenGL中摄像机矩阵的计算原理 熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄 ...
- OpenGL的glViewPort窗口设置函数实现分屏
OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPo ...
- osgEarth的Rex引擎原理分析(九十)如何设置高度单位(m、km等)
目标:(八十二)中的问题160 默认的单位是m,如果要修改为其它单位,需要直接修改profile文件,或者设置缩放比例 <profile srs="+proj=merc +a=6378 ...
最新文章
- 《系统集成项目管理工程师》必背100个知识点-56X理论和Y理论
- html标签的下一级遍历,HTML遍历某个元素下的子元素
- CodeForces - 1370E Binary Subsequence Rotation(思维)
- qt调用opencv汇总(2)
- 基于ARM的车牌识别技术研究与实现
- django传递URL到某个app的urls.py文件中
- mongodb 良贴
- Linux iptables防火墙详解(二)——iptables基本配置
- 运营商网络IP地址分配原则
- 为什么我们需要企业架构?
- 高质量发展-协调发展指标体系构建及测算
- java网页开发中的乱码问题解决(过滤器)
- 鸿蒙大陆罪恶深渊哪里出,库库马力
- 给全栈人员,如何用ps让图片不改变尺寸分辨率大小的情况下,让图片质量变的更小
- 人工智能-语音交互-NLP自然语言(三) 语法-敲黑板
- python替换 输入手机号_python file模块 替换输入内容脚本
- c语言程序设计作业心得,C语言程序设计实习心得体会
- 【json】JsonFX
- Spring Security Oauth2 授权码模式下 自定义登录、授权页面
- redis实战教程_Redis详解新手教程_Redis入门到精通