关于透视投影矩阵的讲解,网上有不少教程,但是有一点大家基本上都没有讲清楚:就是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学习之路(三)——透视投影矩阵的推导过程相关推荐

  1. 我的webgl学习之路(一)

    我的webgl学习之路 (一) 做项目中偶然需要移动端3d展示,所以学习了threejs;但是有着各种限制,还有就是项目要达到好的效果肯定是需要后期处理等等,所以展开了我学习webgl之路,我刚开始毫 ...

  2. 3D数学-裁剪空间与透视投影矩阵的推导

    3D数学-裁剪空间与透视投影矩阵的推导 透视投影矩阵的变换本质,是将视锥体变换到裁剪空间中 视锥体的具有六个面,近裁剪面,远裁剪面,左裁剪面,右裁剪面,上裁剪面,下裁剪面 所有超出视锥体的都会被舍弃, ...

  3. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...

  4. typescript学习之路(三) —— ts定义类的方法(包含es5以及es6的定义类)

    提起类,不得不说一下,强类型编程语言,如php,java,c++等都有类的概念.而js作为一门弱类型语言,是没有类这个概念的,虽然也能模拟类的实现,但总归不是类.so,ts也只是模拟类而已,使得更贴切 ...

  5. 多智能体强化学习入门(三)——矩阵博弈中的分布式学习算法

    一.引言 多智能体系统一直在学术界或者工业届都是一个热点.其核心领域是关于如何将系统采用分布式的算法控制.在分布式算法中,没有一个中心节点进行总体控制,每个智能体通过与环境交互自己学习自己的最优策略, ...

  6. 3D数学之透视投影矩阵的推导

    视锥体 如图,近截面与远截面之间构成的这个四棱台就是视锥体,而透视投影矩阵的任务就是把位于视锥体内的物体的顶点X,Y,Z坐标映射到[-1,1]范围.这就相当于把这个四棱台扭曲变形成一个立方体.这个立方 ...

  7. 一分钟详解「本质矩阵」推导过程

    文章目录 前言 一 本质矩阵如何推导 二 本质矩阵的意义 三 本质矩阵的求解 四 扩展--基本矩阵 前言 两幅视图存在两个关系:第一种,通过对极几何,一幅图像上的点可以确定另外一幅图像上的一条直线:另 ...

  8. 三点插值公式的推导过程

    参考原文链接https://blog.csdn.net/m0_54563743/article/details/116096015 第四章 插值法与曲线拟合 4.1.拉格朗日插值法 拉格朗日插值法可以 ...

  9. 函数式编程学习之路(三)

    入门: 函数式编程之艰难,在于这玩意更接近数学,就是数学之"用",大牛们在云端,玩纯数学去了,弄出一堆公式及概念,码农们爬在地上,辛苦耕耘,要的是看得见摸得着的,函数式编程就是要打 ...

最新文章

  1. 避无可避:Mesos安全问题的几点思考
  2. JAVA浮点数使用陷阱:2.7 和 8.1 / 3 比较
  3. js获取节点的DOM操作
  4. java中为final变量赋值的几种方式
  5. python迭代计算_Python递归和迭代
  6. mac 设置终端样式_如何将终端样式设置为freeCodeCamp或任何您想要的样式
  7. python3中map的用法_python3内置函数map
  8. 读取Excel任务列表并显示在Outlook日历上
  9. Android-JNI开发系列《九》实战-Bitmap处理实现底片灰度化黑白化暖冷色调等效果
  10. Ubuntu如何安装GIMP软件
  11. 暴汗~莫明其妙收到一张汇款单......
  12. python flask倒计时_Flask实践:计时器
  13. 【转帖】mysql锁机制
  14. cs1.5最新服务器地址,服务器地址
  15. vue中 gojs 的使用及去除水印
  16. 网上二手服务器能做家用电脑吗?
  17. 关于运行时错误429 ActiveX无法创建对象的错误
  18. 教育行业如何做好数据治理?
  19. 如何将中文地址翻译成英文
  20. M11289生鲜商城

热门文章

  1. windows下批量添加用户
  2. jQuery带背景切换登录注册表单
  3. 数据库分库分表中间件对比(很全)
  4. 通过微软实习面试......
  5. dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例
  6. Jvm面试题及答案(300道 Jvm面试题大全带答案)
  7. 移动端拍照上传到服务器
  8. Python中的difflib模块(文本对比)
  9. 原创】OllyDBG 入门系列(一)-认识OllyDBG
  10. 工业机器人、工艺夹具、送料机械手、电火花镗磨机床、半自动钻床、机械手、套筒、铣床升降台、精密播种机、卧式组合钻床、六自由度微动机器人、花生收获机、山茶采摘平台、车载起重机、锤式破碎机、螺旋输送机……