图形学的数学基础(十三):mvp变换(中)

278 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

图形学的数学基础(十三):mvp变换(中)

本章我们将实现mvp变换中的投影变换(projectionTransformprojection Transform),投影变换有两种方式,分别为正交投影(OrthographicprojectionOrthographic projection)和透视投影(perspectiveprojectionperspective projection).两种投影方式最终都将视景体内的物体投影到近平面上(将视图从相机空间映射到[,][-1,1]^3),也是3D空间映射到2D屏幕空间最为关键的一步。的标准立方体中,如下图所示:

3.png

正交投影(OrthographicprojectionOrthographic projection

正交投影会保持几何图元相对位置关系不变,平行的线永远平行。不满足透视关系。又叫做平行投影。

正交投影的“视景体”是一个长方形,由 top bottom left right near far6个参数定义。如下图所示:

4.png

如何将该长方体映射到[1,1]3[-1,1]^3呢?和Mview\textbf{M}_{view}类似,我们先将立方体中心移动到原地,然后根据每个方向的长度,缩放到[-1,1]之间.即MscaleMtranslate\textbf{M}_{scale}\textbf{M}_{translate}.需要一次平移变换 + 一次缩放变换.

5.jpg

Mtranslate\textbf{M}_{translate}平移矩阵

根据正交投影视景体的6个参数,我们可以计算出它的中心位置.即:

center=[r+l2t+b2n+f2]\textbf{center} = \begin{bmatrix} \dfrac{r+l}{2}\\ \dfrac{t+b}{2}\\ \dfrac{n+f}{2}\\ \end{bmatrix}

Mtranslate=[100r+l2010t+b2001n+f20001]\textbf{M}_{translate} = \begin{bmatrix} 1&0&0&-\dfrac{r+l}{2}\\ 0&1&0&-\dfrac{t+b}{2}\\ 0&0&1&-\dfrac{n+f}{2}\\ 0&0&0&1\\ \end{bmatrix}

Mscale\textbf{M}_{scale}缩放矩阵

同样的,根据视景体6个参数,可以计算出立方体的长宽高(假设z方向的边为长,y方向的边为高)分别为: nf,rl,tbn-f, r-l, t-b.

根据缩放矩阵的定义可知: Mscale=[2rl00002tb00002nf00001]\textbf{M}_{scale} = \begin{bmatrix} \dfrac{2}{r-l}&0&0&0\\ 0&\dfrac{2}{t-b}&0&0\\ 0&0&\dfrac{2}{n-f}&0\\ 0&0&0&1\\ \end{bmatrix}

正交投影矩阵

Morthographic=MscaleMtranslate=[2rl00002tb00002nf00001][100r+l2010t+b2001n+f20001]\textbf{M}_{orthographic} = \textbf{M}_{scale}\textbf{M}_{translate} = \begin{bmatrix} \dfrac{2}{r-l}&0&0&0\\ 0&\dfrac{2}{t-b}&0&0\\ 0&0&\dfrac{2}{n-f}&0\\ 0&0&0&1\\ \end{bmatrix}\begin{bmatrix} 1&0&0&-\dfrac{r+l}{2}\\ 0&1&0&-\dfrac{t+b}{2}\\ 0&0&1&-\dfrac{n+f}{2}\\ 0&0&0&1\\ \end{bmatrix}

参考

《3D数学基础》图形和游戏开发(第二版)

GAMES101 -现代计算机图形学入门-闫令琪

fundamentals-of-computer-graphics