投影矩阵求逆

什么是投影矩阵的逆矩阵呢?从几何意义上来讲,就是把投影到NDC的坐标转化为观察空间下的坐标。

假设y方向的视域角\alpha,视域的宽高比为r,投影平面距离摄像机的距离为d,视域的宽为w,高为h,近剪裁面距离摄像机的距离为n,远剪裁面距离摄像机的距离为f。首先有:
r= \frac{w}{h}

tan\frac{\alpha}{2} = \frac{h}{d}

假设任一点P,投影后的坐标为(x, y, z),观察空间下的坐标为(x', y', z'),那么有:
\dfrac{x'}{wx} = \dfrac{z'}{d}

\dfrac{y'}{hy} = \dfrac{z'}{d}

这里,分别给xy乘以wh是因为NDC的坐标是归一化过的,要先还原到[-w, w][-h, h]的取值范围。

综合上式,求出x'y'
x' = \dfrac{z'wx}{d} = z'rtan(\dfrac{\alpha}{2})x

y' = \dfrac{z'hy}{d} = z'tan(\dfrac{\alpha}{2})y

注意到上述求得的x'y'里的分母中均包含z',为了用矩阵形式来表达逆投影变换,必须要借助齐次坐标,对(x',y',z',1)各除以z',即转换为(\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, \dfrac{1}{z'})。 有:
[x, y, z, 1] \cdot \begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & A \\ 0 & 0 & 1 & B \end{bmatrix} = [\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, Az+ B]
由投影变换可知,z可以写成:
z = \dfrac{\dfrac{f}{f - n}z' + \dfrac{nf}{n - f}}{z'}
由此可知,解得\dfrac{1}{z'}
\dfrac{1}{z'} = \dfrac{n - f}{nf}z + \dfrac{1}{n}
也就有:
\begin{cases} A = \dfrac{n - f}{nf} \\ B = \dfrac{1}{n} \end{cases}
最终得到投影矩阵的逆矩阵为:
\begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & \dfrac{n - f}{nf} \\ 0 & 0 & 1 & \dfrac{1}{n} \end{bmatrix}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2...
    高丕基阅读 4,880评论 3 5
  • 三维几何的矩阵变换: 平移变换: 比例变换: 绕X轴旋转: 绕Y轴旋转: 绕Z轴旋转: X轴反射变换: Y轴反射变...
    cain_huang阅读 6,815评论 2 6
  • 前言 在前两章,总结有顶点坐标,纹理坐标。实际上在这之上还有更多的坐标。作者经过学习后,在本文总结一番。 上一篇:...
    yjy239阅读 2,331评论 1 1
  • 转载自VR设计云课堂[https://www.jianshu.com/u/c7ffdc4b379e]Unity S...
    水月凡阅读 1,140评论 0 0
  • 上一篇文章《OpenGL入门(三)-- OpenGL坐标系解析与坐标变换》,我们大概了解了OpenGL坐标系的一些...
    Daniel_Harvey阅读 17,693评论 0 6

友情链接更多精彩内容