Viewing and Projection

 

  Viewing和projection将一个三维的场景映射到render target的两维空间。Viewing 就是将一个虚拟的照相机放置和定位在场景里面。Projection就是将三维场景转换成一个两位面。

   Direct3D 应用程序使用了平面几何projection.  物体的平面几何投影由线组成,称作projector,它穿越物体的每个顶点以及投影仪的中心。当投影仪中心是有限的时候,每条从中心发起的projectors,都会产生透视projection. 当投影仪中心无限大时,所有的projector则是平行的,这样就产生了平行投影。被投影的物体将会落在投影平面上。每个被被映射的顶点将落在projector和投影平面的交点上。

   平面几何投影在艺术和工程制图上有很久的历史。透视projection产生的图片将与人眼所看到的物体更加相似,并且在外观上更加真实。然而,它扭曲了不平行于projection平面的线以及线之间的夹角。这种扭曲使越靠近相机的物体越大。这种扭曲就是非统一的透视缩短。

   平行projection能够保留线的相对长度和夹角。这种属性将使它能够用在工程制图。一个物体的多个平行投影将能准确的描述一个物体的形状,并且能直接从投影图里面标注机械制造尺寸。

   对于在三跟垂直轴里面的物体,投影将能够进一步分类。Projector的朝向,投影面以及一个物体主要坐标轴定义了这个分类。平行投影还能够被分成垂直和倾斜投影。垂直平行投影还可以分成axonometric ,isometric ,dimetric,trimetric。 Cavalier和cabinet则是通常的倾斜投影。 透视投影将被分成1 point, 2 point和3 point的透视投影。

   Direct3D将使用同次转换矩阵来定义平面几何投影。其他的投影也是可能的,但是Direct3D可能并不支持。场景里面照相机的运动能通过改变照相机的参数来实现,照相机位置和朝向的变化,是通过改变view转换矩阵。虚拟相机显示出来的那部分场景是通过改变投影转换矩阵来实现的。

 

Viewing Through a virtual camera

   Direct3D使用一个虚拟相机模型来构造场景的渲染,相机概念上是落在世界坐标系的。相机指向一个特定的方向,称作direction of gaze.  场景里面相机的位置和朝向定义了一个相对世界坐标的新的坐标系。这个坐标系被称作camera空间,或者eye空间,就好像通过一只眼睛去看。

  世界转换后,所有的模型都在世界坐标系里面了。View 转换再将世界空间装换成camera 空间。camera空间将照相机放在原点,y向上增加,x 向右增加,z将指向视线的方向。

  在左手坐标系里面,z 值将随着物体离相机的距离增加,增加x,就向右边移动,增加y,将向上移动。注意:在camera空间,y是向上增加的,在屏幕空间,y是向下增加的。对Direct3D来说,照相机模型只是一个转换矩阵,对一个应用程序,更加容易定用参数来定义一个照相机模型,然后从参数里面产生转换矩阵。

  简单的照相机模型是把照相机放在C(Xc,Yc,Zc),照相机指向场景里面的A(Xa,Ya,Za)。  相机朝向就是g = (Xa- Xc, Ya-Yc, Zz-Zc).  相机并且定义了一个向上的向量u. 使用这个模型,我们能定义一个转换矩阵V。

 V = T(-C)Rg->zRz(@).  其中Rg->z是一个围绕Z轴的旋转矩阵。

 

平面几何投影

一个平面几何投影主要是通过它的投影面和投影仪的中心来确定的。

 

投影转换

在计算机图形学,我们对场景的动态视图非常感兴趣,主要是因为场景里面的物体和虚拟相机可以同时很自由的运动。在这种情况下,不同类别的平行投影或者透视投影的之间区别不是那么重要,因为场景里面的物体可能在场景里面的任意位置。

投影矩阵

至今,我们所接触过的矩阵,还未使用矩阵最右边的那一栏。这一栏是用在透视投影的。当使用这一栏的时候,计算出来的w将不是1,为了将他转换到笛卡尔坐标,我们需要除以w,这样经过projection转换后,顶点的笛卡尔坐标也相应改变了。

你可能感兴趣的:(Viewing and Projection)