Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)

6.4 创建透视投影(Moving to a Perspective Projection)

    在学习透视投影背后的矩阵运算之前,我们先来看看一个例子。在前一章节中,我们使用正交投影来适配视口在进行规范化之前的坐标。
    下图是一个正交投影的例子,正方体中的场景正是正交投影的效果,OpenGL在进行渲染的时候里面的内容就会被渲染到视口上,这些就是我们所有能看到的东西。

Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)


    下图是同一个场景中不同角度看到的效果:
    

Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)


6.4.1 视锥体(The Frustum)


    现在我们来考虑透视投影,在透视投影中平行线最终都会汇聚于一个点并且当距离越来越远的时候它会显得越来越小,另外在透视投影中我们看到的场景将会是如下图所示的视锥体:

Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)


    这种形状通常叫做视锥体,它是通过透视投影及透视分割创建的。视锥体是金字塔经过切割并使得远端比近端大的一种几何体,并且远端与近端相差越大,那么相应的视角也越大同时也能看到更多的物体。
    在视锥体中有一个焦点,它是通过连接大端与小端并且延长直到他们相接为止得到的一个点,此时的交点就是视锥体的焦点。当你通过透视投影去看一个具体的场景时,你可以想象成你是在焦点处观察。从焦点到视锥体小端的距离叫做焦距,这个值会影响视角的大小及小端与大端的长度比例。
    在下图中,它就是视锥体中的一个场景,就像是从焦点处看到的一样:

Part I 空气曲棍球 Chapter6(6.4 Moving to a Perspective Projection)


    在焦点处还有一个有趣的性质,那就是从此处看上去你会感觉视锥体的大端与小端在屏幕上占据着同样大小的空间;视锥体的远端其实更大,但是因为它更远,所以它占据着大小的空间;这个效果与日食类似:月球比太阳小很多,但是由于月球离我们比较近,所以看起来好像月球就完全把太阳遮挡住了;这完全就是因为视角占据了有利因素。