首页 > 其他 > 详细

透视投影矩阵推导

时间:2017-02-04 17:55:36      阅读:427      评论:0      收藏:0      [点我收藏+]

  计算机图形学中,建模自小孔成像原理的透视摄像机是常用的摄像机模型。然而,由于光栅化渲染中的几何变换多基于四阶方阵与齐次坐标表示的向量的乘法,而四阶方阵只能表示仿射变换,无法实现透视摄像机“近大远小”的特性(仿射变换维持平行线相互平行,而“近大远小”不具有该性质),因此透视摄像机模型的实现要多费一番功夫。

1. 基本原理

  小孔成像是大多数人所熟知的最简单的成像原理之一,而常用的透视摄像机就是把小孔和屏幕(成像平面)的顺序交换,维持相似关系不变,因而这一模型达到了拟真的效果而被广泛应用。

技术分享技术分享

小孔成像与简单的透视摄像机模型

  透视摄像机模型用在光栅化渲染管线的结果,就是透视投影过程。考虑简图——

技术分享

  图中从e点(原点)发出的一条射线上所有在view plane之后的点都被投影到view plane与该射线的交点。由相似关系显然有

技术分享

这就得到了所需的映射关系:

技术分享

  显然技术分享并非仿射变换,也就不能直接借助四阶方阵乘法来实现。这时齐次坐标表示的另一个作用就表现出来了,设齐次坐标技术分享表示点技术分享,定义全体技术分享的齐次坐标上的等价关系:技术分享当且仅当技术分享,则有技术分享,该式的右边正是常用的齐次坐标中点的表示方法(技术分享)。这样一来,这一等价关系为我们提供了“除法”的能力,也扩充了仿射变换的能力。注意到,仿射变换可以将技术分享技术分享技术分享中的任意一个分量设置为技术分享,而该方法允许这样的变换形式——

技术分享

注意到透视投影需要的变换是(假设viewing transform后摄像机面向+z方向)

技术分享

而要将技术分享映射为技术分享是很容易的,只需要矩阵乘法——

技术分享

然后使技术分享化为技术分享即可,这一过程称为齐次化。

  这就是齐次坐标投影的基本原理。

2. 完整的投影矩阵推导

  现实中使用的投影矩阵因为考虑了摄像机视截体,形式更加复杂。考虑下图中的透视投影变换——

技术分享

  显然该变换把近平面(near plane)区域投影到xOy平面上的单位正方形。在这里可以把该变换过程拆分成三个子过程:完成“透视”投影、把near plane上的视窗变换为单位正方形、把near planez坐标变换为0。第一个过程可以利用矩阵乘法:

技术分享

其中n与f分别是视截体近平面与远平面与原点的距离。技术分享的第三行有些特殊。它的作用是保持被投影到near plane上同一点的各点间的深度关系不变(这样才能在稍后做depth test)。此外,由于技术分享(齐次化过程),位于near plane上的点的技术分享技术分享坐标都不会变化。

   然后把near plane上的有效区域变换为单位正方形。假设near plane上有效区域的宽度为技术分享,高度为技术分享,则一个简单的scaling即可解决问题——

技术分享

  再把near plane挪到xOy平面上,一个平移就能解决问题;另外深度的变化范围应该被固定在0~1之间。注意到

技术分享

故只需要令

技术分享

即可得

技术分享

  最后是一直没有进行的齐次化过程,即

技术分享

 

 

 

 

 

 

这就求得了所需的透视投影变换矩阵——

技术分享

验证一下:

技术分享

满足透视投影的要求。使用时,只需要将技术分享乘上待投影的坐标,再齐次化即可。

3. 其他

  在一些别的条件/要求下,透视投影矩阵可能具有与此稍微不同的形式。譬如,OpenGL采用右手系,通常其viewing transform把坐标变换到camera space,其中camera是指向-z的(本例使用的是+z);此外,OpenGL中的z值被映射到-1~+1(本例使用的是0~1),但是,总体的推导思路是相同的。可以证明

技术分享

是一个满足这些要求的投影矩阵(这里,l、r、t、b是视截体近平面的左、右、上、下坐标,本例中没有考虑这种不对称的情况)。

 

透视投影矩阵推导

原文:http://www.cnblogs.com/AirGuanZ/p/6365702.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!