计算机图形学基础知识-三维变换.

变换计算机图形学中重要概念,包括最基本的三维变换,即 几何变换投影变换裁剪变换视口变换

1.从三维空间到二维平面 

    1.1 相机模拟 

在真实世界里,所有的物体都是三维的。但是,这些三维物体在计算机世界中却必须以

二维平面物体的形式表现出来。那么,这些物体是怎样从三维变换到二维的呢?下面我们采

用相机(Camera)模拟的方式来讲述这个概念,如图所示。

计算机图形学基础知识-三维变换._第1张图片

实际上,从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 (括号内表示的是相应的图形学概念):
  第一步,将相机置于三角架上,让它对准三维景物(视点变换Viewing Transformation)。
  第二步,将三维物体放在适当的位置(模型变换Modeling Transformation)。
  第三步,选择相机镜头并调焦,使三维物体投影在二维胶片上(投影变换Projection Transformation)。
  第四步,决定二维像片的大小(视口变换Viewport Transformation)。
  这样,一个三维空间里的物体就可以用相应的二维平面物体表示了,也就能在二维的电脑屏幕上正确显示了。

  

   1.2 三维图形显示流程
  运用相机模拟的方式比较通俗地讲解了三维图形显示的基本过程,但在具体编程时,还必须了解三维图形世界中的几个特殊坐标系的概念,以及用这些概念表达的三维图形显示流程。
  计算机本身只能处理数字,图形在计算机内也是以数字的形式进行加工和处理的。大家都知道,坐标建立了图形和数字之间的联系。为了使被显示的物体数字化,要在被显示的物体所在的空间中定义一个坐标系。这个坐标系的长度单位和坐标轴的方向要适合对被显示物体的描述,这个坐标系称为世界坐标系
  计算机对数字化的显示物体作了加工处理后,要在图形显示器上显示,这就要在图形显示器屏幕上定义一个二维直角坐标系,这个坐标系称为屏幕坐标系。这个坐标系坐标轴的方向通常取成平行于屏幕的边缘,坐标原点取在左下角,长度单位常取成一个象素的长度,大小可以是整型数。
  为了使显示的物体能以合适的位置、大小和方向显示出来,必须要通过投影。投影的方法有两种,即正射投影透视投影
  有时为了突出图形的一部分,只把图形的某一部分显示出来,这时可以定义一个三维视景体Viewing Volume)。正射投影时一般是一个长方体的视景体,透视投影时一般是一个棱台形的视景体。只有视景体内的物体能被投影在显示平面上,其他部分则不能。在屏幕窗口内可以定义一个矩形,称为视口Viewport),视景体投影后的图形就在视口内显示。
  为了适应物理设备坐标和视口所在坐标的差别,还要作一适应物理坐标的变换。这个坐标系称为物理设备坐标系。根据上面所述,三维图形的显示流程应如图所示。

计算机图形学基础知识-三维变换._第2张图片

2.几何变换

  实际上,上述所说的视点变换和模型变换本质上都是一回事,即图形学中的几何变换。
  只是视点变换一般只有平移和旋转,没有比例变换。当视点进行平移或旋转时,视点坐标系中的物体就相当于在世界坐标系中作反方向的平移或旋转。因此,从某种意义上讲,二者可以统一,只是各自出发点不一样而已。读者可以根据具体情况,选择其中一个角度去考虑,这样便于理解。

     2.1平移

计算机图形学基础知识-三维变换._第3张图片
 
    2.2旋转
计算机图形学基础知识-三维变换._第4张图片
 
    2.3缩放和反射
计算机图形学基础知识-三维变换._第5张图片

 
3、投影变换
    投影变换是一种很关键的图形变换,有两种投影方式,一种是正射投影,另一种是透视投影。
  事实上,投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。
   3.1 正射投影Orthographic Projection
  正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。
计算机图形学基础知识-三维变换._第6张图片
    3.2 透视投影Perspective Projection
  透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
计算机图形学基础知识-三维变换._第7张图片


4、裁剪变换
    空间物体的三维裁剪变换包括两个部分:视景体裁剪和附加平面裁剪。视景体裁剪已经包含在投影变换里,前面已述,这里不再重复。
  除了视景体定义的六个裁剪平面(上、下、左、右、前、后)外,用户还可自己再定义一个或多个附加裁剪平面,以去掉场景中无关的目标,如图所示。
计算机图形学基础知识-三维变换._第8张图片
5、视口变换
  在前面几节内容中已相继提到过视口变换。运用相机模拟方式,我们很容易理解视口变换就是类似于照片的放大与缩小。在计算机图形学中,它的定义是将经过几何变换、投影变换和裁剪变换后的物体显示于屏幕窗口内指定的区域内,这个区域通常为矩形,称为视口。
    在实际中,视口的长宽比率总是等于视景体裁剪面的长宽比率。如果两个比率不相等,那么投影后的图像显示于视口内时会发生变形,如图所示。
计算机图形学基础知识-三维变换._第9张图片

6、矩阵堆栈
  学过计算机的人也许都知道这个使用频率极高的名词 — “堆栈”。顾名思义,堆栈指的是一个顶部打开底部封闭的柱状物体,通常用来存放常用的东西。这些东西从顶部依次放入,但取出时也只能从顶部取出,即“先进后出,后进先出”。在计算机中,它常指在内存中开辟的一块存放某些变量的连续区域。因此,矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。
    前面所讲的变换在计算机中要用 矩阵表示。在创建、装入、相乘模型变换和投影变换矩阵时,都用到堆栈操作。一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型。例如,一辆自行车就是由两个轮子、一个三角架及其它一些零部件构成的。它的继承性表现在当自行车往前走时,首先是前轮旋转,然后整个车身向前平移,接着是后轮旋转,然后整个车身向前平移,如此进行下去,这样自行车就往前走了。矩阵堆栈对复杂模型运动过程中的多个变换操作之间的联系与独立十分有利。

转载于:https://www.cnblogs.com/listened/p/3457601.html

你可能感兴趣的:(计算机图形学基础知识-三维变换.)