2-线框图处理技术-3.doc_第1页
2-线框图处理技术-3.doc_第2页
2-线框图处理技术-3.doc_第3页
2-线框图处理技术-3.doc_第4页
2-线框图处理技术-3.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 线框图处理技术第二章 线框图处理技术目 录第二章 线框图处理技术21图形生成211 图形软件接口212 基本图形扫描转换算法52图形几何变换821 二维图形几何变换822 三维图形几何变换143二维图形显示1931 坐标系统2032 二维图形显示流程2133 规范化和视口变换2234 二维裁减算法234三维图形显示2541 三维图形显示流程2642 世界坐标系到观察坐标系的变换2743 投影变换2844 三维裁剪算法30思考与练习31第二章 线框图处理技术用图形表达设计对象是机械CAD技术最重要的表达方式。计算机图形处理技术的发展有力地促进了机械CAD技术的研究和发展,为机械CAD技术提供了高效的工具和手段,而机械CAD技术的发展又不断对图形处理技术提出新的要求。机械CAD中的图形从基本的处理技术看只有两类,一类是线条,如工程图等;另一类是明暗图,与照片相似。因此,构成机械CAD图形的要素有两类,一类是刻画形状的点、线、面、体等几何要素,另一类是反映物体表面属性或材质的色彩、亮度和灰度等非几何要素。使用程序设计软件包生成图形时,首先需要给出显示对象的几何描述,该描述确定对象的位置和形状。在图形生成之后,要将该图形的世界坐标描述经各种处理变换到一个或多个输出设备参照系来显示。计算机图形处理的任务就是利用计算机的高效运算能力和实时显示功能来处理各类图形信息,包括图形的存储、生成、显示和输出,以及图形的变换、组合、分解和运算等。计算机的图形处理技术包含与图形存储、生成、处理和显示相关的多种方法,本章主要介绍线条图的生成、变换和显示技术。1图形生成11 图形软件接口1.1.1软件标准自20世纪50年代到70年代初属于计算机图形学形成和发展期,在此期间,适用于各种不同应用目的的图形硬件设备,以及针对具体设备和应用的各种类型的图形软件系统不断地推出。这些系统由不同的开发者设计开发,其通用性较差,影响了计算机图形学的进一步发展,这导致了计算机图形标准的出现。计算机图形软件功能标准化问题的研究早在70年代初就已经开始。1974年美国成立了图形标准化规划委员会(GSPC),提出了世界上第一个图形标准方案Core,为计算机图形标准化的工作做了有益的尝试。在此同时,各国也都陆续制订自己的图形标准,其中以德国的GKS标准最为著名。图形标准的研究和制订在20世纪80年代进入了大发展时期。1985年,第一个国际计算机图形信息标准棗计算机图形核心系统(GKS)得以正式颁布。之后,三维图形核心系统(GKS-3D)、程序员层次交互式图形系统(PHIGS)、计算机图形原文件(CGM)、计算机图形接口(CGI)、初始图形交换规范(IGES)以及产品数据交换标准(STEP)等相继制订并颁布。随着GKS和PHIGS得到开发,SGI公司的图形工作站逐渐流行。这些工作站使用称为GL(Graphics Library)的函数集,GL很快成为图形界广泛使用的图形软件包。GL成为事实上的标准。GL函数为快速、实时绘制而设计,很快便扩展到其他硬件系统中。结果,作为GL与硬件无关的版本,OpenGL在20世纪90年代早期制定出来。1.1.2 图形接口功能图形函数定义为独立于任何程序设计语言的一组规范。语言绑定则是为特定的高级程序语言而定义的。通用图形编程软件包提供一个可用于C、C、Java或Fortran等高级程序设计语言的图形函数库。每一个语言绑定以最佳地使用有关的语言能力及处理好数据类型、参数传递和出错等各种语法问题为目标来定义。图形软件包在特定语言中的实现描述由国际标准化组织来制定。OpenGL的C和C语言绑定也一样如此。典型的图形库中的基本函数用来描述图元(直线、多边形、球面和其他对象)、设定颜色、观察选择的场景和进行旋转或其他变换等。通用图形程序设计软件包有GL、OpenGL、VRML、Java 2D和Java 3D等。由于图形函数库提供了程序设计语言(如C+)和硬件之间的接口,所以这一组图形函数称为计算机图形应用编程接口。如果使用C编写应用程序时,可以使用图形函数进行组织并在输出设备上显示图形。使用程序设计软件包生成图形时,首先需要给出显示对象的几何描述,该描述确定对象的位置和形状。在图形生成之后,要将该图形的世界坐标描述经各种处理变换到一个或多个输出设备参照系来显示。通用图形软件包为用户提供建立和管理图形的各种功能。这些子程序可以按照它们处理输出、输入、属性、变换、观察、分割图形或一般的控制而进行分类。图形的基本构造模块称为图形输出图元,它们包括字符串和几何成分,如点、直线、曲线、填充区域以及彩色阵列定义的形状。有些图形软件包提供了对复杂形体(如球体、锥体和柱体)的显示函数。生成输出图元的函数提供了构造图形的基本工具。属性描述一个特点图元如何显示,包括颜色的设定、线形或文本的类型以及区域填充图案等。可以使用几何变换来改变图形中一个对象的大小、位置或方向。利用对象形状及其属性的描述函数构造图形之后,图形软件包将选定视图投影到输出设备。观察变换用来指定将要显示的视图、使用的投影类型以及在输出显示区域出现的范围。交互式图形应用多类输入设备,如鼠标、数据板或操纵杆。输入函数用于控制和处理来自这些交互设备的数据流。最后,图形软件包常常包含许多事务性任务,如将显示屏清成指定颜色和初始化参数,这类处理事务性任务的功能归入控制操作(Control Operation)类。1.1.3 OpenGL简介OpenGL基本函数库用来描述图元、属性、几何变换、观察变换和进行许多其他的操作。OpenGL被设计成与硬件无关,因此输入和输出函数等许多操作均不包括在其基本库中,但在为OpenGL开发的辅助库中有输入和输出函数及许多附加函数。OpenGL系统由独立于设备的函数集(称为核心库)、实用库(GLU)和实用工具包(GLUT)三部分构成。在GLU的辅助函数务的函数。在GLUT中有大量的函数用来管理显示窗口、与屏幕窗口系统的交互及生成某些三维形体。OpenGL画点函数glVertex2i()指定一个点位置的坐标值,一个点位置的OpenGL描述形式是glBegin(GL_POINTS); glVertex2i();glEnd();其中glBegin()函数的变量用来指定要显示的输出图元的类型,glEnd()没有变量。如果在glBegin()中使用图元线常量GL_LINES,可以实现画线功能。当然,OpenGL中使用glVertex函数选择单个端点的坐标位置。下列程序生成图X。glBegin(GL_POINTS); glVertex2i();glVertex2i();glVertex2i();glVertex2i();glEnd();世界坐标系中描述的图形部分最终要映射到输出设备的坐标系统中,图中的几何信息被扫描转换到象素位置。下一节将介绍实现OpenGL画线函数的扫描转换算法。下面的OpenGL程序按三个过程组织。将所有初始化和有关的一次性设定参数的函数放在过程init中。要显示图形的几何描述放在过程lineSegment中,该过程将由GLUT函数glutDisplayFunc调用。Main过程包含设定显示窗口及将线段送到屏幕的GLUT函数。图2-1显示窗口及由该程序生成的红色线段。#include void init (void)glClearColor(1.0,1.0,1.0,0.0); /将显示窗口背景设置为白色.glMatrixMode(GL_PROJECTION); /设置投影参数glutOrtho2D(0.0,200.0,0.0,150.0);void lineSegment (void)glClear (GL_COLOR_BUFFER_BIT); /Clear display window.glColor3f(1.0,0.0,0.0); /glBegin (GL_LINES);glVertex2i(180,15); /glVertex2i(10,145);glEnd();glFlush(); /void main(int argc, char* argv)glutInit (&argc, argv); /glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /glutInitWindowPosition(50,100); /glutInitWindowSize(400,300); /glutCreateWindow(An Example OpenGL Program); /init(); /glutDisplayFunc(lineSegment); /glutMainLoop(); /图2-1 显示窗口和由示例程序生成的线段12 基本图形扫描转换算法一幅工程图由图元组成,图元是一组最简单的、最通用的几何图形或字符,如line(直线段)、polyline(折线)、text(字符串)、circle(圆)等,如图2-2所示。从实现的角度来看,用户定义的二维图元的窗口区到视图区的输出过程如下所示:从应用程序得到的用户(WC)对窗口区进行裁剪(WC)窗口区到视图区的规格化变换(NDC)视图区的规格化坐标系到设备坐标系的变换(DC)调用基本图元生成算法在图形设备上输出图形。本节主要以直线的生成算法为例介绍基本图元在图形设备上的输出过程。图2-2 基本图元输出在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从到的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。本节介绍在光栅显示器上直线光栅化的最常用的直线的DDA算法。DDA是数字微分分析式(Digital Differential Analyzer)的缩写。设直线之起点为,终点为,则斜率m为:直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx, Dy)而得到,即表示为递归式:并有关系:递归式的初值为直线的起点,这样,就可以用加法来生成一条直线。具体方法是:1、当|dx|dy|时|D x|=1, |D y|=m;否则:Dx=1/m,|Dy|=12、Dx, Dy的符号与dx, dy的符号相同。这两条规律可以导致程序的简化。由上述方法写成的程序如程序2.1.1所示。其中steps变量的设置,以及Dx=dx/steps; Dy=dy/steps等语句,正是利用了上述两条规律,使得程序变得简练。使用DDA算法,每生成一条直线做两次除法,每画线中一点做两次加法。因此,用DDA法生成直线的速度是相当快的。点线圆图2-3 直线和圆的生成原理dda_line (xa, ya, xb, yb, c)int xa, ya, xb, yb, c;float delta_x, delta_y, x, y;int dx, dy, steps, k;dx=xb-xa;dy=yb-ya;if (abs(dx)abs(dy) steps=abs(dx);else steps=abs (dy);delta_x=(float)dx / (float)steps;delta_y=(float)dy / (float)steps;x=xa;y=ya;set_pixel(x, y, c);for (k=1; k=steps; k+)x+=delta_x;y+=delta_y;set_pixel(x, y, c);2图形几何变换上一节介绍了如何应用基本图元来描述场景,并给出了扫描线算法,可以将图元显示在光栅设备上。现在再看看可用于对象重定位或改变大小的操作。在机械设计过程中,用户经常希望改变图形的比例,以便清晰地观察设计中的细节;有时希望通过旋转图形,以便从不同角度观察对象;有时希望将图形平移到另一位置,以便在不同环境中显示对象;对于装配体的动态运动而言,在每一运动中需要不同的平移和转动。上述在方位和比例上的变化通过图形变换实现,图形变换一般是指将图形的几何信息经过几何变换后产生新的图形。应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换(geometric transformation)。图形变换既可以看作是图形不动而坐标系变动,变动后该图形在新的坐标系下具有新的坐标值,也可以看作是坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化。基本的几何变换研究物体坐标在直角坐标系统内的平移、旋转和变比的规律,按照坐标的维数不同,基本变换可分为二维几何变换和三维几何变换两大类。对于线框图形的变换,通常是以点变换为基础,把图形的一系列顶点作几何变换后,连接新的顶点序列即可产生新的变换后的图形。但对于可用参数表示的曲线、曲面等图形的变换,基于效率的考虑,一般通过对其参数方程作变换来实现对整个图形的变换,而不是逐点进行,这里主要介绍二维和三维几何变换。21 二维图形几何变换2.1.1基本变换1平移(Translation)通过将位移量加到一个点的坐标上来生成一个新的坐标,可以实现该点的一次平移。类似地,对于一个用多个坐标位置定义的对象,可以通过对所有坐标位置使用相同的位移量沿平行路径重定位来实现平移,然后在新位置显示完整的对象。将平移距离(translation distance)tx、ty加到原始坐标上获得一个新的坐标位置,可以实现一个二维位置的平移,如图2-4所示。平移是一种移动对象而不改变其形状的刚体变换,即对对象上的每一点移动了同样的距离。一条直线段的平移通过对其两端点进行一定并重画两个新端点位置间的线段来实现。对边形也以类似的方法平移。将平移向量加到多边形的每一顶点坐标位置,然后使用这组新端点来重新生成多边形。如果要删除原来的多边形,则可在平移前用背景色显示它。图2-4 平移变换可以使用同样的方法来平移其它对象,为了改变椭圆或圆的位置,可以平移中心坐标并在新的位置重画图形。下面的程序演示了平移操作。输入的平移向量用来将一个多边形的n个顶点从一个世界坐标系移动到另一个,而OpenGL子程序用来重新生成平移后的多边形。Class wcPt2D public: GLfloat x, y; ; void translatePolygon(wcPt2D* verts, GLint nVerts, GLfloat tx, GLfloat ty) GLint k; for (k=0; knVertx;k+) verts k.x = verts k.x + tx; verts k.y = verts k.y + ty; glBegin (GL_POLYGON) for (k=0; knVertx;k+) glVertex2f (verts k.x, vertsk.y); glEnd(); 2旋转(Rotation)二维对象的一个旋转是以某个参考点为圆心,将对象上的各点围绕圆心转动一个逆时针角度,变为新的坐标的变换。当参考点为时,旋转的公式为: ,所以上式可化为:如果参考点不是(0,0),而是任意一点 ,那么,绕点的旋转由三个步骤完成:1)将对象平移Txxr,Tyyr;2)作旋转变换;3)平移Txxr,Tyyr。组合这三个步骤的计算公式为: (2-2)图2-5 旋转变换类似于平移,旋转是一种不变形地移动对象的刚体变换,对象上的所有点旋转相同的角度。线段的旋转可以通过将旋转方程(2-2)用于每个线段端点,并重新绘制新端点间的线段而得到。多边形的旋转则是将每个顶点旋转指定的旋转角度,并使用新的顶点来生成多边形而实现旋转。曲线的旋转通过定位定义的点并重新绘制曲线而完成。3二维缩放(scaling)二维缩放是使对象按比例因子(scaling factor)Sx和Sy放大或缩小的变换,如图2-6所示。变比计算公式为: (2-3) 图2-6 缩放变换 从图2-6可见,按式(2-3)变比时,不仅对象的大小变化,而且,对象离原点的距离也发生了变化。如果只希望变换对象的大小,而不希望变比对角离原点的距离,则可采用固定点变比(scaling relative to a fixed point)。如果(2-3),以a为固定点进行变比的方法是:1)作平移Txxa,Tyya;2)按式(2-3)作变比;3)作1)的逆变换,即作平移Txxa,Tyya。当比例因子Sx或Sy小于0时,对象不仅变化大小,而且分别按x轴,或y的轴被对称。图2-7 对称变换图27(a)表示当时的变化,此时按x轴反射。图27(b)表示当时的变比,此时按y轴反射。图27(c)示出当时按(0,0)原点反射的情况。多边形的缩放可以通过将变换方程()应用于每个顶点,然后利用变换后的顶点重新生成多边形而实现。其它对象的变换则将缩放变换公式应用到定义对象的参数上。要改变圆的大小,可通过缩放其半径并计算圆上坐标点的新位置来实现。标准位置中的椭圆通过缩放两个轴并且按其中心坐标重新绘制椭圆而实现缩放椭圆尺寸。21.2 变换矩阵一个二维点的坐标表示(x, y)还可以用三维齐次坐标(homogeneous coordinate)来表示,这里的齐次参数h是一个非零值,因此从上式可以看出,对于每个坐标点(x , y)可以有无数个等价的坐标表达式。最简便的选择是简单地设置。因此每个二维位置都可以用齐次坐标(x, y, 1)来表示。利用齐次坐标表示位置,使我们可以用矩阵相乘的形式来表示图形的几何变换,这是图形系统值使用的标准方法。二维坐标位置用三元素列向量表示,二维变换的操作用3 X 3矩阵来表示。上述几种基本图形变换都可以写成下面的一般形式这里总结一下该3X3矩阵中各元素的功能,为此将它划分成4块,即其中22阶矩阵 可以实现图形的比例、对称、错切、旋转等基本变换;12阶矩阵可以实现图形的平移变换;21阶矩阵可以实现图形的透视变换,而可以实现图形的全比例变换。表2-1 二维几何基本变换变换矩阵名称变换矩阵矩阵元素的意义及说明示意图比例变换Sx为x方向上的比例因子,Sy为y方向上的比例因子(图中SxSy)全比例变换S为整图的比例因子对称变换关于x轴对称关于y轴对称关于45线对称关于坐标原点对称错切变换沿x方向错切,c为错切量沿y方向错切,b为错切量旋转变换绕坐标原点旋转角度,逆时针为正,顺时针为负平移变换Tx为x方向的平移量;Ty为y方向的平移量2.1.3 复合变换上述的几种变换可用统一的变换矩阵形式来实现,称之为基本变换。有些变换仅用一次基本变换是不够的,必须由两次或多次基本变换组合才能实现。这种由多种基本变换组合而成的变换称之为复合变换,相应的变换矩阵叫做复合变换矩阵。设坐标经过n次变换到,则变换结果为:式中,为总的变换矩阵,复合变换的目的是将一个变换序列表示为一个变换矩阵。 例如围绕任意点的旋转,可以考虑为过3个基本变换,而实现。首先平移坐标原点到,接着进行旋转变换,变换后再将坐标原点移回到点。三个过程的结果就是以点为中心的旋转变换。就要通此公式的推导过程写成齐次坐标矩阵形式为: 则有称为复合变换矩阵。由上面推导可知,在计算复合变换时,首先可将各基本变换矩阵按序相乘,形成总的复合变换矩阵。然后,坐标只须与相乘一次,便可同时完成一连串基本变换。所以,采用复合变换矩阵,大大节省了坐标乘法所耗费的运算时间。22 三维图形几何变换2.2.1 变换矩阵三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和44变换矩阵的乘积。下面分别以公式,矩阵乘积和简记符号来描述三维几何变换。并记变换前物体的坐标为;变换后物体的坐标为。三维图形的变换是二维图形变换的简单扩展,变换的原理还是把齐次坐标点通过变换矩阵变换成新的齐次坐标点,即其中T为三维基本(齐次)变换矩阵:控制缩放、旋转和错切变换,控制平移变换;控制透视变换,控制整体缩放变换2.2.2 基本变换1平移设Tx,Ty,Tz是物体在三个坐标方向上的移动量,则有公式:矩阵运算表达为:2旋转旋转分为三种基本旋转:绕z轴旋转,绕x轴旋转,绕y轴旋转。在下述旋转变换公式中,设旋转的参考点在所绕的轴上,绕轴转角,方向是从轴所指处往原点看的逆时针方向(图2-8(a),(b)。绕z轴旋转 图2-8 a) 绕x轴旋转 图2-8 b) (1)绕z轴旋转的公式为:矩阵运算的表达为:(2)绕x轴旋转的公式为:矩阵运算的表达为:(3)绕y轴旋转的公式为: 矩阵的运算表达式为:3变比设是物体在三个方向的比例变化量,则有公式: 矩阵运算的表达为相对于某个非原点参数点进行固定点变比变换,通过如下复合变换实现:。4OpenGL几何变换函数在OpenGL的核心库中,每一种基本的几何变换都有一个独立的函数,所有变换都在三维空间中定义。要完成一次平移,需要引用平移子程序且设定三维平移向量;在旋转函数中,需指定经过坐标系原点的旋转轴的方向和角度;而缩放函数用来设定相对于坐标系原点的三个坐标缩放系数。在每种情况中,变换子程序都建立一个4X4矩阵用于接收变换的对象坐标。平移矩阵用下列子程序构造:glTranslate*(tx,ty,tz);作为例子,使用下列语句可将随后定义的坐标位置在x方向平移25个单位而在y方向平移10单位。glTranslatef(25.0,-10.0,0.0);类似地,4X4旋转矩阵用下列子程序构造:glRotate*(theta,vx,vy,vz);作为例子,下列语句:glRotatef(90.0,0.0,0.0,1.0);设定绕z轴旋转90的矩阵。利用下列函数可得到相对于坐标原点的缩放矩阵:glScale*(sx,sy,sz);例:下列语句生成在x方向缩放2倍、在y方向缩放3倍,且相对于xz平面反射。glScalef(2.0,-3.0,1.0);2.2.3复合变换与二维复合变换一样,通过对三维基本变换矩阵的组合,可以实现对三维物体的复杂变换。设坐标经过n次变换到,则变换结果为: 与二维相同,复合变换时,同样需要注意乘法的顺序如果旋转所绕的轴不是坐标轴,而是一根任意轴,则变换过程变显得较复杂。首先,对物体作平移和绕轴旋转变换,使得所绕之轴与某一根标准坐标轴重合。然后,绕该标准坐标轴作所需角度的旋转。最后,通过逆变换使所绕之轴恢复到原来位置。这个过程须由7个基本变换的级联才能完成。 图2-9 绕任意轴的旋转 设旋转所绕的任意轴为p1, p2两点所定义的矢量。旋转角度为q(图2.6)。这7个基本变换是: (1)使p1点与原点重合(图2-9b); (2),使得轴p1p2落入平面xoz内(图2-9c); (3),使p1p2与z轴重合(图2-9d); (4),执行绕p1p2轴的角度旋转(图2-9e); (5),作(3)的逆变换; (6),作(2)的逆变换; (7)作(1)的逆变换。 1求的参数:转角是u在yoz平面的投影u(o,b,c)与z轴的夹角(图2-9),故有: ,其中又因uuzuxuuzsin其中ux是在x轴上的投影。并且用行列式计算矢量积得: uuzuxb,故得: ,得出为:图2-10 2求的参数(图2-10b):经过变换,p2已落入xoz平面,但p2点与x轴的距离保持不变。因此,p1p2现在的单位矢量u的z方向分量之值即为u之长度,等于d,是u与uz之夹角,故有:根据矢量积的定义,有:因为,并,所以:因此得到为:绕任意轴转动角的变换为如下复合变换:其复合变换矩阵为:假定一六面体ABCDEFGH各点的坐标分别为,则经过图形变换后的坐标为:式中:T为所要进行的图形变换矩阵。图2-11 3二维图形显示一般说来,CAD软件允许用户指定已定义的图中哪部分要显示,以及在显示设备的什么位置显示。在二维情况下,可使用xy平面上的包含全图或任意部分的区域来选择视图。所选区域中的图形映射到设备坐标系的指定区域中,从世界坐标系到设备坐标系的变换包括平移、旋转、缩放操作以及删除位于显示区域范围以外的图形部分。31 坐标系统在计算机图形学中,为了通过显示设备来考察几何物体的特性,引入了一系列用于显示输出的坐标系统,这些坐标系统包括:图212 坐标系1)世界坐标系(World Coordinate Systems),该坐标系统主要用于计算机图形场景中的所有图形对象的空间定位和定义,包括观察者的位置、视线等等。计算机图形系统中涉及的其它坐标系统都是参照它进行定义。2)局部坐标系(Local Coordinate System),主要为考察物体方便起见,独立于世界坐标系来定义物体几何特性,通常是在不需要指定物体在世界坐标系中的方位的情况下,使用局部坐标系。一旦你定义“局部”物体,通过指定在局部坐标系的原点在世界坐标系中的方位,然后通过几何变换,就可很容易地将“局部”物体放入世界坐标系内,使它由局部上升为全局。3)观察坐标系(Viewing coordinate systems),观察坐标系通常是以视点的位置为原点,通过用户指定的一个向上的观察向量(view up vector)来定义整个坐标系统,缺省为左手坐标系,观察坐标系主要用于从观察者的角度对整个世界坐标系内的对象进行重新定位和描述,从而简化几何物体在投影面的成像的数学推导和计算。4)成像面坐标系统,它是一个二维坐标系统,主要用于指定物体在成像面上的所有点,往往是通过指定成像面与视点之间的距离来定义成像面,成像面有时也称投影面,可进一步在构影面上定义称为窗口的方形区域来实现部分成像。5)屏幕坐标系统,也称设备坐标系统,它主要用于某一特殊的计算机图形显示设备(如光栅显示器)的表面的点的定义,在多数情况下,对于每一个具体的显示设备,都有一个单独的坐标系统,在定义了成像窗口的情况下,可进一步在屏幕坐标系统中定义称为视图区(view port)的有界区域,视图区中的成像即为实际所观察到的。总之,为在三维空间创建和显示一个(多个)几何物体,首先必须建立世界坐标系,然后,需要指定视点的方位、视线和成像面的方位,为了观察到物体的成像,还必须在各坐标系之间视见变换之后,进行投影变换,才能得到物体的成像,下面两节分别对上述坐标系之间的变换和投影变换分别加以介绍。32 二维图形显示流程在CAD技术中,二维场景中要显示的部分称为裁剪窗口(Clipping Window)或观察窗口(Viewing Window),所有在此区域之外的场景要裁去,不予显示;对象在裁剪窗口内的部分映射到显示窗口中制定位置的视口(Viewport)中。裁剪窗口选择要看什么,而视口指定在输出设备的什么位置进行观察。当然,可以采用多个视口可以在不同的屏幕位置观察场景的不同部分,也可以通过改变视口的尺寸来改变显示对象的尺寸和位置。裁剪窗口和视口一般是如图所示的正则矩形。图2-13 与坐标轴平行的裁剪窗口及对应的视口二维世界坐标系场景描述到设备坐标系的映射称为二维观察变换,有时也简称为窗口到视口的变换。图给出了与三维观察相仿的二维观察变换步骤。构造世界坐标系的场景后,可以建立独立的二维观察坐标参考系来指定裁剪窗口。由于裁剪窗口常在世界坐标系中定义,因此二维应用的观察坐标系和世界坐标系一致。图2-14 二维观察变换流程为了使观察处理独立于输出设备,图形系统将对象描述转换到规范坐标系并提供裁剪程序。规范化设备坐标范围一般从0到1,有些系统从1到1。视口在规范化设备坐标系还是在设备坐标系中定义则取决于使用什么图形库。在观察变换的最后一步,视口中的内容转换到显示设备的相应位置。裁剪工作通常在规范化坐标系中进行,可以在此之前合并变换矩阵从而减少计算时间。33 规范化和视口变换在计算机图形学中,世界坐标和规格化设备坐标(NOrmalized Dovice Coorolinates)简称NDC)是两个同时使用的坐标系统,世界坐标是设计者用描述实际世界中的设计对象所用的坐标系统,其坐标的范围可以是任意大小的。NDC是计算机图形软件描给设计对象所用的价值,随着图形硬件的不同,设备的坐标系统也不同,例如有的图形显示器的分辩率只有640480,而有的高达24081024。至于绘图机的输出坐标还可以更大。为了使用图形软件于在不同设备之间移植,图形软件并不采用实际的设备坐标,而采用规格化设备坐标NDC。NDC定义x方向和y方向的变化范围均为01。从NDC到各图形硬件实际坐标之间的映射由图形软件自动实现。因此,使用图形软件的用户均以NDC在各图形输出与显示设备上作图。 世界坐标范围是无限大的。为了使NDC上所显示的世界坐标中物体有一个合适的范围与大小,首先必须对世界坐标指定一个显示范围,它通常是个矩形。这个在世界坐标系中的矩形被称为窗口(Window)。其次,在NDC上也要指定一个矩形位置来与窗口对应,显示窗口里的内容。这个在NDC中的矩形被称为视区(Viewport)。图形软件根据窗口与视区的一一对应,自动实现从世界坐标到NDC的转换。这种从窗口到视区的变换,称为规格化变换(Normalization Transformation)。为了说明规范化和视口变换的一般过程,首先定义一个视口,其规范坐标值从0到1。图2-15显示了窗口到视口的映射。窗口内的点映射到对应视口的点。图2-15 从(a)到(b)的标准化变换该映射变换按下列顺序进行:(1)以点为中心执行缩放变换,将窗口变换为视口的大小;(2)将点移动到点。第一步的缩放变换可以表示成二维矩阵:这里第二步裁剪窗口左下角平移到视口左下角的二维矩阵是 变换到规范化视口的组合矩阵是窗口视口变换保持对象描述的相对位置,在裁剪窗口内部的对象映射到视口内,在裁剪窗口外部的对象映射到视口之外。另外,只有在裁剪窗口和视口具有相同的纵横比时才能保持对象的相对比例不变。裁剪函数可以使用裁剪窗口边界或视口边界实现裁剪。裁剪后,规范化坐标变换到设备坐标。单位正方形经过于窗口视口变换相同的过程而映射到输出设备,其内部全部变换到输出设备的显示区域。34 二维裁减算法在二维观察变换中,裁剪用来从场景中提取指定部分显示在输出设备上,这种用来识别指定区域内图形部分的过程称为裁剪算法。任何位于裁剪窗口外的内容都将送到输出设备上显示的场景中消除,裁剪后的图形部分送到屏幕坐标系进行最后的处理。在机械CAD中,裁剪算法涉及点、线段、多边形、曲线和文字等图元的裁剪。这里以直线和多边形为例,介绍一个二维矩形区域的裁剪算法。3.4.1 直线的剪裁直线和窗口的关系可以分为如下三类:(a)整条直线在窗口之内。此时,不需剪裁,显示整条直线。(b)整条直线在窗口之外,此时,不需剪裁,不显示整条直线。(c)部分直线在窗口之内,部分在窗口之外。此时,需要求出直线与窗框之交点,并将窗口外的直线部分剪裁掉,显示窗口内的部分。直线剪裁算法有两个主要步骤:首先将不需剪裁的直线挑出,并删去其中在窗外的直线。然后,对其余直线,逐条与窗框求交点,并将窗外部分删去。下面介绍的直线剪裁算法是由Cohen及Sutherland提出的。Cohen-Sutherland直线剪裁算法以区域编码为基础,将窗口及其周围的八个方向以4 bit的二进制数进行编码。4个bit分别代表窗外上、下、右、左空间的编码值。如左上区域编码为1001,右上区域编码为1010。窗内编码为0000,如图2.6.2所示。图2-16 直线与窗口的关系 图2-17 直线剪裁算法的区域编码图2-17所示的编码方法将窗口及其邻域分为5个区域:内域:区域(0000);上域:区域(1001,1000,1010);下域:区域(0101,0100,0110);左域、区域(1001,0001,0101);右域:区域(1010,0010,0110)这就带来二个优点:1、容易将不需剪裁的直线挑出。规则是:如果一条直线的两端在同一区域,则该直线不需剪裁,否则,该直线为可能剪裁直线。2、对可能剪裁的直线缩小了与之求交的边框范围。规则是:如果直线的一个端点在上(下,左,右)域,则此直线与上边框求交,然后删去上边框以上的部分。该规则对直线的另一端点也适用。这样,一条直线至多只需与两条边框求交。因此,Cohen-Sutherland的区域编码剪裁算法是一个简明高速的直线剪裁算法。3.4.2 多边形的剪裁多边形的剪裁比直线剪裁复杂,多边形剪裁算法的关键在于:通过剪裁,不仅要保持窗口内多边形的边界部分,而且要将窗框的有关部分按一定次序插入多边形之保留边界之间,从而使剪裁后的多边形之边仍旧保持封闭状态,填色算法得以正确实现。下面介绍的多边形剪裁算法是Sutherland和Hodgman提出的9,它的基本思想是:1)令多边形的顶点按边线逆时针走向排序:p1, p2, , pn。如图2.6.4(a)。各边先与上窗边求交。求交后删去多边形在窗之上的部分,并插入上窗边及其延长线的交点之间的部分(图2.6.4(b)中的(3,4),从而形成一个新的多边形。然后,新的多边形按相同方法与右窗边相剪裁。如此重复,直至与各窗边都相剪裁完毕。图2.6.4(c)、(d)、(e)示出上述操作后所生成的新多边形的情况。2)多边形与每一条窗边相交,生成新的多边形顶点序列的过程,是一个对多边形各顶点依次处理的过程。设当前处理的顶点为p,先前顶点为s,多边形各顶点的处理规则如下:如果s, p均在窗边之内侧,那么,将p保存。如果s在窗边内侧,p在外侧,那么,求出sp边与窗边的交点I,保存I,舍去p。如果s, p均在窗边之外侧,那么,舍去p。如果s在窗边之外侧,p在内侧,那么,求出sp边与窗边的交点I,依次保存I和p。图2-18 多边形剪裁的步骤4三维图形显示在二维图形显示中,观察操作将世界坐标平面上的点变换到输出设备平面中的象素位置。利用矩形的裁剪窗口和视口,二维图形软件包裁剪图形并将其映射到设备坐标系。尽管三维图形显示仍然遵循二维观察中所使用的一般方法,但由于在如何构造模型、如何在输出设备上生成视图等方面有更多的选择,因此三维图形显示操作涉及了更多的方面。不同之处在于,三维观察在变换到设备坐标之前,需要投影子程序把对象描述变换到观察平面上变换到平面视图,识别可见部分,对逼真显示部分要考虑光照效果和表面特征。41 三维图形显示流程三维图形的计算机生成步骤有点类似于拍摄一张照片的过程,可以利用照相机模拟过程来描述三维观察参数。首先,与安放照相机向对应,需要在场景中确定一个观察位置。根据要显示场景的钱、后、左、右、上、下来选择观察位置。也可以在一个对象上选择一个观察位置,然后确定相机的方向,参见图所示。当按下快门时,按照相机“裁剪窗口”(镜头)的大小来修剪场景,光线从可视表面投影到照相机的胶片上。三维图形的观察操作与二维观察流程类似。二维视口用来确定三维图形在输出设备上的位置,而二维裁剪窗口用来选择向视口映射的视图。在三维观察中,裁剪窗口位于所选择的观察平面上,场景相对于用一组裁剪平面定义的封闭空间体来裁剪。观察位置、观察平面、裁剪窗口和裁剪平面都在观察坐标系中指定。图2-19给出了对建立三维图形以及将图形变换到设备坐标的一般步骤。一旦在世界坐标系中建好三维模型,就将图形描述转换到选择的观察坐标系。观察坐标系定义了观察参数,包括投影平面的位置和方向,然后在观察平面上定义与照相机镜头对应的二维裁剪窗口,并建立三维裁剪区域。该裁剪区域称为观察体,其形状和大小依赖于裁剪窗口的尺寸、投影方式和所选观察方向的边界位置。投影操作将图形的观察坐标描述转换为投影平面的坐标位置。对象映射到规范化坐标系,所有在观察体外的部分被裁剪掉。裁剪操作可以在与所有与设备无关的坐标变换完成之后进行。三维显示过程复杂,裁剪效率重要。为减少计算量,引入规范视见体概念 ,这样先将视见体规范化,然后关于规范视见体进行三维裁剪,其流程为:取景拍照冲洗图2-19 三维坐标变换流程与在二维观察中一样,视口边界可在规范化坐标系或设备坐标系中指定。依赖于观察算法,假定视口在设备坐标系中指定,而规范化坐标已在裁剪后转换为视口坐标。还有一些必须完成的任务,如识别可见面和表面绘制。最后一步是将观察坐标映射到设备坐标系的指定窗口中。42 世界坐标系到观察坐标系的变换在三维观察流水线中,图形构造完成之后的第一步工作是将对象描述变换到观察坐标系中。对象描述的变换等价于将观察坐标系叠加到世界坐标系的一连串变换。将一个任意方向的VCS变换到与WCS重合的过程可由三步完成:1)将左手坐标改为右手坐标系统;2)平移观察坐标系原点到世界坐标系原点;3)进行旋转,分别让、和轴对应到、和轴。如果指定世界坐标点为观察坐标系原点,则将观察坐标系原点移到世界坐标系原点的变换是将观察坐标轴叠加到世界坐标系的组合旋转变换矩阵使用单位向量u、v和n来形成。该变换矩阵为这里,矩阵R的元素是u、v、n轴向量的分量。将前面的平移和旋转矩阵相乘获得坐标变换矩阵该矩阵中的平移因子按u、v、n和P0的向量点积计算而得,P0代表从世界坐标系原点到观察原点的向量。矩阵Mwc,vc将世界坐标系中的对象描述变换到观察坐标系。图22043 投影变换对象描述变换到观察坐标系后,下一阶段是将其投影到观察坐标平面。图形软件一般都支持平行投影和透视投影两种方式。在三维坐标系统中,物体上的每一点都以三个分量(x,y,z)描述,这样的物体称为三维物体。要想将一个三维物体描画在一个二维的平面,如纸面,荧光屏面上,必须对三维物体进行投影。投影(project)是一种使三维对象映射为二维对象的变换。由平行投影方法表现三维对象的图,称为正视图和轴测图,由透视投影方法表现三维对象的图,称为透视图。在以下的讨论中,假设投影面与xoy面重合,即在投影面上z0。图2-21 两种基本投影方法1正交平行投影变换正交平行投影(orthographic P.P.)的投影线与投影平面成90角。将一个三维点(x,y,z)用正交平行投影法投影平面xoy上,得到一个二维点(xp,yp)。这种变换,可以由正交平行交换公式来计算,它为同样,也可以将三维物体正交平行投影于xoz和yoz平面上,分别获平视与侧视图。设计中常用正交平行投影来产

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论