图形学思考 - 聊聊透视图投射矩阵perspective projective matrix

Posted decode126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图形学思考 - 聊聊透视图投射矩阵perspective projective matrix相关的知识,希望对你有一定的参考价值。

 

from:版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载。

什么是透视图投射矩阵perspective projective matrix?

空间物体的坐标乘以投射矩阵,那么就可以把空间的物体投射到屏幕上。

大体是这样的矩阵:

技术分享

这里探讨一个问题:为什么乘以这个矩阵就可以把空间物体投射到屏幕上了呢?

看看下面的图:

技术分享

其中的Projection Window就是我们的屏幕位置。

我们需要把所有两条斜边和Near Plane 和Far Plane之中的所有物体影像投影到Projection Window中显示出来。

如下图:

技术分享

就是要把y投影到Projection Window成为y`

这个时候要计算y`的位置。如果是三维空间,那么原y的坐标点是(x,y,z),那么在平面上的点的坐标就为(x`,y`,d)

为什么最后是d。因为Projection Window平面的方程就是z = d,这个平面上的所有点的z轴都为d。

这样需要使用稍微复杂一点的数学知识计算,就会得到从坐标点(x,y,z)到(x`,y`,d)的计算公式,然后这个公式使用矩阵的形式表示出来,就得到了这里所要说的perspective projective matrix.(这里省去其中的数学知识讨论)。

最后就利用这一个矩阵就会神奇地把空间坐标投影到屏幕上了。

 

对应的directx代码:

 

[cpp] view plain copy
 
  1. XMMATRIX P = XMMatrixPerspectiveFovLH(0.25f*XM_PI,AspectRatio(), 10.0f, 100.0f);  

掌握了这个知识点,就不会觉得这个函数是那么神秘的了,自己也能写出来。

 


当然恶补一下其中的数学知识,并加以练习应该理解会更加深。

毕竟这些数学的知识加上三维空间的东西,我觉得就构成了计算机学科中最难理解的方向(之一?)了。


以上是关于图形学思考 - 聊聊透视图投射矩阵perspective projective matrix的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学-MVP变换之投影(Projection)变换

Model, View(Camera), Perspective

计算机图形学-MVP变换之视图(Model)变换

OpenGL 数学库 GLM 投影矩阵公式 glm::perspective 已经抛弃角度的使用,转为使用弧度

图形学算法收藏

OpenCV Intro - Perspective Transform