webgl学习之路(三)——透视投影矩阵的推导过程
关于透视投影矩阵的讲解,网上有不少教程,但是有一点大家基本上都没有讲清楚:就是z轴坐标(这里的Z轴相当于景深)的推导过程,基本上是一笔带过。
下面先从头开始讲推导过程,再慢慢说Z轴的推导过程。
透视投影如下图:
透视投影的过程如下:所观察的物体在一个半截面的方锥形中,设坐标为P,将P投影到近截面上,坐标为P’;如下图:
推导P'很简单,就是几何概念相似三角形,推导过程如下图:
大家注意,P’处的Z'坐标就是从视点O到近截面的距离。
但是大家可以考虑这样一个问题:那所有的物体在近截面的投影Z坐标都一样,那这样Z坐标就会失去它的作用:确定物体的远近距离。所以此时Z’先保留Z的原本值,不取OQ’这个值。
在视点O处,就是摄影机的位置,有一个长度为1的正方体(概念上叫视锥体),P'再次归一化(归一化的概念大家请看齐次坐标学习!)到这个正方体中(有点像咱们在电脑上处理图片的时候,把图片缩小到一个长和宽都为1的相框里),如下图:
推导P'’的过程如下:
首先先明确一个概念:近截面的长为W,宽为H,那么近截面的X轴正方向坐标的最大坐标(H/2, 0),归一化到正方体上的坐标是(1,0),同理负坐标(-H/2, 0)对应到(-1,0),同理Y轴正方向(0, W/2)归一化到(0,1),Y轴负方向(0, -W/2)归一化到(0,-1)。
又因为P''和P'的坐标关系是线性关系
同时
所以可以推导出
所以
同理可以推导出X''坐标
至此我们推导出了P''处X''和Y‘’,我们还没有推导出Z'',先看P‘’处坐标
此时,我们就需要齐次坐标了,将P''改为齐次坐标
同时我们设透视投影矩阵为
可得
大家如果看网上的资料,上面的推导过程大家可能都说的一样,但下面这一点我是基本上没看见有人说的,那就是因为在齐次坐标中,如下图
即:P‘’*W = P
然后我们另W=-Z,可得
代入透视投影矩阵:
所以可得Z‘’和Z关系:
再有
可得
所以透视投影矩阵为:
webgl学习之路(三)——透视投影矩阵的推导过程相关推荐
- 我的webgl学习之路(一)
我的webgl学习之路 (一) 做项目中偶然需要移动端3d展示,所以学习了threejs;但是有着各种限制,还有就是项目要达到好的效果肯定是需要后期处理等等,所以展开了我学习webgl之路,我刚开始毫 ...
- 3D数学-裁剪空间与透视投影矩阵的推导
3D数学-裁剪空间与透视投影矩阵的推导 透视投影矩阵的变换本质,是将视锥体变换到裁剪空间中 视锥体的具有六个面,近裁剪面,远裁剪面,左裁剪面,右裁剪面,上裁剪面,下裁剪面 所有超出视锥体的都会被舍弃, ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...
- typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)
提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...
- 多智能体强化学习入门(三)——矩阵博弈中的分布式学习算法
一.引言 多智能体系统一直在学术界或者工业届都是一个热点.其核心领域是关于如何将系统采用分布式的算法控制.在分布式算法中,没有一个中心节点进行总体控制,每个智能体通过与环境交互自己学习自己的最优策略, ...
- 3D数学之透视投影矩阵的推导
视锥体 如图,近截面与远截面之间构成的这个四棱台就是视锥体,而透视投影矩阵的任务就是把位于视锥体内的物体的顶点X,Y,Z坐标映射到[-1,1]范围.这就相当于把这个四棱台扭曲变形成一个立方体.这个立方 ...
- 一分钟详解「本质矩阵」推导过程
文章目录 前言 一 本质矩阵如何推导 二 本质矩阵的意义 三 本质矩阵的求解 四 扩展--基本矩阵 前言 两幅视图存在两个关系:第一种,通过对极几何,一幅图像上的点可以确定另外一幅图像上的一条直线:另 ...
- 三点插值公式的推导过程
参考原文链接https://blog.csdn.net/m0_54563743/article/details/116096015 第四章 插值法与曲线拟合 4.1.拉格朗日插值法 拉格朗日插值法可以 ...
- 函数式编程学习之路(三)
入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...
最新文章
- 避无可避:Mesos安全问题的几点思考
- JAVA浮点数使用陷阱:2.7 和 8.1 / 3 比较
- js获取节点的DOM操作
- java中为final变量赋值的几种方式
- python迭代计算_Python递归和迭代
- mac 设置终端样式_如何将终端样式设置为freeCodeCamp或任何您想要的样式
- python3中map的用法_python3内置函数map
- 读取Excel任务列表并显示在Outlook日历上
- Android-JNI开发系列《九》实战-Bitmap处理实现底片灰度化黑白化暖冷色调等效果
- Ubuntu如何安装GIMP软件
- 暴汗~莫明其妙收到一张汇款单......
- python flask倒计时_Flask实践:计时器
- 【转帖】mysql锁机制
- cs1.5最新服务器地址,服务器地址
- vue中 gojs 的使用及去除水印
- 网上二手服务器能做家用电脑吗?
- 关于运行时错误429 ActiveX无法创建对象的错误
- 教育行业如何做好数据治理?
- 如何将中文地址翻译成英文
- M11289生鲜商城
热门文章
- windows下批量添加用户
- jQuery带背景切换登录注册表单
- 数据库分库分表中间件对比(很全)
- 通过微软实习面试......
- dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例
- Jvm面试题及答案(300道 Jvm面试题大全带答案)
- 移动端拍照上传到服务器
- Python中的difflib模块(文本对比)
- 原创】OllyDBG 入门系列(一)-认识OllyDBG
- 工业机器人、工艺夹具、送料机械手、电火花镗磨机床、半自动钻床、机械手、套筒、铣床升降台、精密播种机、卧式组合钻床、六自由度微动机器人、花生收获机、山茶采摘平台、车载起重机、锤式破碎机、螺旋输送机……