三维图形学基础_第1页
三维图形学基础_第2页
三维图形学基础_第3页
三维图形学基础_第4页
三维图形学基础_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

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

文档简介

三维图形学基础第一页,共一百四十六页,编辑于2023年,星期六屏幕坐标及图形坐标显示器上的位置用整型的屏幕坐标来描述,与帧缓存中的像素位置相对应。y坐标给出像素的行序号,x坐标给出列序号。屏幕刷新硬件一般从屏幕的左上角开始对像素进行编址,从最上面的第0行到最下面的第ymax行,对扫描行进行编号;每行从左到右,从第0到第xmax对扫描列进行编号。图形软件可以按照任意方式设定屏幕位置的图形坐标系统,如可以设定屏幕区域的左下角为原点(视区的默认值),用整数坐标或非整数笛卡尔坐标来描述图形。描述物体对象的坐标值最终转换为帧缓存中的整数像素位置。图元的扫描转换根据给定的坐标来确定要显示的像素位置,如给定一条直线段的两个端点,显示函数必须计算出两端点间位于线段上的所有像素的位置。由于一个像素位置占有屏幕上的一个有限范围,因此图形显示算法必须考虑像素的有限大小,一般假定像素坐标对应于像素区域的中心。第二页,共一百四十六页,编辑于2023年,星期六屏幕上的笛卡尔坐标系第三页,共一百四十六页,编辑于2023年,星期六显示窗口OpenGL函数库中用gluOrtho2D(xmin,xmax,ymin,ymax)函数设定一个二维视见空间(二维笛卡尔坐标系),其参数指定了显示窗口(裁剪窗口)的x、y坐标范围。显示窗口的左下角位于坐标(xmin,ymin)处,右上角位于坐标(xmax,ymax)处。如果一个图元的坐标范围完全在显示窗口(裁剪窗口)内,该图元将完整地显示出来,否则,仅仅位于显示窗口范围内的部分图元能显示出来,这涉及到裁剪。第四页,共一百四十六页,编辑于2023年,星期六随机扫描显示器20世纪60年代中期较早出现的是随机扫描显示器(也称为向量显示器vectordiaplay),只能显示线条图形。这些线条由随机扫描系统按定义图形时的顺序绘制并刷新。笔试绘图仪也以类似的方式进行绘图。随机扫描系统的刷新频率依赖于显示的线条数目。图形的定义保存在刷新显示文件存储区中,是一组画线指令,刷新显示文件称为显示列表。为了显示指定的图形,系统必须按显示文件中的一组命令依次画出各个线条,当所有画线命令处理完后,系统返回到该列表的第一条画线命令,然后重新开始绘制。随机扫描显示器以每秒30~60次的刷新速度画出图形的所有线条。第五页,共一百四十六页,编辑于2023年,星期六光栅扫描显示器大约在1980年左右,诞生了光栅扫描显示器,它采用彩色电视技术,用三个电子束逐行扫描荧光屏上整齐排列的红、绿、蓝三基色点簇,一条电子束对准一种基色,一个点簇称作一个像素。荫罩法(shadow-mask)常用于光栅扫描系统。该方法基于红、绿、蓝三原色原理,对每个像素位置,荫罩CRT有三个荧光彩色点:一个荧光点发射红光,另一个发射绿光,第三个发射蓝光。这类CRT有三支电子枪,与每个彩色点一一对应,而荫罩栅格位于紧靠涂覆有荧光层的屏幕之后。由于人眼可将三点发出的光合成为一种彩色,因此三种荧光粉发出的光生成一个小彩色点,称为像素点。第六页,共一百四十六页,编辑于2023年,星期六与光栅扫描显示器有关的几个基本概念在光栅扫描系统中,电子束横向扫描屏幕,一次一行,从顶到底依次进行,每一行称为一个扫描行。当电子束横向沿每一行移动时,电子束的强度不断变化,由不同的颜色和亮度生成图形。图形定义保存在帧缓存

(framebuffer)中,这里帧指整个屏幕范围,该存储器保存一组对应于屏幕所有点的强度值,电子束在屏幕上逐点移动时从帧缓存中取出对应位置的值,控制其强度。每个可由电子束点亮的屏幕点称为一个像素(pixel,是picture与element的简写),像素的阵列为光栅。一幅图像的像素全部存放在帧缓存的内存里。第七页,共一百四十六页,编辑于2023年,星期六与光栅扫描显示器有关的几个基本概念光栅扫描系统对屏幕的每一点都有存储颜色及亮度信息的能力,从而能适用于包含细微阴影和色彩变化的真实感图形显示。显示器的像素个数称为分辨率,如1024×768,1280×1024。显示器的另一特征是纵横比(aspectratio),定义为系统能显示的像素列数除以行数。纵横比还可由屏幕上显示相同长度的水平和垂直线段所需像素点数之比来描述。如纵横比为4/3,表示用4个点绘出的水平线与用3个点绘出的垂直线的物理长度相同。光栅系统可显示的颜色数目依赖于帧缓存中的位数,每个像素的位数称为缓存深度或精度。如1位深度缓存只能显示两种颜色,8位深度缓存则可以显示28(=256)中颜色,在真彩色系统里,深度为24位,红、绿、蓝三基色各8位,可以显示224(=16777216)种颜色数,能表示大多数真实感图形。第八页,共一百四十六页,编辑于2023年,星期六光栅化帧缓存通常采用特殊类型的内存芯片,可以快速显示帧缓存的内容,在一些基于软件的图形系统里,帧缓存是系统内存的一部分。在一些简单的图形系统里,帧缓存只存储像素的颜色值,可以简单地将帧缓存称为颜色缓存(colorbuffer)。目前,对于大多数的图形系统,帧缓存能存储更多的信息,如三维图形的深度信息等。在这些系统里,帧缓存可以由多个缓存器组成。处理器的图形处理功能是根据应用程序的要求生成各种图元(如直线、圆和多边形),把颜色值赋给帧缓存中的像素,使这些像素能表现这些实体。如三角形可用三个顶点来描述,为了显示三角形的三条边,图形系统必须生成一组像素,使这组像素看起来像三角形的边线。将几何形体的数据转换为像素在帧缓存里的位置和颜色的过程称为光栅化或扫描转换。第九页,共一百四十六页,编辑于2023年,星期六帧缓存在早期的图形系统里,帧缓存是标准存储器的一部分,CPU可以直接对它进行存取操作。目前,几乎所有的图形系统都采用了专用的图形处理单元(GraphicsProcessingUints,简称GPU),这种专用的图形处理单元是专门针对某些特定的图形功能而设计的。GPU可以在主板上,也可以在图形显示卡上。计算机通过GPU对帧缓存进行存取操作,因此常把帧缓存包含在GPU内。第十页,共一百四十六页,编辑于2023年,星期六直线段的扫描转换算法直线的扫描转换:根据直线的几何特征,可确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。两种常用算法:数值微分法(DDA)Bresenham算法。问题:怎样又快又好地绘制一条直线段?第十一页,共一百四十六页,编辑于2023年,星期六数字微分法基本思想:根据线段斜率的不同,在某个坐标轴上以单位间隔对线段采样,在另一个坐标轴上确定最靠近线段的对应整数值。已知过端点P0(x0,y0),P1(x1,y1)的直线段L的方程为:

y=kx+b

直线斜率为当斜率的绝对值小于1时,从x的左端点x0开始,向x的右端点逐步递增。步长=1(象素单位),计算相应的y坐标y=kx+b;取象素点(x,round(y))作为当前点的坐标。第十二页,共一百四十六页,编辑于2023年,星期六由直线方程可得下一个采样点的y坐标为:

yi+1=kxi+1+b

=kxi+b+kx =yi+kx

当x=1时; yi+1=yi+k

即:当x每递增1,y递增k(即直线斜率);注意上述分析的算法仅适用于k≤1的情形。在此情况下,x每增加1,y最多增加1。当k

1时,必须把x,y的地位互换:

xi+1=xi+1/k该算法能在有限的线段长度内,根据斜率的不同合理确定尽可能多的像素来逼近该直线段。

DDA算法计算像素的位置比直接使用直线方程计算的速度要快,它利用光栅特性消除了直线方程中的乘法,在x或y方向使用合适的增量,在直线路径上逐步得到各像素的位置。但在浮点增量的连续累加中,取整误差的积累使得对于较长线段所得到的像素位置偏离实际线段,且该过程中的取整操作和浮点运算仍然十分耗时。促使人们考虑既能用于直线,又能用于曲线的更通用的扫描线算法。第十三页,共一百四十六页,编辑于2023年,星期六例:画直线段P0(0,0)--P1(5,2)k=0.4

xint(y+0.5)y+0.50 0 01 0 0.4+0.52 1 0.8+0.5 3 1 1.2+0.54 2 1.6+0.55 2 2.0+0.5第十四页,共一百四十六页,编辑于2023年,星期六Bresenham算法Bresenham画线算法是一种精确而有效的光栅线生成算法,该算法还可用于圆和其它曲线。思路:固定直线的两个端点,控制总体误差。如下图,首先考虑斜率小于1的直线的扫描转换过程,沿线段路径的像素位置由以单位x间隔的采样来确定。从给定线段的左端点(x0,y0)开始,逐步处理每个后继列(x位置),并在其扫描线y值最接近线段的像素上绘出一点。下图显示了这个过程的第k步。假设当前已显示的像素点在(xk,yk),那么下一步需要确定在列xk+1=xk+1上绘制哪个像素,是在位置(xk+1,yk),还是在(xk+1,yk+1)。从(xk,yk)像素开始,绘制斜率0<m<1的直线的屏幕局部第十五页,共一百四十六页,编辑于2023年,星期六在采样位置xk+1,用dlower和dupper来表示两个像素与直线段路径的垂直偏移。直线段上像素列位置处的y坐标为:

y=m(xk+1)+b则:dlower=y-yk

=m(xk+1)+b-yk

dupper=(yk+1)-y=yk+1-m(xk+1)-b要确定两像素中哪一个更接近线段路径,需要测试这两个像素偏移的差:

dlower-dupper=2m(xk+1)-2yk+2b-1在采样位置xk+1处,像素位置到直线上y坐标之间的垂直距离第十六页,共一百四十六页,编辑于2023年,星期六设y和x分别为两端点的垂直和水平偏移量,则m=y/x,定义决策参数pk为:

pk=x(dlower-dupper)

=2yxk-2xyk+c3-1

其中c=2y+x(2b-1),pk的符号与dlower-dupper的符号相同(此例中x>0

)。假如yk处的像素比yk+1的像素更接近于线段(即dlower<dupper),那么参数pk是负的,此时绘制下面的像素,反之,绘制上面的像素。可以利用递增整数运算得到后继的决策参数值。在k+1步,可得决策参数为:

pk+1=2yxk+1-2xyk+1+c3-2将两式相减,可得:

pk+1

-pk=2y(xk+1-xk

)

-2x(yk+1

-yk)但xk+1=xk+1,因而

pk+1=pk+2y-2x(yk+1

-yk)其中yk+1

-yk取0或1,取决于参数pk的符号。决策参数的递归运算在线段的坐标端点开始的每个整数x位置进行,起始像素位置(x0,y0)的第一个参数p0由式3-1及m=y/x可得:p0=2y-x递推时,仅进行两个常量2y及2y-2x之间的整数加减。第十七页,共一百四十六页,编辑于2023年,星期六正斜率小于1的线段的Bresenham画线算法的主要步骤概括如下:(1)输入线段的两个端点,并将左端点储存在(x0,y0)中;(2)将(x0,y0)装入帧缓存,画出第一个点;(3)计算常量x

、y、2y和2y-2x,并得到决策参数的第一个值;

p0=2y-x(4)从k=0开始,在线段路径的每个xk处,进行下列检测:如果pk<0,下一个要绘制的点是(xk+1,yk),并且pk+1=pk+2y

否则,下一个要绘制的点是(xk+1,yk+1),并且

pk+1=pk+2y-2x(5)重复步骤4,共x-1次。当斜率

1时,也必须把x,y的地位互换。例:绘制一条线段,端点为(20,10)和(30,18)。该线段的斜率为0.8,且x=10,y=8初始决策参数为:p0=2y-x=6后继决策参数的增量为:2y=16,2y-2x=-4绘制初始点(x0,y0)=(20,10),并根据决策参数确定后继像素点的位置为:第十八页,共一百四十六页,编辑于2023年,星期六kpk(xk+1,yk+1)06(21,11)12(22,12)2-2(23,12)314(24,13)410(25,14)kpk(xk+1,yk+1)56(26,15)62(27,16)7-2(28,16)814(29,17)910(30,18)沿端点(20,10)和(30,18)用Bresenham画线算法绘制的像素点第十九页,共一百四十六页,编辑于2023年,星期六圆的生成算法圆的方程为:(x-xc)2+(y-yc)2=r23.4.1利用这个方程,可以沿x轴从xc-r到xc+r以单位步长计算对应的y值,从而得到圆周上每点的位置:

y=yc±(r2-(x-xc)2)1/23.4.2该方法的每一步包含很大的计算量,而且所绘制像素的间距不一致,如下图所示。我们可以在圆斜率的绝对值大于1后,交换x和y(即步进y值并计算x值)来调整间距,但增加了计算量和处理过程。总之,该方法不是一种理想的画圆方法。

用方程3.4.2绘制的正半圆第二十页,共一百四十六页,编辑于2023年,星期六另一种消除不等间距的方法是使用极坐标r和来计算圆周上的点,圆的极坐标方程为:

x=xc+rcos

y=yc+rsin使用上述方法以固定角度为步长可以生成等间距的点来绘制圆,尽管利用极坐标能生成等距点,但三角函数的计算十分耗时。可以利用圆的对称性减少计算量,圆的形状在每个象限中是相似的,如果确定了圆在第一象限中的位置,则可以生成圆在第二象限的部分,因为圆相对于y轴是对成的。根据圆相对于x轴的对称性,由第一象限和第二象限中的圆弧,可以得到第三象限和第四象限中的圆弧。在八分圆之间也有对称性,一个象限中相邻八分圆的圆弧对于45°直线是对称的,如下图。图中八分之一圆上的一点(x,y)可映射到其它7个八分圆的点。利用圆的对称性,可由1个八分圆上的点,映射到其余7个八分圆上的点第二十一页,共一百四十六页,编辑于2023年,星期六利用圆的对称性,仅需计算从x=0到x=y这段圆弧的点就可得到整个圆的所有像素位置。在该八分圆中,圆弧斜率的绝对值≤1,x=0时的斜率为0,x=y时圆弧的斜率为-1.0。使用对称性及圆的方程来确定圆周上的像素位置,仍然需要大量的计算,更有效地画圆算法是采用类似Bresenham画线算法,通过设定在每一步采样步骤中寻找最接近圆周像素的决策参数。但圆的方程是非线性的,包含平方运算,一个避免平方运算的方法是:检验两像素间的中点位置是在圆边界之内还是之外。中点画圆算法:对于中心为(xc,

yc)、半径为r的圆,先计算圆心在(0,0)的圆的像素位置,然后通过将xc加到x且yc加到y,将圆平移到真正位置。在第一象限,圆弧段从x=0到x=y,曲线的斜率从0变到-1.0。可以在该八分圆上的正x方向取单位步长,并使用决策参数来确定每一步两个可能的y位置中,哪一个更接近于圆的位置,其余7个八分圆中的位置可由对称性得到。定义圆函数:

f(x,y)=x2+y2-r2任何点的相对位置可由圆函数的符号来决定:第二十二页,共一百四十六页,编辑于2023年,星期六

<0,如果(x,y)位于圆内f(x,y)=0,如果(x,y)位于圆上

>0,如果(x,y)位于圆外圆函数即为决策参数,下图给出了采样位置xk+1上两个候选像素间的中点。圆周上采样位置xk+1上候选像素间的中点假设已在(xk,yk)绘制了一个像素,下一步需要确定是像素(xk+1,yk)还是像素(xk+1,yk-1)更接近于圆,在两像素的中点求决策参数的值:

pk=f(xk+1,yk-1/2)=(xk+1)2+(yk-1/2)2-r2假若pk<0,则该中点位于圆内,扫描线yk上的像素接近于圆周边界。否则该中点位于圆外或圆周上,选择扫描线yk-1的像素。第二十三页,共一百四十六页,编辑于2023年,星期六后续的决策参数可以使用增量运算得到,如对采样位置xk+1=xk+2处的圆函数求值,可以得到下一个决策参数的循环表达式:

pk+1=f(xk+1+1,yk+1-1/2)=[(xk+1)+1]2+(yk+1-1/2)2-r2=pk+2(xk+1)+(y2k+1-y2k)-(yk+1-yk)+1其中,yk+1是yk或yk-1,取决于pk的符号。若pk为负,则yk+1=yk,pk+1的增量为2xk+1+1;若pk为正,则yk+1=yk-1,pk+1的增量为2xk+1+1-2yk+12xk+1和2yk+1的求值也可以通过增量的方式求得:2xk+1=2xk+22yk+1=2yk-2在起始位置(0,r)处,这两项的初始值分别为0和2r。在起始位置(0,r)处,初始决策参数为:p0=f(1,r-1/2)=1+(r-1/2)2-r2=5/4-r如果将半径r指定为整数,可以对p0进行简单的取整,p0=1-r,则中点方法使用整数加减来计算圆周的像素位置。第二十四页,共一百四十六页,编辑于2023年,星期六中点画圆算法的步骤:(1)输入圆半径r和圆心(xc,yc),并得到圆周(圆心在原点)上的第一个点:(x0,y0)=(0,r)(2)计算决策参数的初始值:

p0=5/4-r(3)在每个xk位置,从k=0开始,计算决策参数,若pk<0,则圆周下一像素位置为(xk+1,yk),并且

pk+1=pk+2xk+1+1否则圆的下一点为(xk+1,yk-1),并且

pk+1=pk+2xk+1+1-2yk+1其中,2xk+1=2xk+2且2yk+1=2yk-2(4)确定其它7个八分圆中的对称点。(5)将每个计算出来的像素位置(x,y)平移到圆心在(xc,yc)的圆周上,并绘出各点(x+xc,y+yc)。(6)重复步骤3到步骤5,直至x≥y。第二十五页,共一百四十六页,编辑于2023年,星期六例,使用中点画圆算法画圆给定圆半径r=10,确定在第一象限从x=0到x=y沿八分圆的各像素点位置。决策参数的初始值为:p0=1-r=-9对于中心在原点的圆,初始点(x0,y0)=(0,10),决策参数的初始增量值:2x0=0,2y0=20使用中点画圆法计算的后续决策参数值及像素位置如下:kpkxk+1,yk+12xk+1,2yk+10-9(1,10)2201-6(2,10)4202-1(3,10)62036(4,9)8184-3(5,9)101858(6,8)121665(7,7)1414第二十六页,共一百四十六页,编辑于2023年,星期六用中点画圆法得到的像素位置(空心圆为第一象限的对称位置)第二十七页,共一百四十六页,编辑于2023年,星期六使用折线来逼近曲线常见的曲线除圆以外,还有椭圆、圆锥曲线、三角和指数函数、样条曲线等。显示曲线的简单方法是使用直线段来逼近曲线,仅需确定一组曲线上的点并将它们连接成一组直线段。折线中的线段越多,曲线越平滑。第二十八页,共一百四十六页,编辑于2023年,星期六3.5填充区图元图形学中常常需要用某种颜色或某种图案来填充一个区域,尽管有可能使用各种形状,但图形库一般不支持任意的填充形状,多数库函数要求填充区为多边形。多边形是由三个或更多的顶点连接而成的封闭图形,由于多边形的边界为直线段,因而比它形状更容易处理。可将曲线转换为由分段折线构成的多边形,曲面也可以用一系列多边形面片来逼近。如果一个多边形的所有内角均小于180°,则该多边形为凸(convex)多边形。等价定义:它的内部完全在它的任一边及其延长线的一侧。如果任意两点位于凸多边形的内部,则其连线上的任一点也在凸多边形的内部。不是凸多边形的多边形称为凹(concave)多边形。退化多边形是指有共线或重合顶点的多边形,共线的顶点生成一条线段,重叠的顶点可以生成多余线段、重叠边或长度为0的边。为了软件的鲁棒性,图形软件可以拒绝退化或非平面的多边形。凹多边形也会产生一些问题,对凹多边形的填充及其它处理比较复杂,常常将凹多边形分割成一组凸多边形以提高效率。第二十九页,共一百四十六页,编辑于2023年,星期六可以为多边形的每一条边建立一个向量,用相邻边的叉积来测试凸凹性,凸多边形的所有向量叉积均同号,如果某些叉积为正而另一些为负,则为凹多边形。识别凹多边形的另一个方法是观察多边形顶点位置与每条边延长线的关系。如果有些顶点在某一延长线的一侧而有些顶点在另一侧,则为凹多边形。多边形的填充算法分为扫描线填充算法和种子填充算法。扫描线的含义来源于光栅显示器,对屏幕上的每个像素点,按从上到下,从左到右的顺序进行显示,水平方向从左到右每扫描一行,就是一条y方向的扫描线,同理,从上到下也能形成x方向的扫描线。扫描线填充算法的原理是:待填充区域按y方向(或x方向)扫描线的顺序,计算扫描线与多边形的相交区间,再用指定的颜色填充这些区间的像素,区间的端点可以通过计算扫描线与多边形边界的交点求得。第三十页,共一百四十六页,编辑于2023年,星期六通用多边形的扫描线填充算法下图给出了多边形区域实心填充的扫描线过程。对每一条与多边形相交的扫描线,与边的交点从左到右排序,且将每一对交点之间的像素位置包括这对像素在内,设定为指定颜色,本例中与边界的四个交点定义了两段内部像素:从x=10到14的5个像素,以及从x=18到x=24的7个像素。如果是用图案填充多边形,则沿一条扫描线的每一个像素颜色由与图案重叠的位置确定。穿过多边形区域的扫描线上的内部像素第三十一页,共一百四十六页,编辑于2023年,星期六有时情况比较复杂,当一条扫描线经过多边形的一个顶点时,扫描线在该顶点处与多边形的两条边相交,这种情况可能导致在这条扫描线上的交点要增加两个点。下图给出了在顶点处与多边形相交的两条扫描线。扫描线y’与偶数条边相交,必须将该顶点处的交点作为2个交点,才能正确标识该扫描线上的两对交点之间为内部像素段。扫描线y与多边形的5条边相交,必须将该顶点处的交点作为1个交点,才能正确标识该扫描线上的两对交点之间为内部像素段。通过观察相交边相对于扫描线的位置,可以发现扫描线y和扫描线y’间的拓扑差异。对于扫描线y,共享一个顶点的两条相交边位于扫描线的两侧,对于扫描线y’,两条相交边位于扫描线的同一侧。扫描线与多边形顶点相交,y’生成奇数个交点,y生成偶数个交点第三十二页,共一百四十六页,编辑于2023年,星期六可以通过顺时针或逆时针方向来搜索多边形边界,并观察从一条边移动到另一条边时顶点y坐标的相对变化来判别这个点。假如两条相邻边的三个端点y坐标值单调递增或递减,那么对于任何穿过该顶点的扫描线,必须将该相交顶点(中间的共享顶点)计为1个交点。否则,该相交顶点(中间的共享顶点)即为多边形边界上的一个局部极值,(极大或极小),须将该相交顶点计为2个交点。总结:对凹多边形的填充判断比较复杂。凸多边形的扫描线填充对于凸多边形,扫描线填充过程可以简化,每一条扫描线与多边形至多有两个交点,可以使用坐标范围来确定哪些边与扫描线相交,当扫描线与单个顶点相交时,仅绘出该点本身,当有两个交点时,两交点之间的部分都是多边形内部的点。第三十三页,共一百四十六页,编辑于2023年,星期六种子填充算法区域填充的另一种方法是从区域的一个内部点开始,由内向外逐点绘制直到边界。可以使用单一颜色或一个图案来填充一个区域。假如边界是以单一颜色指定的,则填充算法可逐个像素地向外处理,直至遇到边界颜色。该算法从一个内点开始检测相邻位置的颜色,若检测位置不是该边界颜色,就将它设置成边界颜色,再检测其相邻位置,这个过程持续到检测完区域边界颜色范围内的所有像素为止。区域填充算法要求区域是连通的。从一个当前位置检测其相邻像素有两种方法:4-连通和8-连通。4-连通即检测当前位置的上、下、左、右4个方向的相邻像素,8-连通即检测当前位置的上、下、左、右、左上、右上、左下及右下8个方向的相邻像素。4-连通8-连通4-连通区域8-连通区域第三十四页,共一百四十六页,编辑于2023年,星期六第三十五页,共一百四十六页,编辑于2023年,星期六图案填充可以将一个区域填充为某种单一颜色,也可以用某种图案进行填充,还可以不填充而只绘制其边界。对多边形可以使用不同颜色、线宽和线型绘制其边框,还可以为区域的前向面和后向面设置不同的显示属性。填充图案可以用一个对不同位置指定不同颜色的矩形颜色阵列来给出,即一个填充图案可当作一个点阵来处理,其中每一位置点指定一种颜色。描述填充图案的矩阵是一个应用于显示区域的掩模。有些图形系统可以设置掩模的初始位置,从该初始位置开始,掩模在水平方向和垂直方向反复填充直到整个区域都填满无重叠的掩模。这种用矩形图案填充一个区域的处理称为平铺,而矩形填充图案有时也称为平铺图案。填充图案的起始位置可设定在填充区内的任意位置,有些软件包将显示窗口的坐标原点作为图案的起始位置。第三十六页,共一百四十六页,编辑于2023年,星期六字符图元图形显示中常包括文字信息,包括字母、数字或其他字符等。字体是指一组按照特定尺寸和格式的模板字符样式。字体有两种不同的表示方法,第一种称为位图字体(或光栅字体),每个字符都由一个二值形式的点阵图案表示,如图3.6a,由于所有字符都已完成扫描转换,绘制一个字符只需将该字符的位图直接映射或复制到帧缓存的指定位置,值为1的位对应的像素位置将用当前颜色进行显示。尽管可以由一组点阵字符生成不同尺寸以及类似粗体、斜体等其它字体,但字符放大时会有锯齿现象。第二种表示方法称为轮廓字体,又称笔画字体或向量字体。每个字符的外形轮廓均由直线和曲线段来描述,如图3.6b,字符轮廓的内部按填充区进行扫描转换处理。与位图字符相比,轮廓字体在进行放大时其字符形状不会变形。第三十七页,共一百四十六页,编辑于2023年,星期六第三十八页,共一百四十六页,编辑于2023年,星期六反走样在图形光栅化的过程中由于图元的坐标点离散化为整数像素位置,因此光栅化后生成的图元具有锯齿形或阶梯状的外观。当我们把对象的连续表示(无限的分辨率)变换为对象的离散表示时,不可避免地会出现这类误差,这种由于低频采样(不充分采样)而造成的图形失真称为走样(aliasing)。另一个不太引人注目的走样现象是不同走向的线段具有不同的亮度,虽然所有线段都用同样的颜色亮度来显示,但一条斜线看上去要比一条水平或垂直线暗一些。这一现象的原因可由图3.7.1解释,图中水平线上的像素间的距离为一个单位长度,而斜线上的像素间的距离大约为1.414个单位长度,密度上的差异造成亮度感觉上的差异。如果一个物体没有与像素栅格对齐,或者不能与像素栅格吻合,会出现篱栅问题。图3.7.2(a)表示一道桩与桩之间的距离并非像素间距整数倍的篱栅。将该篱栅扫描转换后桩的端点都要向像素位置靠拢对齐,结果是桩之间的距离不再均匀相等图3.7.2(b)。此现象有时称为局部走样,这时篱栅的总长度基本上是正确的。若要保持桩距均匀,篱栅的总长度就会明显失真图3.7.2(c),这一现象有时称为总体走样。第三十九页,共一百四十六页,编辑于2023年,星期六反走样尽管数学上的线段只有长度没有宽度,但光栅化后的线段为了可见,必须有一个宽度,帧缓存以像素为最小单位,若一条理想的线段在帧缓存里的宽度为一个像素,当仔细观察一个像素宽的直线时,会发现该线段只是部分覆盖了1个像素大小的方形区域,如图3.7.3。第四十页,共一百四十六页,编辑于2023年,星期六第四十一页,共一百四十六页,编辑于2023年,星期六反走样提高显示器的分辨率只能减轻而不能消除锯齿问题。第四十二页,共一百四十六页,编辑于2023年,星期六反走样对于能显示两级以上亮度的光栅系统,可以采用反走样方法适当地修改沿图元边界的像素亮度,平滑边界,减小锯齿状、斑块状的亮度差异,改善显示效果。一种简单、直接的反走样方法,就是把屏幕看成由比实际更细的网格所覆盖,从而增加采样频率,然后根据这种更细网格,使用采样点来确定每个屏幕像素的合适亮度。这种在高分辨率下对对象进行采样并在较低分辨率上显示其结果的技术称为过采样(supersampling),也称为后滤波(postfiltering)。另一种方法是通过计算待显示的每个像素在对象上的覆盖区域来确定像素的亮度。计算覆盖区域的反走样称为区域采样(areasampling),也称为前滤波(prefiltering)。还可以通过移动像素区域的显示位置而实现反走样,这种技术称为像素移相(pixelphasing)。第四十三页,共一百四十六页,编辑于2023年,星期六前滤波与后滤波滤波的概念来源于信号处理领域。若将亮度作为信号,则颜色均匀的、亮度缓慢变化的区域对应于低频部分,具有清晰边界的、亮度快速变化的区域对应于高频部分。为了减少图像空间里的线段与其它线段的参差不齐现象,希望将亮度的突变“抹平”,从信号处理角度来看,就是将高频率的成分“过滤掉”。前滤波就是在采样前对原始连续信号进行处理直接获取各个像素应有的亮度(在采样之前进行滤波)。后滤波则首先从原始连续信号获取离散采样值,然后再用这些采样值计算像素值(在采样之后进行滤波)。第四十四页,共一百四十六页,编辑于2023年,星期六区域采样区域采样属于前滤波技术,把一个栅格网叠放在需要栅格化的物体上,对于每一个与该物体叠交的像素区域,计算该区域与物体叠交的百分比。该百分比决定了该像素的总体颜色中有多少成分来源于该物体,该像素区域与物体叠交的百分比越高,该物体对像素总体颜色的影响就越大。图3.7.4a中用宽度为1个像素的长方形区域来代表一条直线,该长方形区域与每个叠交的像素的面积百分比通过解析方式算出。如果背景为黑色,直线为白色,计算所得的百分比可直接用来设定各像素的颜色(图3.7.4b)。第四十五页,共一百四十六页,编辑于2023年,星期六虽然图3.7.4b所示经过区域采样得到的直线的离散逼近看起来有些“模糊”,但它不再有从物体颜色到背景颜色之间的突然过渡。而这种突然过渡是使用普通扫描转换的结果(图3.7.4c)。在减少图像失真与造成图像模糊两者之间力求折中是以滤波为基础的反走样技术的特征。第四十六页,共一百四十六页,编辑于2023年,星期六直线段的过采样直线段的过采样可以用多种方式来完成。对于直线段,可以把每个像素分成一定数目的子像素,并统计沿直线路径的子像素数目,再将每个像素的亮度设置为正比于子像素数目的值。图3.7.5中,每个正方形像素区域被分成9个大小相等的正方形子像素,阴影区域表示由Bresenham算法选择的子像素。由于任何像素中可供选择的子像素的最大数目为3,因次该方法能提供0以上的3种亮度等级。该例中位置(10,20)像素的亮度设置为3;位置(11,21)和(12,21)像素的亮度设置为2;位置(11,20)和(12,22)像素的亮度设置为1。因此,该直线分布在较多数目的像素上,并且通过在阶梯状附近显示有些模糊的直线路径,从而平滑阶梯状效果。如果要使用更多的亮度等级来实现直线段的反走样,就需要增加每个像素中的子像素采样数目,如16个子像素能给出0以上的4个亮度等级,25个子像素能给出5个等级。对于宽度超过1个像素的直线段的反走样,也可以采用该方法处理,如图3.7.6。第四十七页,共一百四十六页,编辑于2023年,星期六由于首先获得离散的采样值,然后再由这些采样值计算像素值,因此过采样是一种后滤波技术。但由于这只不过是用每个像素范围内有限的采样值来求准确的解析解的近似值,过采样技术也可认为是区域采样法的一种近似实现。第四十八页,共一百四十六页,编辑于2023年,星期六低通滤波低通滤波是一种给每个像素计算出一个新值的后滤波技术。这个新值是该像素的原始值及其相邻若干像素的加权平均。计算所需的权值存放在一个(2n+1)×(2n+1)形式定义的模板中,模板里所有权值的总和为1,图3.7.7a为一个3×3的滤波器。为某一像素计算新值就是将滤波器以该像素为中心与像素栅格对齐。模板中每个权系数与其对应的像素值的乘积之和就是该像素的加权平均值。用这个滤波器处理图3.7.4c的像素值的结果如图3.7.7b。第四十九页,共一百四十六页,编辑于2023年,星期六图形变换计算机绘图是产生三维场景的二维图像(屏幕上只能绘出二维图像),计算机对物体绘图的过程类似于用一部相机拍摄照片,如图4.1.第五十页,共一百四十六页,编辑于2023年,星期六第五十一页,共一百四十六页,编辑于2023年,星期六绘图与拍照过程对比用照相机拍照的步骤大致如下:(1)把照相机固定在三脚架上,并让它对准场景(视图变换)。(2)对场景进行安排,使各个物体在照片中的位置是我们所希望的(模型变换)。(3)选择照相机的镜头,并调整放大倍数(投影变换)。(4)确定最终照片的大小(视口变换)。与此类似,把一个物体的三维坐标变换到屏幕上的像素坐标,共需要三个步骤:(1)坐标变换,包括模型、视图和投影变换,变换过程用矩阵乘法表示,包括平移、旋转、缩放、投影等。(2)由于场景是在一个矩形窗口(相当于取景框)中绘制的,因此位于窗口之外的物体(或物体的一部分)必须被裁减掉。(3)最后,经过变换的坐标和屏幕像素之间必须建立对应关系,这个过程称为视口变换。人们对上述过程总结出了一套规范的标准流程,首要任务是将场景中的各个对象进行建模,然后按规范流程对物体的顶点坐标分阶段地进行统一处理,最终获得二维屏幕图像。第五十二页,共一百四十六页,编辑于2023年,星期六几何变换计算机图形系统的基本功能之一就是模拟在三维空间中对物体进行操纵,这种模拟的空间操纵称为变换。在构建三维物体和场景的过程中,通过将简单图元进行平移、旋转、缩放等操作来构建复杂对象和场景。可以从两种互补的观点来描述物体的变换。第一种是物体相对于一个固定的坐标系进行变换,即对物体的每一个点(顶点)进行变换,改变它的位置、方向或大小,称为几何变换。第二种观点将物体看做固定不动,而坐标系则相对于物体做变换,称为坐标变换。如要显示一辆在一片风景前驶过的汽车,我们既可以保持背景不动而让汽车移动(几何变换),也可以保持汽车不动而让背景移动(坐标变换)。几何变换有时也称为建模变换。第五十三页,共一百四十六页,编辑于2023年,星期六基本二维几何变换平移、旋转和缩放是所有图形软件包中都具有的基本几何变换。平移:通过将位移量加到一个点的坐标上生成一个新的坐标位置,可以实现一次平移。对于一个由多个顶点定义的对象,可以通过对所有顶点使用相同的位移量来实现平移。设原始坐标为(x,y),平移向量为(tx,ty),新坐标为(x,y),则:若用列向量来表示坐标位置和平移向量(以前有些文献用行向量表示,目前的规范大多用列向量表示),则:用矩阵形式表示二维平移方程为:第五十四页,共一百四十六页,编辑于2023年,星期六平移平移是一种移动对象而不改变其形状的刚体变换。对象上的每一点移动了相同的距离。一条直线段的平移通过对其两端点分别平移而实现,多边形的平移也以类似的方法实现。第五十五页,共一百四十六页,编辑于2023年,星期六二维旋转通过指定一个旋转轴和一个旋转角度,可以进行一次旋转变换,将对象的所有顶点按指定角度绕指定旋转轴旋转后,该对象的所有点都旋转到新位置。可以将对象绕与xy平面垂直的旋转轴(与z轴平行)旋转。二维旋转的参数包括旋转角、旋转基准点(xr,yr),如图。基准点是旋转轴与xy平面的交点,正角度表示将对象绕基准点作逆时针旋转,负角度表示将对象绕基准点作顺时针旋转。第五十六页,共一百四十六页,编辑于2023年,星期六绕原点的二维旋转为了简化,先考虑当基准点为坐标原点时点P进行旋转的变换方程。如下图,r是点P到原点的固定距离,角是点的原始位置向量与水平轴的夹角,是旋转角,利用三角等式,可得旋转后的点坐标为:点的原始坐标为:第五十七页,共一百四十六页,编辑于2023年,星期六二维旋转的矩阵形式代入上式得:用列向量表示坐标位置,则旋转方程的矩阵形式为:其中,旋转矩阵为旋转变换的矩阵形式中,用列向量来表示坐标是目前标准的数学形式,早期的文献及图形系统有些用行向量表示坐标位置,这会改变执行旋转时矩阵相乘的顺序,现在OpenGL、Java、PHIGS、GKS等都按标准列向量方式表示。第五十八页,共一百四十六页,编辑于2023年,星期六绕任意点的二维旋转上图给出了绕任意基准点旋转的例子,利用图中的三角关系,可得绕任意基准点旋转的变换方程:这个通用的旋转方程包含了一个加项,后面章节中将讨论更一致的方法。旋转也是一种不变形地移动对象的刚体变换,物体上的所有点旋转相同的角度,线段、多边形的旋转可通过将每个顶点旋转指定的角度来实现。第五十九页,共一百四十六页,编辑于2023年,星期六二维缩放改变一个对象的大小,可使用缩放变换,一个简单的二维缩放可通过将缩放系数sx

、sy与对象坐标相乘来实现(相对于坐标原点的缩放)。写成矩阵形式为:或其中S为缩放矩阵,缩放系数sx在x方向缩放对象,sy在y方向缩放对象,值小于1将缩小对象的尺寸,值大于1则放大对象,若sx和sy不等将产生差值缩放,有些系统中,缩放系数可为负值,这不仅改变对象的尺寸,还产生相对于坐标轴的反射。第六十页,共一百四十六页,编辑于2023年,星期六相对于固定点的缩放可以选择一个在缩放变换后不改变位置的点,称为固定点(缩放的基准点),以控制缩放后对象的位置。固定点的坐标(xf,yf)可以选择为对象的中心,也可以选择为任意其他位置。多边形通过缩放每个顶点到固定点的距离而进行缩放。如下图,顶点(x,y)经过缩放后的坐标(x,y)为:第六十一页,共一百四十六页,编辑于2023年,星期六相对于固定点的缩放将乘法项与加法项重新组合后为:其中加法项xf(1-sx)和yf(1-sy)对于对象中的任何点都是常数。在缩放公式中包含固定点的坐标,类似于在旋转公式中包含基准点的坐标。多边形的缩放可以通过将变换方程应用于每个顶点,然后利用变换后的顶点重新生成多边形而实现。第六十二页,共一百四十六页,编辑于2023年,星期六复合变换与齐次坐标在实际绘图时,常常需要对物体连续进行多次变换,例如先平移,再旋转,然后再放大,这就需要对该物体的点集按变换顺序依次进行,计算量较大。如果只对物体进行旋转和缩放两类变换,则可以先将这两种变换合成为一个复合变换,将两次运算简化为一次性的复合矩阵与坐标向量的乘法。对图形做上述一系列变换时,只要用点集与这个复合矩阵相乘即可。但如果在变换中有平移变换,矩阵就不容易合并了,因为平移变换与旋转、缩放变换的表示形式不一样;平移变换为矩阵的加法,而旋转和缩放变换为矩阵的乘法。为了使各种变换的表示形式一致,使变换的合成更容易,人们引入了齐次坐标的概念。第六十三页,共一百四十六页,编辑于2023年,星期六齐次坐标如果将22的矩阵表达式扩充为33的矩阵,就可以把平移也表示为乘法形式,此时变换矩阵的第三列用于平移项,因而所有的变换公式都可以表示为矩阵乘法的形式。为了实现这种操作,必须解释从二维坐标到三元列向量的矩阵表示。标准的实现技术是将二维坐标(x,y)扩充到三维表示(xw,yw,w),称为齐次坐标,其中齐次参数w是一个非零值,定义

,这样,普通的二维齐次坐标可表示为(xw,yw,w)。对于二维几何变换,可以把齐次参数w取为任何非零值,因而坐标点(x,y)可以有无数个等价的齐次表达式,最方便的选择是简单地设置w=1,因此每个二维位置都可用齐次坐标(x,y,1)来表示。利用齐次坐标,可以使我们能用统一的矩阵相乘的形式来表示所有的几何变换公式,这是图形系统中使用的标准方法。二维坐标位置用三元列向量表示,而二维变换用一个33的矩阵表示。第六十四页,共一百四十六页,编辑于2023年,星期六二维平移矩阵的齐次坐标表示使用齐次坐标,二维平移可表示为下面的乘法。该式可简写为:其中T(tx,ty)是上式中的33矩阵,可以简单地用T来表示平移矩阵。齐次坐标的诡秘性在于把2阶(或3阶)的列矩阵相加变成了3阶(或4阶)的矩阵与矩阵相乘的运算。第六十五页,共一百四十六页,编辑于2023年,星期六二维旋转矩阵的齐次坐标表示使用齐次坐标,绕坐标原点的二维旋转可表示为下面的矩阵乘法。该式可简写为:其中R()为上式中的33矩阵,可以简单地用R来表示旋转矩阵。有些图形软件包只支持绕坐标原点的旋转,绕任意基准点的旋转需要一系列的变换操作来完成。第六十六页,共一百四十六页,编辑于2023年,星期六二维缩放矩阵的齐次坐标表示使用齐次坐标,相对于原点的二维缩放可表示为如下的矩阵乘法。该式可简写为:其中S(sx,sy)为上式中的33矩阵,可以简单地用S来表示缩放矩阵。有些图形软件包仅支持相对于坐标原点的缩放,相对于另一固定点的缩放需要用一系列的变换操作来完成。此外还有其他一些变换,如反射、错切等。第六十七页,共一百四十六页,编辑于2023年,星期六逆变换对于平移变换,通过对平移距离取负值而得到逆矩阵,二维平移距离为tx和ty的逆平移矩阵为:这产生相反方向的平移,而平移矩阵与其逆矩阵的乘积是一个单位矩阵。逆旋转通过用负的旋转角度来实现,绕坐标原点旋转角为的二维逆旋转矩阵为:第六十八页,共一百四十六页,编辑于2023年,星期六逆变换旋转角的负值生成顺时针方向的旋转,因而旋转矩阵与其逆旋转矩阵的乘积为单位矩阵。将缩放矩阵用缩放系数的倒数取代就得到缩放变换的逆矩阵。以坐标原点为中心、缩放参数为sx、sy的二维逆缩放矩阵为:该矩阵生成相反的缩放变换,因而缩放矩阵与其逆缩放矩阵的乘积为单位矩阵。第六十九页,共一百四十六页,编辑于2023年,星期六复合变换矩阵实际应用中对物体作几何变换时往往是多种简单变换的组合,可以将一系列连续的变换矩阵合成为一个复合变换矩阵,称为矩阵的合并或复合。由于引入了齐次坐标,基本的几何变换均可以表示为P=TP的形式,一个顶点坐标用列矩阵表示,复合变换时必须按操作的次序将每一步的变换矩阵左乘该列矩阵。因此复合变换的结合是每次的变换矩阵相乘,即将多个基本变换进行串乘:

P=Tn

(T3

(T2

(T1

P)))由于矩阵的乘法满足结合律,因此

P=(Tn

T3

T2

T1)P=TP最后的结果也具有P=TP的形式,这里,T=Tn

T3

T2

T1由于场景中许多顶点用相同的顺序进行变换,通常在计算时先求出复合矩阵T,再用T与顶点列矩阵相乘,这与逐步用矩阵相乘相比能有效提高计算效率。第七十页,共一百四十六页,编辑于2023年,星期六矩阵的串乘复合变换就是将多个基本变换进行串乘,这种方法非常适合于流水线结构的图形系统。假设对某点P执行一系列的变换操作后得到新点Q,这一变换序列表示为如下形式:

Q=CBAP式中并没有括号,但变换的执行次序会直接影响计算效率。一种方式是先执行变换A,再执行B ,最后执行C。该执行顺序与下图的组合次序相同,是按步骤对多个点进行变换,每一步都是对已经变换过的点再进行新的变换。

Q=(C(B(AP)))第七十一页,共一百四十六页,编辑于2023年,星期六图形系统的流水线结构如果只对原始的点进行一次总的变换,这个执行次序是最有效的,因为每次变换只是用一个总的变换矩阵与点的列矩阵相乘。如果需要对多个点进行变换,就把运算过程分成两个步骤。第一步,先计算:

M=CBA第二步,把这个矩阵应用到每一点上:

Q=MP这种运算次序对应于右图的流水线结构:在这种流水线结构中,先计算矩阵M,然后把M装载到流水线结构的变换处理单元里,再应用到成千上万个顶点上,由于只用单个矩阵对每个点进行运算,因而比一步步用单个矩阵进行多次变换的计算量要小得多。第七十二页,共一百四十六页,编辑于2023年,星期六二维复合变换二维复合平移:将两个连续的平移向量(t1x,t1y)和(t2x,t2y)作用于点P,平移后的点P可按下式计算:P=T(t2x,t2y){T(t1x,t1y)P}={T(t2x,t2y)T(t1x,t1y)}P该平移序列的复合变换矩阵为:或T(t2x,t2y)T(t1x,t1y)=T(t1x+2x,t1y+2y)这表示两个连续平移是相加的。第七十三页,共一百四十六页,编辑于2023年,星期六二维复合旋转将两个连续的旋转变换作用于点P,旋转后的点P可按下式计算:

P=R(2){R(1)P}={R(2)R(1)}P可以证明,两个连续旋转也是相加的:

R(2)R(1)=R(1+2)点旋转后的坐标可以使用复合矩阵表示为:

P=R(1+2)P第七十四页,共一百四十六页,编辑于2023年,星期六二维复合缩放合并两个连续的二维缩放矩阵,生成的复合缩放矩阵为:或

S(s2x,s2y)S(s1x,s1y)=S(s1xs2x,s1y

s2y)这表明连续缩放操作是相乘的。第七十五页,共一百四十六页,编辑于2023年,星期六通用二维基准点旋转当图形软件包仅提供绕坐标系原点的旋转函数时,可通过下列平移-旋转-平移操作来实现绕任意基准点(xr,yr)的旋转。1、平移对象使基准点位置移动到坐标原点;2、绕坐标原点旋转;3、平移对象使基准点回到其坐标位置。这个变换次序如下图所示。第七十六页,共一百四十六页,编辑于2023年,星期六通用二维基准点旋转利用矩阵合并可得该变换序列的复合变换矩阵:用矩阵表达的结果与以前推导的一般式完全相同,但表达更明确。该式还可以用下列形式表示:T(xr,yr

)R()T(-xr,-yr

)=R(xr,yr,

)第七十七页,共一百四十六页,编辑于2023年,星期六回顾:绕任意点的二维旋转上图给出了绕任意基准点旋转的例子,利用图中的三角关系,可得绕任意基准点旋转的变换方程:第七十八页,共一百四十六页,编辑于2023年,星期六通用二维基准点缩放当图形软件包只有相对于坐标原点的缩放函数时,可通过下列平移-缩放-平移操作来实现相对于任意基准点(xf,yf)的缩放。1、平移对象使固定点与坐标原点重合;2、相对于坐标原点进行缩放;3、平移对象使固定点返回到原始位置。这个变换次序如下图所示。第七十九页,共一百四十六页,编辑于2023年,星期六通用二维基准点缩放利用矩阵合并可得该序列的复合变换矩阵:用矩阵表达的结果也与以前推导的一般式完全相同,但表达更明确。该式还可以用下列形式表示:T(xf,yf

)S(sx,sy

)T(-xf,-yf

)=S(xf,yf,,sx,sy

)第八十页,共一百四十六页,编辑于2023年,星期六回顾:相对于固定点的缩放可以选择一个在缩放变换后不改变位置的点,称为固定点(缩放的基准点),以控制缩放后对象的位置。固定点的坐标(xf,yf)可以选择为对象的中心,也可以选择为任意其他位置。多边形通过缩放每个顶点到固定点的距离而进行缩放。如下图,顶点(x,y)经过缩放后的坐标(x,y)为:第八十一页,共一百四十六页,编辑于2023年,星期六二维坐标系间的变换计算机图形经常需要在场景处理的各阶段将对象的描述从一个坐标系变换到另一个坐标系,如在建模过程中,每个对象在各自的局部坐标系中设计,这些局部坐标描述必须变换到一个统一的世界坐标系的相应位置和方向。下图给出了一个在xy坐标系中,原点在(x0,y0)、方向角为的xy坐标系。为了将对象描述从xy坐标系变换到xy坐标系,必须建立把xy轴叠加到xy轴的变换,这需要分两步进行:第八十二页,共一百四十六页,编辑于2023年,星期六二维坐标系间的变换(1)将xy坐标系的原点(x0,y0)平移到xy坐标系的原点(0,0);(2)将x轴旋转到x轴上。坐标原点的平移可以用以下的矩阵表示:平移操作后两个坐标系的方位如图所示。第八十三页,共一百四十六页,编辑于2023年,星期六二维坐标系间的变换为了将两个系统的轴重合,可以顺时针旋转:将这两个变换矩阵合并起来,就给出了将对象描述从xy坐标系变换到xy坐标系的复合变换矩阵:第八十四页,共一百四十六页,编辑于2023年,星期六三维空间的几何变换三维几何变换是在二维变换的基础上增加了Z坐标而得到的,可以通过指定一个在三个坐标方向移动距离的三维向量来对物体进行平移变换。也可以利用三个坐标方向的缩放因子来缩放对象。三维空间的旋转比二维坐标系中的旋转要复杂,在xy平面上对物体进行二维旋转时,只需考虑沿垂直于xy平面的坐标轴进行旋转;但在三维空间中,可以选择任意方向的旋转轴。大多数图形软件将三维旋转分解为绕三个坐标轴的二维旋转的复合,另一方案是根据旋转轴的方向和旋转角度建立一个总的旋转矩阵。一个三维点在齐次坐标中表示为四元列向量,每一个几何变换都是一个44矩阵,多个变换序列可以依次合并,每一后续变换矩阵都从左边与现有矩阵相乘,最终得到一个总的变换矩阵。第八十五页,共一百四十六页,编辑于2023年,星期六三维平移在三维齐次坐标系中,通过将平移向量(tx,ty,tz)加到P点的坐标,将点P(x,y,z)平移到新位置P=(x,y,z):

x=x+tx,y=y+ty,z=z+tz,用矩阵表示为:或第八十六页,共一百四十六页,编辑于2023年,星期六三维平移在三维空间中,对象的平移通过平移该对象的各个顶点来实现,如下图。第八十七页,共一百四十六页,编辑于2023年,星期六三维旋转可以围绕空间的任意轴旋转一个对象,但绕与坐标轴平行的轴的旋转是最容易处理的。可以利用绕坐标轴的旋转(结合适当的平移)的复合变换来表示绕任意轴的旋转。通常,如果沿着坐标轴的正半轴观察原点,那么绕坐标轴的逆时针旋转为正向旋转,如下图。在二维观察中,xy平面上的正向旋转是绕基准点(平行于z坐标轴的轴)进行逆时针旋转。第八十八页,共一百四十六页,编辑于2023年,星期六绕z轴的三维旋转绕z轴的旋转可以很容易推广到三维:参数表示绕z轴旋转的角度,上式用齐次坐标表示为:更简洁的形式为:下图为一个对象绕z轴旋转的示意图。第八十九页,共一百四十六页,编辑于2023年,星期六绕y轴的三维旋转同理,绕y轴的三维旋转矩阵为:第九十页,共一百四十六页,编辑于2023年,星期六绕x轴的三维旋转绕x轴的三维旋转矩阵为:第九十一页,共一百四十六页,编辑于2023年,星期六一般的三维旋转一般的三维旋转:对于绕与坐标轴不重合的轴进行旋转的变换矩阵,可以利用平移与坐标轴旋转的复合而得到。如将对象绕平行于某坐标轴的轴旋转,可以通过下列变换序列来得到所需的旋转矩阵。1、平移对象使其旋转轴与平行的坐标轴重合;2、绕该坐标轴进行旋转;3、平移对象将其旋转轴移回到原来位置。该序列如下图,其复合矩阵为:

R(

)

=T-1

Rx()T第九十二页,共一百四十六页,编辑于2023年,星期六三维缩放在二维缩放矩阵中引入z坐标方向的缩放系数,很容易扩充到三维缩放变换,用齐次坐标表示为:某些图形软件仅提供相对于坐标原点的缩放函数,可以应用下列变换序列进行相对于任意给定点(xf,yf,zf)的缩放变换。1、平移给定点到原点;2、进行相对于坐标原点的缩放变换;3、将给定点移回原来位置。第九十三页,共一百四十六页,编辑于2023年,星期六三维复合变换类似于二维复合变换,可以将变换序列中各次变换的矩阵相乘合成三维复合变换。根据给定的变换次序,逐次左乘变换矩阵,最右边的矩阵是最先作用于对象的变换,最左边的矩阵是最后执行的变换。第九十四页,共一百四十六页,编辑于2023年,星期六三维坐标系间的变换前面讨论了将二维场景从一个参考坐标系到另一个坐标系的变换。坐标系之间的变换在计算机图形软件包中常用于场景的构造(建模)、二维及三维观察变换。对于笛卡尔坐标系,给定xyz系统在xyz系统中的位置,要将xyz坐标描述转换到xyz坐标系,先将xyz坐标系的原点平移到xyz坐标系的原点,然后进行一系列的旋转使对应的坐标轴重合,如果两个坐标系使用不同的比例,则必须进行一次缩放变换以补偿两坐标系之间的差别。第九十五页,共一百四十六页,编辑于2023年,星期六显示变换本节介绍在输出设备上显示二维图形的过程和技术。图形在计算机中是以数据的形式进行处理的,而坐标则建立了图形和数据之间的联系。三维空间中的物体要在二维的屏幕上显示出来,必须通过投影的方式把三维物体转换成二维的平面图形。往往在图形显示时只需要显示图形的某一部分,这时可以在投影面上定义一个窗口。只有在窗口内的图形才显示,而窗口外的部分则不显示。在屏幕上也可以定义一个矩形,称为视口。经过窗口到视口的变换,窗口内的图形才能变换到视口中显示。第九十六页,共一百四十六页,编辑于2023年,星期六二维观察任何一个笛卡尔坐标系都可以作为世界坐标系,世界坐标系可用来定义图形(建模)。在二维情况下,可将xy平面上包含全图或局部图的区域作为要显示的窗口,所选区域中的图形映射到设备坐标系的指定区域(视口)。窗口(裁剪窗口,取景框)是针对世界坐标系而言的,视口是针对显示屏幕而言的。二维场景中要显示的部分称为裁剪窗口(clippingwindow),因为所有在此区域之外的场景都要被裁去,只有在裁剪窗口内的场景才能显示在屏幕上。第九十七页,共一百四十六页,编辑于2023年,星期六裁剪窗口裁剪窗口有时暗指世界窗口(worldwindow)或观察窗口(viewingwindow)。图形系统曾一度简称裁剪窗口为“窗口”,但由于现在众多的窗口操作系统在计算机上使用,容易混淆,必须把他们区分开来。现在采用术语“裁剪窗口”来表示要转换为屏幕上点阵图形的场景部分。图形系统还用称为“视口”(viewport)的另一“窗口”来表示屏幕上的显示区域,是用来显示场景(裁剪窗口)的一个区域,也称为视区。对象在裁剪窗口内的部分映射到屏幕上指定的视口中(充满整个视口,可能有缩放)。裁剪窗口决定要看什么,而视口决定在输出设备的什么位置进行观察。注意:裁剪窗口是针对物体的,是世界坐标系中需要显示的场景范围。第九十八页,共一百四十六页,编辑于2023年,星期六裁剪窗口与视口第九十九页,共一百四十六页,编辑于2023年,星期六裁剪窗口与视口通过改变视口的位置,可以在输出设备的不同位置观察物体,使用多个视口可在不同的屏幕位置观察场景的不同部分,也可以通过改变视口的尺寸来改变显示对象的尺寸和位置。

温馨提示

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

评论

0/150

提交评论