1、3D图形学坐标系变换实时计算机图形学3D图形学坐 标系变换实时计 算机图形学2011年11月03 日3D图形学 坐标系 变换 3D计算机图形学常用的有:物体 坐标系 ,世界 坐标系 ,相机 坐标系 ,投影 坐标系 以及屏幕 坐标系 。我们主要讨论的就是这些 坐标系 间的转换。这些 坐标系 都是为了完成计算机3D图形学最最最基本的目标而出现。3D计算机图形学最基本的目标就是:将构建好的3D物体显示在2D屏幕 坐标 上,即渲染。 图1:渲染 初看好像就是将最初的物体 坐标系 转换到屏幕 坐标系 就可以了呀,为什么多出了世界 坐标系 ,相机 坐标系 ,投影 坐标系 。这是因为:在一个大世界里有多个物
2、体,而每个物体都有自身的 坐标系 ,如何表述这些物体间相对的关系,这个多出了世界 坐标系 ;如果只需要看到这个世界其中一部分,这里就多出了相机坐标系 ;至于投影 坐标系 那是因为间接将3D 坐标 转换为屏幕 坐标 是非常复杂的(因为它们不单维度不同,度量不同(屏幕 坐标 一般都是像素为单位,3D空间中我们可以现实世界的米,厘米为单位),XY的方向也不同,在2D空间时还要进行 坐标系 变换),所以先将3D 坐标 降维到2D 坐标 ,然后2D 坐标 转换到屏幕 坐标 。 理解3D图形学的第一步:理解左手 坐标系 与右手 坐标系 。 为什么会有左手 坐标系 与右手 坐标系 之分? 在3D空间(没错!
3、就是3D)中,所有2D 坐标系 是等价的(就是通过一系列的仿射变换,可以互相转换),而3D 坐标系 不是等价的,通过仿射变换,是无法将左手 坐标系 转换到右手 坐标系 ;也就是说,物体 坐标系 用的就是左手 坐标系 ,世界 坐标系 用的是右手 坐标系 ,那么物体可能就是不会是我们所希望的样子了,可能是倒立的,也可能是背对着我们的,所以我们要区分左手 坐标系 与右手 坐标系 。也许在4D空间,左右手 坐标系 就可以互相变换了吧。cad图形切割JBX-4型便携式数控切割机。 首先讨论的是物体 坐标系 -世界 坐标系 。 前面说了为了描述多个物体间相对的关系,这里引进了世界 坐标系 ,所以世界坐标系
4、 是个参考 坐标系 。这一步的目的将所有的物体的点都转移到世界 坐标系,这里主要涉及的是旋转,缩放,平移等。不过我将详细说明为何及如何用矩阵来描述这些变换。 例:如果有两个 坐标系 C与C, C是C绕Z轴旋转得到的。看着 的概念与 下面是各坐标轴的变换: 如果是C 坐标系 的点P(x, y, z),而在C的表示就是 这时该如何建立矩阵呢? 答案就是区分你用的是行向量还是列向量.也许有人会问为什么不区分是左手坐标系 还是右手 坐标系 呢?因为C可以变换到C,那么他们一定是同在左手 坐标系 或右手 坐标系 ,变换只能在可以互相转换的 坐标系 之间进行。 如果你用的是行向量:由于行向量只能左乘矩阵(
5、注意乘与乘以的区别) ,所以矩阵形式应该是这样: 只有这样,在左乘矩阵时才能得到上面P的形式。 如果你用的是列向量: 由于列向量只能右乘矩阵(注意乘与乘以的区别),所以矩阵形式应该是这样: 只有这样,在右乘矩阵时才能得到上面P的形式。 至于如何旋转,缩放,http:/ 其次讨论世界 坐标系 -相机 坐标系 。 引进相机的目的就是只需看到世界的一部分,而哪些是可以在相机里看到的,就需要进行筛选。将物体转换到相机 坐标系 ,这样相机 坐标系 进行筛选时就会简单很多。如何构建相机 坐标系 呢?我们一般用UVN相机,即一般选取视线方向为Z轴负方向,相机向上且与Z轴垂直的方向为Y轴正向,X轴与Y、Z轴正
6、交组成右手 坐标系 。 再次讨论相机 坐标系 -投影 坐标系 。图像算法,OpenCV编程案例。投影的目的就是:降维。两种投影方式:正交投影与透视投影。 最后讨论投影 坐标系 -屏幕 坐标系 。这是最简单的2D 坐标 变换,也不多说。 图2:3D计算机图形学常用的 坐标 系统示意图 图3:用于顶点处理的 坐标 系统和变换 图4:3D计算机图形学 图5:视景体 图6:裁剪和视域剔除 PS : 坐标系 引申: 1)世界 坐标系 (world coordinate Systems),该 坐标 系统主要用于计算机图形场景中的所有图形对象的空间定位和定义,包括观察者的位置、视线等等。计算机图形系统中涉及
7、的其它 坐标 系统都是参照它进行定义。 2)局部 坐标系 (Local Coordinate System),主要为考察物体方便起见, 独立 于世界 坐标系 来定义物体几何特性,通常是在不需要指定物体在世界 坐标系 中的方位的情况下,使用局部 坐标系。一旦你定义“局部”物体,通过指定在局部 坐标系 的原点在世界 坐标系 中的方位,然后通过几何变换,就可很容易地将“局部”物体放出世界 坐标系 内,使它由局部上升为全局。 3)观察 坐标系 (Viewing coordinate systems),观察 坐标系 通常是以视点的位置为原点,通过用户指定的一个向上的观察向量(view up vector
8、)来定义整个 坐标 系统,缺省为左手 坐标系 ,观察 坐标系 主要用于从观察者的角度对整个世界 坐标系 内的对象进行重新定位和描述,从而简化几何物体在投影面的成像的数学推导和计算。 4)成像面 坐标 系统,它是一个二维 坐标 系统,主要用于指定物体在成像面上的所有点,往往是通过指定成像面与视点之间的距离来定义成像面,成像面有时也称投影面,可进一步在构影面上定义称为窗口的方形区域来实现部分成像。 5)屏幕 坐标 系统,也称设备 坐标 系统,它主要用于某一特殊的计算机图形显示设备(如光栅显示器)的表面的点的定义,在多数情况下,对于每一个具体的显示设备,都有一个单独的 坐标 系统,在定义了成像窗口的
9、情况下,可进一步在屏幕 坐标 系统中定义称为视图区(view port)的有界区域,视图区中的成像即为实际所观察到的。 6)设备 坐标系 和规格化设备 坐标系设备 坐标系 (Device Coordinate, DC)是图形设备上采用的与具体设备相关的 坐标系 。设备 坐标系 一般采用整数坐标 ,其 坐标 范围由具体设备的分辨率决定。设备 坐标系 上的一个点一般对应图形设备上的一个像素。由于具体设备的限制,设备 坐标系 的 坐标 范围一般是无限的。 规格化设备 坐标系 (Normal Device Coordinate, NDC)是为了避免设备相关性而定义的一种虚拟的设备 坐标系 。规格化 坐
10、标系 的坐标 范围一般从0到1,也有的是从-1到1。采用规格化设备 坐标系 的好处是屏蔽了具体设备的分辨率,使得图形处理能够尽量避开对具体设备 坐标 的考虑。实际图形处理时,先将世界 坐标 转换成对应的规格化设备 坐标 ,然后再将规格化设备 坐标 映射到具体的设备 坐标上去。 7)齐次 坐标所谓齐次 坐标 是指用一个n1维向量表示一个n维向量。若n维空间中点的位置向量用笛卡儿 坐标 表示为(p1,p2,pn),你看http:/。且是独一的。若用齐次 坐标 表示时,此向量有n1个 坐标 分量(hp1,hp2,hpn,h),且不独一。非齐次 坐标 与齐次 坐标 是一对多的关系,但不影响图形的形状。
11、例如,一个二维空间点x,y,如果用齐次 坐标 表示则为hx,hy,h。通常,在实际应用中采用规范化齐次 坐标 ,就是取h1,即用三维向量x,y,1表示二维向量x,y. 采用齐次 坐标 的优越性主要表现在以下两方面。 (1) 齐次 坐标 提供了用矩阵运算把二维、三维甚至更高维空间中的一个点集从一个坐标系 变换到另一个 坐标系 的有效方法。 (2) 齐次 坐标 可以表示无穷远点。例如,在n1维空间(hp1,hp2,hpn,h), h0的齐次 坐标 实际上表示了一个n维(p1,p2,pn)的无穷远点。在三维情况下,利用齐次 坐标 表示投影变换,其几何意义会更加清晰。 Directx中的 坐标 变换:
12、 Directx中使用是左手 坐标系 ,并使用行向量 (1)世界变换和世界 坐标系 :物体在三维空间的运动和变形过程称为世界变换,如平移、旋转、缩放等。物体在其中运动的三维空间称为世界空间,它的三维 坐标系 表示称为世界 坐标系 ,物体顶点在世界 坐标系 里的 坐标 变换称为世界变换。 (2)取景变换和观察 坐标系 :把图形显示想象成摄像过程,取景变换就像摄像机中摄像机的摆放一样,在三维图形显示中,需要设置一个虚拟摄像机,屏幕显示的图形就是虚拟摄像机拍摄在胶片上的景物。以摄像机位置为参考原点,摄像机观察的方向为坐标轴,建立的 坐标系 称为观察 坐标系 ,物体在观察 坐标系 中的相对 坐标 称为
13、观察 坐标 ,顶点从世界 坐标 到观察 坐标 的转换称为取景变换。 (3)投影 坐标 和投影 坐标系 :物体从世界 坐标 描述转换到观察 坐标 后,可将三维物体投影到二维表面上,即投影到虚拟摄像机的胶片上,这个过程就是投影变换。以胶片中心为参考原点的空间 坐标系 称为投影 坐标系 ,物体在投影 坐标系 中的 坐标 称为投影 坐标 。 (4)视区变换和屏幕 坐标系 :物体在投影 坐标系 中的表示为浮点 坐标 ,通过定义屏幕显示区域(一般为显示窗口大小),将浮点 坐标 转化为像素 坐标 的过程称为视区变换,该像素坐标值称为屏幕 坐标 。例如,如果定义视区大小为宽640像素、高480像素,那么投影 坐标 (1.0f, 0.5f)经过视区变换后的屏幕 坐标 为(640, 240),如果定义视区大小为宽1024像素、高800像素,经过视区变换后的屏幕坐标 为(1024, 400)。 渲染是指将3D几何体、光、贴图、材质、粒子特效、后期处理等等这些数据通过光栅处理用2D图像显示出来。 实时渲染是软件的渲染速度理想上达到一个介于眼睛极限速率(25到30之间的帧率)和屏幕刷新速率(通常为60帧率)的速率。 本文来自:狼途网 http:/ 可爱的小树林