3D图形芯片的算法原理分析
2.世界坐标系(世界空间)
当每一个物体在其局部坐标系中被建立起来之后,就需要将其放置到将要绘制的场景之中。组成场景的每个物体都有自己独立的局部坐标系。整个场景的坐标系就是所谓的世界坐标系。场景中的所有物体都必须从自己的局部坐标系中变换到世界坐标系中以定义场景中物体之间的空间相对关系。如果一个物体在场景中被定义为运动的,则必须为该物体定义一个随时间变化的变换序列以便在每一帧将该物体变换到世界坐标系中的不同位置。场景中的光源也在世界坐标系中定义。如果光照计算是在世界空间中进行,则对物体法向量的变换到此为止。对物体表面属性如纹理、颜色等的定义和调整也在世界空间中进行。
3.眼睛坐标系、相机坐标系或观察坐标系(眼睛空间)
眼睛坐标系统是用来建立对世界空间进行观察时的观察参数和观察范围的。在图形学中通常用假想的相机来辅助对观察系统的理解。一个假想的相机可以以任意方向放置在世界空间的任何位置,胶片平面在图形学中就是观察平面,也就是场景将投影到其上的平面。建立一个普遍适用的观察空间相当繁琐,在多数情况下是对眼睛坐标空间做许多限制。一个最小的实用系统可以这样建立,首先要求眼睛坐标系的原点和投影中心是世界坐标系中的同一个坐标点;其次要求观察平面的法向量和观察方向在眼睛空间中与Z坐标轴重合;最后,观察方向必须是这样的,当相机朝着Z轴的正向时Z值的增加将远离眼睛的位置,同时在左手坐标系的前提下,X轴指向右,Y轴向上。满足这一要求的系统就可以使假想的相机以任何观察方向放置在世界坐标空间中的任何位置。图2 是有关坐标系之间的关系。
眼睛坐标系是最适宜做背面删除的空间。背面删除操作是将背对观察者的多边形全部剔除,在场景中这些多边形对于观察者来说是不可见的。如果对一个凸物体做背面删除,则可以完全解决其隐藏面问题。对于具有凹面的物体而言这一操作并不能解决隐藏面问题。背面删除操作是通过计算多边形所在平面的法向量与视线向量之间的夹角来决定该平面是否可见。如果这两个向量的点积大于0,意味着其夹角小于90o 即该多边形是可见的,否则为不可见。视线向量是从多边形指向视点的向量。多边形平面的法向量可通过其不共线的三个顶点计算而得。多边形的法向量必须指向物体的外部,为保证这一点,多边形的顶点必须以反时针方向(从多边形外部看时)顺序存储。如图3所示。
4.屏幕坐标系(屏幕空间)
屏幕空间是比较难于靠直觉理解的一种空间概念。它是描述如何观察场景的方法的过程,与透视几何有关,也可以理解为怎样定义场景中能够到达眼睛(或相机)的光线的过程。将场景中的一个点投影到距离视点为D的观察平面或屏幕要用到的基本变换是透视变换,屏幕或观察平面的法向与观察方向一致。从图4可以看到,运用相似三角形原理,点P在屏幕上的投影P’(Xs= Dxe/Ze, ys=Dye/Ze)。屏幕与观察平面略有不同,屏幕是观察平面上的一块矩形区域,在经过一个与设备有关的变换之后,可以从观察平面坐标求得屏幕坐标。屏幕空间的定义使得其只对一个封闭空间中所包围的场景进行绘制处理,这个封闭的空间称作视锥台。它可以这样来描述:设想在距离视点D处的观察平面上有一尺寸为2h的正方形窗口,且该窗口关于观察方向是对称的,则平面
xe=±hze/D ye=±hze/D
ze=D ze=F
将构成一个封闭的锥台。其中xe、ye 、ze是指眼睛坐标系中的坐标,而平面ze=D和平面ze=F分别称作近处和远处的裁剪平面,它们垂直于观察方向,在此我们假设观察平面与近处的裁剪平面重合。如图4所示。对于透视投影而言,通过连接窗口角与投影中心就形成所谓的视锥体。
有了这个视锥体,就可以用它对已变换到眼睛坐标系下的场景进行选择。这不外有三种情况,对于那些完全落在视椎台之内的物体,直接通过透视变换将其变换到屏幕坐标系下;对于那些完全落在视椎台之外的物体不作进一步的处理而直接抛弃;对于那些与视椎台的面相交的物体则应作裁剪处理,裁取其位于锥台内的部分并用透视变换将它们变换到屏幕坐标系下。在屏幕坐标系下,Z坐标将作为判断物体面之间相互遮挡的唯一判据。
注意,场景中的每个物体的每个三角形都要经过以上处理过程。
四、象素处理
经过以上一系列的变换之后,一个多边形已变换到屏幕坐标系下。将一个屏幕多边形在屏幕上绘制出来就是多边形的象素处理过程,它包括光栅化、隐藏面消除、明暗处理。光栅化、隐藏面消除、明暗处理是整个3D图形生成过程中最内层的处理。他们是三个二维插值过程。光栅化是用
- 轻松实现3D图形处理的设计技巧(06-04)
- 3D图形芯片及3D图像生成算法的原理分析(11-25)