计算机辅助设计与制造:第二章 计算机图形处理技术_第1页
计算机辅助设计与制造:第二章 计算机图形处理技术_第2页
计算机辅助设计与制造:第二章 计算机图形处理技术_第3页
计算机辅助设计与制造:第二章 计算机图形处理技术_第4页
计算机辅助设计与制造:第二章 计算机图形处理技术_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

第二章计算机图形处理技术本章学习目标

掌握二维图形处理技术基础知识了解三维图形变换方法理解图形消隐技术和光照处理技术原理学习二维裁剪技术重点:二维图形几何变换学习内容概述

图形变换图形消隐技术

图形的光照处理技术

图形裁剪技术

OPENGL介绍学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术OPENGL介绍1.概述

构成图形的要素有两个:

几何要素——刻画形状的点、线、面、体…

非几何要素——反映物体表面属性或材质的明暗、灰度、色彩…

计算机图形处理是利用计算机高速运算能力和实时显示功能处理各类图形信息的技术。包括图形的存储、生成、显示、输出、以及图形变换、组合、分解和运算,控制绘图仪等图形输出设备完成绘图…

计算机图形处理与数学中研究图形不同,比数学中描述的图形更为具体,但仍是一种抽象,因为一只玻璃杯与一只塑料杯只要形状一样,颜色一样,透明度一样,则从计算机图形学的观点来看,它们的图形是一样的。并具有一定的明暗、灰度、色彩、纹理、透明性、线型、线宽…

如:几何方程表达的图形满足这个方程(形状信息),学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术OPENGL介绍

2.图形变换坐标系统

窗口-视区变换

几何变换基础

二维图形基本几何变换二维图形的复合变换三维图形的几何变换

图形变换指对图形的几何信息经过几何变换后产生新的图形,提出的构造或修改图形的方法。除图形的位置变动外,可以将图形放大或缩小,或者对图形作不同方向的拉伸来使其扭曲变形…

坐标系统

从定义一个零件的几何外形到图形设备上生成相应图形,需要建立相应的坐标系统来描述,并通过坐标变换来实现图形的表达2.图形变换世界坐标系(WorldCoordinateSystem)设备坐标系(DeviceCoordinateSystem)

规格化设备坐标系(NormalizedDeviceCoordinateSystem)坐标系统

从定义一个零件的几何外形到图形设备上生成相应图形,需要建立相应的坐标系统来描述,并通过坐标变换来实现图形的表达

实物物体所处空间中(二维或三维空间)用以协助用户定义图形所表达物体几何尺寸的坐标系,也称用户坐标系,多用右手直角坐标系理论上,世界坐标系是无限大且连续的,即它的定义域为实数域(-∞,+∞)。

O

X

Y

O

XYZ2.图形变换世界坐标系(WorldCoordinateSystem)坐标系统

从定义一个零件的几何外形到图形设备上生成相应图形,通常需要建立相应的坐标系统来描述,并通过坐标变换来实现图形的表达

与图形输出设备相关联,用以定义图形几何尺寸及位置的坐标系,也称物理坐标系设备坐标系是一个二维平面坐标系,通常使用左手直角坐标系

度量单位:象素(显示器)或步长(绘图仪)如显示器通常为640×400、1024×768象素,绘图仪的步长为1μm、10μm等,于是设备坐标系的定义域是整数域而且是有界的。

O

X

Y(显示器)2.图形变换设备坐标系(DeviceCoordinateSystem)

坐标系统

从定义一个零件的几何外形到图形设备上生成相应图形,通常需要建立相应的坐标系统来描述,并通过坐标变换来实现图形的表达。

人为规定的假想设备坐标系,与设备无关

规格化设备坐标系坐标轴方向及原点与设备坐标系相同,但其最大工作范围的坐标值规范化为1

。以屏幕坐标为例,其原点仍是左上角(或左下角),坐标为(0.0,0.0),距原点最远的屏幕右下角(或右上角),其坐标是(1.0,1.0)。对于既定的图形输出设备来说,其规格化设备坐标系与设备坐标系相差一个固定倍数,即相差该设备的分辨率。当开发一个应用于不同分辨率设备的图形软件时,首先将输出图形转换为规格化设备坐标系,以控制图形在设备显示范围内的相对位置。当转换到具体的不同输出设备时,只须将图形的规格化坐标再乘以相应的设备分辨率即可。这样使图形软件与图形设备隔离开,增加了图形软件的可移植性。

规格化设备坐标系(NormalizedDeviceCoordinateSystem)2.图形变换窗口-视区变换窗口:用户坐标系(世界坐标系)中定义的确定显示内容的一个矩形区域

工程设计中,需要突出图形的某一部分而用一个局部视图单独画出来。在计算机图形学里,如何把指定的局部图形从整体中分离出来,并对这部分图形进行清晰、正确的显示,我们把“窗口”这个词引用到计算机图形学中来,即通过在整图中开“窗口”的方法解决上述问题。2.图形变换视区:设备坐标系(通常是图形显示器)中定义的一个用于输出所要显示的图形和文字的矩形区域窗口-视区变换

用矩形左下角点坐标(XW1,YW1)和右上角点坐标(XW2,YW2)确定窗口的大小和位置,只有在这个区域内的图形在设备坐标系下输出,窗口外的部分则被裁掉(XW1,YW1)(XW2,YW2)2.图形变换

改变窗口的大小、位置和比例,用户可以方便地观察局部图形,控制图形的大小。除矩形窗口之外,还可以定义圆形窗口,多边形窗口等异形窗口,由于矩形窗口定义方便,处理也较为简单,是各种图形软件常用的窗口形式。窗口窗口-视区变换视区若将窗口中的图形显示在屏幕视区范围内,则视区决定了窗口内的图形在屏幕上显示的位置和大小一个屏幕上定义四个视区,同时输出一个鼠标的三视图和轴测图

2.图形变换

视区是一个有限的整数域,它应小于等于屏幕区域,而定义小于屏幕的视区是非常有用的,因为这样可以在同一屏幕上定义多个视区,用来同时显示不同的图形信息。窗口-视区变换

窗口和视区是在不同的坐标系中定义的,窗口中的图形信息送到视区输出前,需进行坐标变换,即把用户坐标系的坐标值转化为设备(屏幕)坐标系的坐标值,此变换即窗口—视区变换

(XV,YV)

视区窗口(XW,YW)

(XV1,YV1)

(XV2,YV2)

(Xw1,Yw1)

(Xw2,Yw2)

YYooxxXV=XV1

+(XW

-XW1)YV=YV1

+(YW

-YW1)XW=XW1+(XV-XV1)YW=YW1

+(YV-YV1)

2.图形变换窗口-视区变换(XV,YV)

视区窗口(XW,YW)

(XV1,YV1)

(XV2,YV2)

(Xw1,Yw1)

(Xw2,Yw2)

YYooxxXV=XV1

+(XW

-XW1)YV=YV1

+(YW

-YW1)XW=XW1+(XV-XV1)YW=YW1

+(YV-YV1)

2.图形变换用于从窗口的用户坐标值求对应的视区设备坐标值;用于从视区的设备坐标值求对应的窗口中的用户坐标值。

(1)不是窗口中的内容,就不会在视区中出现的;(2)假如要图像不失真,应使窗口的长与宽之比等于视区的长与宽之比;几何变换基础

图形由图形的顶点坐标、顶点之间的拓扑关系以及组成图形的面和线的表达模型所决定

任何一个图形都可以认为是点之间的连线构成

对一个图形作几何变换,实际上就是对一系列点进行变换点和图形的表示

二维平面内,一个点通常用坐标(x,y)来表示,矩阵形式为:

三角形的三个顶点坐标a(x1,y1),b(x2,y2),c(x3,y3),用矩阵表示:2.图形变换点和图形的齐次坐标表示

齐次坐标是将一个n维空间的点用n+1维,即附加一个坐标表示二维点[xy]的齐次坐标通常用三维坐标[HxHyH]表示三维点[xyz]的齐次坐标通常用四维坐标[HxHyHzH]表示…

齐次坐标系中,附加的坐标H称为比例因子

Hx=H×x、Hy=H×y、Hz=H×zH的取值是任意的,任何一个点可用许多组齐次坐标来表示,

如:二维点[32]可表示为[321],[642]…

当取H=1时,称为齐次坐标的规格化形式

四边形用齐次坐标可表示:

2.图形变换采用齐次坐标表示的主要优点:(1)为几何图形的二维、三维甚至高维空间的坐标变换提供统一的矩阵运算方法,并可以方便地将它们组合在一起进行组合变换

平移、比例和旋转等变换的组合变换处理形式不统一,将很难把它们级联在一起(2)无穷远点的处理比较方便。

如,对二维的齐次坐标[ABH],当H→0时,表示直线上Ax+By=0的连续点(x,y)逐渐趋近于无穷点

三维情况下,利用齐次坐标表示视点在世界坐标系原点时的投影变换2.图形变换变换矩阵

设一个几何图形的齐次坐标矩阵为A,另有一个矩阵T,则由矩阵乘法运算可得一新矩阵B:

B=A•T矩阵B是矩阵A经变换后的图形矩阵

用来对原图形施行坐标变换矩阵T

称为变换矩阵

根据矩阵运算原理,二维图形变换矩阵T为3×3阶矩阵,三维图形的变换矩阵T为4×4阶矩阵通过矩阵的乘法可以对图形进行诸如比例、对称、旋转、平移、投影等各种变换图形变换的主要工作就是求解变换矩阵T

2.图形变换二维图形的基本几何变换平移变换

比例变换

对称变换

旋转变换

错切变换

归纳

二维图形几何变换主要有:2.图形变换平移变换

图形的每一个点在给定的方向上移动相同距离所得的变换称为平移变换

图形在x轴方向的平移量为l,

在y轴方向的平移量为m,

则坐标点的平移变换:==2.图形变换比例变换(1)a=e=1时,为恒等比例变换,即图形不变

(2)a=e>1时,图形沿两个坐标轴方向等比放大

(3)a=e<1时,图形沿两个坐标轴方向等比缩小

(4)a≠e时,图形沿两个坐标轴方向进行非等比变换,称为畸变

图形中的每一个点以坐标原点为中心,按相同的比例进行放大或缩小所得到的变换称为比例变换

图形在x,y两个坐标方向放大或缩小比例分别为a和e,

则坐标点的比例变换:2.图形变换对称变换

对称变换也称反射变换,指变换前后的点对称于x轴、y轴、某一直线或点(1)以x轴为对称线的对称变换

变换后,图形点集的x坐标值不变,

y坐标值不变,符号相反2.图形变换(2)以Y轴为对称线的对称变换

变换后,图形点集的y坐标值不变,

x坐标值不变,符号相反2.图形变换(3)以原点为对称的对称变换

变换后,图形点集的x和y坐标值不变,符号均相反2.图形变换(5)以直线y=-x为对称线的对称变换(4)以直线y=x为对称线的对称变换变换后,图形点集的x和y坐标对调

变换后,图形点集的x和y坐标对调,符号相反2.图形变换旋转变换

图形绕原点沿逆时针方向旋转θ角,变换后的点(x*,y*)的数学表达式:规定:逆时针方向为正,顺时针方向为负旋转变换是将图形绕固定点顺时针或逆时针方向进行旋转2.图形变换错切变换

错切变换是图形的每一个点在某一方向上坐标保持不变,而另一坐标方向上坐标进行线性变换,或都进行线性变换有x和y方向的错切变换

1.图形沿x方向的错切矩阵表示为:

图形的y坐标不变,x坐标随坐标(xy)和系数b作线性变化,

b≠0

,b>0,图形沿+x方向错切;b<0,图形沿-x方向错切2.图形变换错切变换有x和y方向的错切变换

2.图形沿y方向的错切矩阵表示为:

图形的x坐标不变,y坐标随坐标(xy)和系数d作线性变化,

d≠0,d>0,图形沿+y方向错切;d<0,图形沿–y方向错切

错切变换是图形的每一个点在某一方向上坐标保持不变,而另一坐标方向上坐标进行线性变换,或都进行线性变换2.图形变换0二维图形基本变换小结:

从二维图形的基本几何变换可见,各种图形变换完全取决于变换矩阵中各元素的取值

按照变换矩阵中各元素的功能,可将二维变换矩阵的一般表达式按如下虚线分为4个子矩阵:实现图形比例变换:

s>1,图形等比例缩小

0<s<1,图形等比例放大

s=1,图形大小不变T=实现图形比例、对称、错切、旋转变换实现图形平移变换实现图形透视变换(常用于三维图形)2.图形变换2.图形变换二维图形基本变换小结:平移比例对称旋转错切二维图形的复合变换组合变换中,多个变换矩阵之积称为组合变换矩阵

CAD/CAM中的图形变换比较复杂,往往仅用一种基本变换不能实现,需经由两种或多种基本变换的组合才能得所需的最终图形。这种由两个以上基本变换构成的变换称为复合变换(组合变换)或基本变换的级联

先旋转后平移先平移后旋转

设各次变换的矩阵分别为T1,T2

,……

,Tn,则复合变换的矩阵是各次变换矩阵的乘积,即:

T=T1•T2

……

•Tn2.图形变换复合变换例1:求三角形以点(4,6)为中心逆时针旋转30°的组合变换矩阵

相对于(e,f)点作旋转变换,由以下三个矩阵相乘来实现:

(1)平移(-4,-6)(2)旋转(30°)(3)平移(4,6)基本步骤:2.图形变换复合变换例2:图形对于任一条线y=ax+b

对称的组合变换矩阵

基本步骤:

(1)平移(-b)(2)旋转(θ)(3)对称(x轴)(4)旋转(-θ

)(5)平移(b)2.图形变换三维图形几何变换三维图形的几何变换是二维图形几何变换的简单扩展

与二维图形一样,用适当的变换矩阵也可以对三维图形进行各种几何变换

平移变换

比例变换

对称变换

旋转变换

错切变换

归纳

三维图形的基本几何变换主要有:2.图形变换平移变换平移变换是使立体在三维空间移动一个位置,而形状保持不变其中L、M、N分别为X、Y、Z方向的平移量

2.图形变换比例变换比例变换两种变换形式:对于整体图形进行缩放沿各坐标轴分别调节每个坐标方向上的大小

空间立体顶点坐标按规定比例放大或缩小称三维比例变换

变换方程:

沿每个坐标轴方向分别调节各坐标大小的比例变换齐次矩阵:2.图形变换对X0Z平面的对称变换

y坐标值改变符号对称变换标准三维空间对称变换是相对于坐标平面进行2.图形变换对称变换标准的三维空间对称变换是相对于坐标平面进行对X0Y平面的对称变换

z坐标值改变符号

对Y0Z平面的对称变换x坐标值改变符号

变换后点的坐标:

==2.图形变换旋转变换三维旋转变换是将空间立体绕坐标轴旋转一个角度,且角的正负按右手定则确定:右手大拇指指向旋转轴的正向,其余四个手指的指向即为角的正向

二维变换中,图形绕原点旋转的变换实际上是X0Y平面图形绕Z轴旋转的变换

1)绕X轴旋转的变换矩阵

空间立体绕x轴旋转各顶点的x坐标不变,只是y和z坐标发生变化yxyzz’y’zoox轴指向纸外2.图形变换3)绕Z轴旋转的变换矩阵2)绕Y轴旋转的变换矩阵

空间立体绕y轴旋转各顶点的y坐标不变,只是x和z坐标发生变化

空间立体绕z轴旋转各顶点的y坐标不变,只是x和y坐标发生变化

zyzxx’z’xooy轴指向纸外2.图形变换错切变换错切变换是指空间立体沿x、y、z三个方向都产生错变形。错切变形是画轴测图的基础,其变换矩阵为:变换后点坐标:Tsh===三维错切变换

z

y

x

沿z含x错切z

y

x

沿z含y错切

z

y

x

沿y含x错切

z

y

x

沿y含z错切z

y

x沿x含y错切z

y

x

沿x含z错切2.图形变换沿X轴含Y向错切

沿X轴含Y向错切变换矩阵为:错切变换为:

即x’=x+dyy’=yz’=z2.图形变换三维图形基本变换总结:

对三维空间的点如(x,y,z),可用齐次坐标表示为:(x,y,z,1),或(X,Y,Z,H)因此,三维空间里的点的变换可写为:其中[M]是4X4阶变换矩阵,即:

2.图形变换2.图形变换三维图形的组合变换

空间一点绕空间任一轴线的旋转变换。要通过将几个基本的变换组合在一起,得到该组合变换。

假定空间任一直线的方向矢量分别为:(l,m,n)

并经过原点(l,m,n)(x,y,z)(x’,y’,z’)XYZαβγON2.图形变换能否转换成绕X、Y或Z轴旋转的变换?

ON绕Z轴旋转θ2

到XOZ平面上,然后再绕Y轴旋转θ1,即可与Z轴重合。ONθ2θ1XYZ2.图形变换

这样,可得空间上任一点绕ON轴旋转的变换过程如下:

1)首先通过两次旋转,使ON轴与Z轴重合;

2)然后使点绕Z轴旋转θ角;

3)最后通过与1)相反的旋转,使ON轴回到原来的位置。假设,绕Z轴的旋转-θ2矩阵为T1

绕Y轴的旋转-θ1矩阵为T2

绕Z轴的旋转θ矩阵为T3

绕Y轴的旋转θ1矩阵为T4

绕Z轴的旋转θ2矩阵为T52.图形变换则总体变换矩阵为:

T=T1T2T3T4T5

由上推导可看出,只要能求出θ1、θ2的值,即可通过上式获得绕ON轴的变换矩阵。

由于矢量(001)绕Y轴旋转θ1,再绕Z轴旋转θ2即可与ON轴重合。即:

2.图形变换[lmn1]=[sinθ1cosθ2sinθ1sinθ2cosθ11]l=sinθ1cosθ2

m=sinθ1sinθ2

n=cosθ1从而通过上式即可得到θ1、θ2

的值。cosθ1=nsinθ1=sqrt(l2+m2)cosθ2=l/sqrt(l2+m2)sinθ2=m/sqrt(l2+m2)ONθ2θ1XYZ学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术OPENGL介绍

图形消隐的基本概念

消隐算法的基本测试方法

常用的消隐算法

下面图形代表哪一种情况呢???三维图形由于投影变换失去了深度信息,往往导致图形的二义性3.图形消隐技术图形消隐的基本概念

要消除二义性,就必须在绘制时消除实际不可见的线和面,习惯上将这些隐藏线或隐藏面消除的过程称为消隐

当沿投影视线观察一个三维物体时,由于物体中各种表面或其它物体的遮挡,某些线段或面不可见,这些不可见的线段或面称为隐藏线或隐藏面

查找、确定并消除隐藏线和隐藏面的技术称为消隐技术

3.图形消隐技术消隐算法的基本测试方法

各种消隐算法其策略方法各有特点,但都是以一些基本测试方法为基础。一种算法中往往会包含一种甚至多种基本测试方法基本测试方法重叠测试

深度测试可见性测试包含性测试

3.图形消隐技术

物体各外表面轮廓线框在透视投影图上是有若干个多边形构成的,外表面之间的遮蔽反映为多边形之间相交或包容。重叠测试是来检查两个多边形是否重叠,如果不重叠,说明两多边形肯定互不遮挡。这种测试也叫极大极小测试或边界盒测试,它提供了一个快速方法来判断两个多边形不重叠。

为提高计算机的处理效率,重叠测试可分为两步完成。3.图形消隐技术重叠测试1.粗筛选。将根本不可能重叠的多边形筛掉。其方法是:找到每个多边形的极值(最大和最小的x,y值),然后用一矩形去外接每个多边形,接着检查X和Y方向任意两个矩形是否相交。设两个多边形分别为A和B,如果A和B的顶点坐标满足如下四个不等式之一,则两个多边形不可能重叠,即:

3.图形消隐技术重叠测试测试无确定结果

对每条边进行最小最大测试不重叠,不可能互相遮蔽XminXmax2.如果上述不等式均得不到满足,则这两个多边形有可能重叠。此时,将一个多边形的每一条边与另一个多边形的每条边比较,测试它们是否相交,以此来判别两个多边形是否重叠。若两个多边形真的有重叠关系,则通过两线段求交算法计算其交点。

3.图形消隐技术图c图b图a重叠测试

对于不满足重叠测试的两多边形,还可能因一个多边形包容在另一个多边形内部而产生相互遮蔽。检验一个多边形是否包容在另一个多边形内部,需要逐个检验其多边形组成顶点是否包容在另一个多边形内部。包含性测试即是检查一个给定的点是否位于给定的多边形或多面体内。3.图形消隐技术包含性测试非凸多边形:可以有两种方法来测试点与多边形的包含关系,即射线交点数算法和夹角求和算法。ABCDEP包含性测试射线交点数算法测试点与非凸多边形的包含关系方法:ABCDEP交点数=偶数(含0)点在多边形外交点数=奇数点在多边形内ABCDEPABCDEP夹角求和算法

夹角和=0°点p在多边形外夹角和=360°点p在多边形内3.图形消隐技术

用来测试一个物体遮挡另一个物体的基本方法。

常用的有优先级测试和物体空间测试。

3.图形消隐技术深度测试

设P12是空间矩形F1

和三角形F2

在投影平面XOY平面的正投影的一个重影点。将P12的x,y坐标代入矩形F1和三角形F2的平面方程,分别求出Z1和Z2

比较Z1和Z2的大小,可知F1和F2所在的平面哪个更靠近观察者,即哪个面遮挡另一个面P2

Z

P12

F2

P1

F1

O

X

Y

优先级测试

Z1>Z2,则P1

点为可见点,F1

比F2

有较高的优先级

深度测试有时会出现异常情况。如下图,为两多边形循环遮挡,此时仅从一点的比较不能判断两个面在整体上哪个更靠近观察者,这时需把其中一个分成两个多边形(图中的黑色线段),再用上述方法分别进行测试。

3.图形消隐技术深度测试

视线向量S

法向向量N

法向向量N

法向向量N

<90°

<90°可见

可见

不可见

>90°可见性测试

单一凸性物体表面外法矢指向观察者方向的面是可见的,否则不可见。定义由观察点至物体方向的视线矢量为S,计算物体表面某点的法矢N和视线矢量的点积判别该点是否可见:

θ为N和S的夹角,当N指向视点方向时,N×S其积为正,为可见面3.图形消隐技术

主要用来判别物体自身各部分哪些部分没有被其自身其它部分遮挡即可见的,被其自身其它部分遮挡即不可见的常用的消隐算法根据消隐空间的不同,消隐算法分为两类:物体(物)空间(objectspace)的消隐算法

侧重于景中各物体之间的几何关系。直接在视点坐标系中确定视点不可见的表面区域,将它们表达成同原表面一致的数据结构。如:Catmull曲面分割算法…

图形(像)空间(imagespace)的消隐算法

侧重于向屏幕投影后形成的图像。在投影屏幕上以屏幕像素为采样单位,确定投影于每一像素的可见景物表面区域,将其颜色作为该像素的显示光亮度。

如:Warnock算法、Z-Buffer算法、扫描线算法

…根据消隐对象不同,消隐算法分为两类:

若消除的是物体上不可见的线段,称线消隐

若消除的是物体上不可见的面,称面消隐

3.图形消隐技术常用的消隐算法物消隐算法

像消隐算法线消隐3.图形消隐技术精度高,不受显示器分辨率的影响精度低,受显示器分辨率的影响面消隐物体复杂时,计算时间增加得多物体复杂时,相对而言计算时间增加较少

在众多的消隐算法中,到目前为止还没有哪一种算法能够适用所有应用领域,而且随着其应用领域的不断扩展,还会有新的算法出现。

物体(物)空间的消隐算法Catmull曲面分割算法是对曲面本身进行递归分割基本思想:

将原先的曲面片递归地加以分割,直至所有分割后的小曲面片在显示屏幕上投影至多覆盖一个象素,然后在各个象素上确定使用哪个小曲面片的色彩和灰度3.图形消隐技术适用于任何曲面图形(像)空间的消隐算法分离内含

相交

包围

基本思想:观察整个窗口区域判别窗口是否单纯窗口内无任何可见物体窗口已被一个可见面片完全充满将非单纯的窗口四等分为四个子窗口对每个子窗口再进一步判别是否单纯直到窗口单纯或窗口边长已缩至一个象素点为止

3.图形消隐技术循环细分算法,适用于平面多边形图形(像)空间的消隐算法基本思想:将投影到显示屏上的每一个象素所对应的多边形表面的深度进行比较,取最靠近观察者的一个对象的深度,通过深度的比较来决定该对象可见或不可见。

Catmull在1975年提出该算法,适用于正投影时的消隐处理用Z—buffer记录该表面在该像素点的深度用frame—buffer记录该表面在该像素点的颜色或亮度值3.图形消隐技术图形(像)空间的消隐算法基本思想:在图像空间中按扫描线从上到下的顺序来处理所显示的对象,将三维问题简化成二维问题

3.图形消隐技术

可假定视点在Z轴正向无穷远处,定义由视点和扫描线所确定的平面称为扫描平面,显然扫描平面是通过屏幕上某条扫描线且又垂直于显示屏幕的平面。图形(像)空间的消隐算法缺点在每一个被多边形覆盖像素处需要计算深度值被多个多边形覆盖的像素需要多次计算深度值3.图形消隐技术

由于一条扫描线实际对应屏幕上一行象素,可以把这一行象素定义为一个扫描线窗口。隐藏面的消隐问题,正是分别在一个一个这样的显示窗口与扫描平面上解决的。三维消隐问题转化为在扫描线的每个点上判定哪一条线段可见的二维问题。

学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术OPENGL介绍

光照处理的基本原理

光照处理的基本算法

阴影的处理

采用消隐技术消除了隐藏线和隐藏面后,图形没有了二义性问题,但要创造真实感图形需要光照处理技术。光照处理是绘制真实感图形所需的重要技术之一

光照处理方法是对真实世界的一种近似模拟

4.图形的光照处理技术

模拟光线照射在物体上,物体反映出来的感观效应,通过必要的算法实现实际物体在计算机上的虚拟光照处理的基本原理光照处理目的是希望光照射在物体上模拟眼睛看物体的效果

物体吸收某些波长的光,而反射或折射其它波长的光,则物体呈现某种颜色。

从物体表面反射或折射出来的光的强度取决于光源的性质、物体的表面性质、周围环境、视点位置以及不同人对光的感觉差异等诸多因素。

对物体进行光照处理需要建立合适的光照模型,并通过显示算法将物体在显示器上显示出来。

光的亮度由光的强度决定,光的颜色由波长决定4.图形的光照处理技术简单的光照模型

点光源的几何形状为一个点,位于空间的某个位置向周围所有方向上辐射等强度光在点光源的照射下,物体表面的不同部分亮度不同,亮度的大小依赖于它的朝向以及它与点光源之间的距离

光照处理模型常通过点光源照射物体说明:

光源发光照射在物体上,然后传递到人的眼里,实际上构成了一个光照系统

理想镜面反射L

N

P

R

V

一般光滑表面镜面反射L

N

P

R

L

N

P

R

粗糙表面镜面反射4.图形的光照处理技术简单的光照模型

漫反射

光线照射到表面粗糙、无光泽的物体上,物体表面表现为漫反射形式,即光线沿各不同方向都做相同的散射。

从各个角度观察,物体都有相同的亮度

4.图形的光照处理技术简单的光照模型

光滑的物体表面(如金属、塑料)在点光源的照射下会形成一块特别亮的区域,即所谓的“高光”,它是物体表面对入射光进行镜面反射引起的

镜面反射遵循反射定律,反射光与入射光位于表面法向两侧。镜面反射的光强取决于入射光的角度、波长和反射表面的材料性质…镜面反射

4.图形的光照处理技术简单的光照模型

环境光

光线在场景中经过复杂的传播之后,形成弥漫于整个空间的光线,称为环境光(或泛光

)。环境光使没有光源的直接照射的景物表面仍有一定的亮度而可见。

环境光在空间中近似地均匀分布,即在任何位置、任何方向上,强度都一样。环境光通常由多个物体经多重反射形成,因而无法精确地计算光强。

4.图形的光照处理技术光照效果:反射

地面

反射

背景

石头

墙面

纹理

六边形

反射

圆环

金属

方锥

光滑

球体

平面漫反射

圆柱体

材质效果

物件

4.图形的光照处理技术光照处理的基本算法

根据光照强度的计算,对于具有弯曲表面的物体,可以用其曲面方程算出每点的法线,然后按光照强度的计算模型计算每一点的亮度进行表达问题:1.运算量相当大

2.很多曲面无法用合适的方程表示通常仍然用多面体来逼近的方法模拟曲面物体平面多面体表面上各点亮度计算通常用二种基本算法:

1.恒定亮度法

2.Gouraud插值法

整个多边形只算出一个单独的亮度值,用这个亮度显示物体上多边形所在的那个面这种方法只适合在特定条件:1.考虑点光源照射时,总假定点光源和观察点离物体表面足够远2.物体表面仅暴露于背景光下,没有表面图案、纹理或者阴影时,才会产生准确的结果4.图形的光照处理技术光照处理的基本算法平面多面体表面上诸点的亮度计算通常用二种基本算法:

1.恒定亮度法

2.Gouraud插值法(亮度插值法)

通过表面上每个端点的方向向量计算该点的亮度,再利用内插法计算面上每个点的亮度,让面与面之间的接合处并不那么明显1.亮度插值法仅保证在多边形两侧亮度的连续性,而不能保证亮度变化的连续性。2.采用插值方法使得镜面反射所产生的高光形状与位置有很大的变异,甚至模糊不清或不能产生高光。

根据光照强度的计算,对于具有弯曲表面的物体,可以用其曲面方程算出每点的法线,然后按光照强度的计算模型计算每一点的亮度进行表达问题:1.运算量相当大

2.很多曲面无法用合适的方程表示通常仍然用多面体来逼近的方法模拟曲面物体4.图形的光照处理技术这个效应是奥地利物理学家ErnstMach首先发现而得名的。当我们观察画面上具有恒定亮度的区域时,在区域边界处眼睛所感受到的明暗程度常常会超出实际值,似乎光强发生了变化,这一现象称之为马赫带效应。当亮度急剧变化时将出现这一效应.它夸大了任何一条边界上亮度的变化,常显得更亮或更暗。

Gouraud插值法解决了恒定亮度法中的亮度不连续问题,在一定程度上消除了马赫带效应,显示画面的效果得到大大改善。但亮度插值法仅保证在多边形两侧亮度的连续性,而不能保证亮度变化的连续性,故Gouraud插值法并不能完全消除马赫带。同时,由于采用插值的方法,使得镜面反射所产生的高光形状与位置有很大的变异,甚至模糊不清或不能产生高光。因而Gouraud插值法对于只考虑漫反射的模型效果较好。4.图形的光照处理技术阴影的处理

阴影是由于物体遮挡光源的光线而形成的,有助于显示画面中各物体之间的空间位置及深度关系,使人感到物体的远近深浅,极大增加画面的真实感。

阴影一般由两部分组成:本影和半影本

光源

本影:任何光线都照不到的区域,呈现为全黑的、轮廓分明的区域半影:可接收到分布光源照射的部分光线的区域,通常位于本影周围,呈现为半明半暗的区域,受到的光照依次增加4.图形的光照处理技术自身阴影和投射阴影本影包括两类:自身阴影和投射阴影自身阴影:由于物体自身遮挡而使光线照射不到的某些面,它与视点在光源位置时的自隐藏面一致投射阴影:物体遮挡光线从而使画面中位于它后面的物体或区域(如基平面)的全部或一部分受不到光的照射而形成

自身阴影

投射阴影

4.图形的光照处理技术投射阴影的投影面与画面中其它平面的交线组成阴影多边形,它被标记为阴影后存入画面的数据结构中。

学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术

OPENGL介绍

实际应用中,面对一幅大的画面,常要求开一个矩形窗口显示指定的部分画面。窗口内的图形被显示出来,而窗口之外的图形则被裁剪掉,使图形恰当地显示到屏幕上的处理技术称为裁剪技术

任何图形在显示之前都要经过裁剪工作5.图形裁剪技术

平面图形在裁剪时,由于组成图形中的每一个基本元素都要经过裁剪,裁剪算法直接影响整个图形系统的效率。其效率的高低常和图形的复杂情况、计算机功能等因素有关,因而要根据实际情况来选择裁剪方法。一般可选用的裁剪策略有:(1)图形裁剪与窗口—视图变换的先后

“先裁剪后变换”:多数图形裁剪都是在用户坐标系下相对窗口边框进行裁剪。这种方法可以避免落在窗口外的图形再去进行无效的窗口—视区变换运算。“先变换后裁剪”:也可以先把用户坐标系转化为设备(屏幕)坐标系,在屏幕坐标系下相对于视区进行裁剪。对于一些特定算法可以选用这种策略。

5.图形裁剪技术一般可选用的裁剪策略有:“先生成后裁剪”:只需要简单的直线段的裁剪算法,但可能造成无效的生成运算。

“先裁剪后生成”

:可避免对那些最后被裁掉的元素进行无效的生成运算,但却要采用比较复杂的图形,如圆弧、椭圆弧等的裁剪处理。(2)图形生成与裁剪的先后

5.图形裁剪技术

另外,由于裁剪处理比较费时,对于一些特殊的应用,例如,只需观察图形的全貌,并不真正需要实施裁剪时,则可允许自动调整窗口的大小,使之跳过裁剪。二维裁剪技术三维裁剪技术

将三维物体的图形由图形输出设备显示或绘制时,往往也要用到裁剪技术。三维窗口在平行投影时为立方体。三维线段裁剪就是要显示三维线段落在三维窗口内的部分。

5.图形裁剪技术二维裁剪技术

用户在平面上定义一个窗口以后,总希望把落在窗口内的部分图形映象到视图区中,而把在窗口以外的图形运用裁剪方法统统裁掉,不予输出

平面上的图形受该平面上的矩形窗口的裁剪称为二维裁剪

裁剪的基本目的是判断图形元素是否在所考虑的区域内。如在区域内,则进一步求出在区域内的那一部分。裁剪处理的关键主要包括:点在裁剪区域内外的判断

图形与裁剪区域边界交点的计算

常见算法:编码算法、中点分割法、Liang-Barsky裁剪算法…

5.图形裁剪技术编码裁剪算法

特点:对显然不可见线段的快速判别编码方法:由窗口四条边所在直线把二维平面分成9个区域,每个区域赋予一个四位编码,称之为区域码。它表示端点与窗口的位置关系。四位码中最左边的1位为第一位,则编码规则如下:1974年,DanCohen和IvanSutherland提出,也称科恩—萨赛兰德算法主要思想:用编码方法来实现裁剪

(1)线段端点在上方,第一位为1,否则为0;(2)线段端点在下方,第二位为1,否则为0;(3)线段端点在右边,第三位为1,否则为0;(4)线段端点在左边,第四位为1,否则为0。

5.图形裁剪技术算法步骤:判别线段两端点是否都落在窗口内,如果是,则线段完全可见;否则进入第二步;判别线段是否为显然不可见,如果是,则裁剪结束;否则进行第三步;求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃。对余下的另一段重新进行第一步,第二步判断,直至结束

窗口及线段端点的编码如图所示:显然,如果线段两个端点的4位编码全为0,则此线段全部在窗口内,可直接接受,如果对线段两个端点的4位编码进行逻辑与(按位乘)运算,结果为非0,则此线段全部在窗口之外,可直接舍弃;否则,这一线段既不能直接接受,也不能直接舍弃,它可能与窗口相交。此时,需要对线段进行再分割,即找到与窗口一个边框的交点。根据交点位置,也赋予4位代码,并对分割后的线段进行检查;或者接受,或者舍弃,或者再次进行分割。重复这一过程,直到全部线段均被舍弃或被接受为止。5.图形裁剪技术1000

0001

0010

0000

0100

1001

0101

0110

1010

窗口

b

c

a

编码方法直观方便,速度较快,是一种较好的裁剪方法,但是由于全部舍弃的判断只适合于那些仅在窗口同侧的线段,对于跨越三个区域的线段就不能一次做出判别而舍弃它们,而对于不满足两端点的编码均为“0000”或两端点的编码位逻辑“与”结果非零的线段,则需把线段再分割,如果分割采用上述求交点的方法,运算效率较低。5.图形裁剪技术学习内容概述

图形变换

图形消隐技术

图形的光照处理技术

图形裁剪技术OPENGL介绍OpenGL概述OpenGL基本图元的绘制OpenGL变换的实现6.OpenGL介绍OpenGL被严格定义为“一种到图形硬件的软件接口”。OpenGL的发展史SGI在1992年7月发布1.0版。由成立于1992年的OpenGLArchitectureReviewBoard(ARB)ARB体系评审委员会控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。现在的ARB投票成员包括SGI、Intel、IBM、nVIDIA、ATi、Microsoft、Apple等公司。2001年8月ARB批准了1.1版本,随后推出了1.2,2002年7月24日通过的1.4版本,最新版本规范是2003年7月退出的1.5。3Dlabs提出了OpenGL2.0新的版本,在OpenGL2.0中注入新性能,突破OpenGL1.X版本难以跟上硬件发展水平的缺陷,OpenGL2.0的目标,就在于启动并开发硬件的可编程能力。6.OpenGL介绍OpenGL体系结构客户机/服务器体系结构,允许本地或远程调用OpenGL。OpenGL在WindowsNT上的实现是基于Client/Server模式的,应用程序发出OpenGL命令,由动态链接库OpenGL32.DLL接收和打包后,发送到服务器端的WINSRV.DLL,然后由它通过DDI层发往视频显示驱动程序。如果系统安装了硬件加速器,则由硬件相关的DDI来处理。OpenGL/NT的体系结构图如图1.2所示。从程序员的角度看,在编写基于Windows的OpenGL应用程序之前必须清除两个障碍,一个是OpenGL本身是一个复杂的系统,这可以通过简化的OpenGL辅助库函数来学习和掌握;另一个是必须清楚地了解和掌握Windows与OpenGL的接口。6.OpenGL介绍6.OpenGL介绍OpenGL的组成1.OpenGL核心库

包含有115个函数,函数名的前缀为gl。

这部分函数用于常规的、核心的图形处理。由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。

2.OpenGL实用库

包含有43个函数,函数名的前缀为glu。

这部分函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。如:坐标变换、纹理映射、绘制椭球、茶壶等简单多边形。

OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。

3.OpenGL辅助库

包含有31个函数,函数名前缀为aux。

这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。

OpenGL中的辅助库不能在所有的OpenGL平台上运行。6.OpenGL介绍4.OpenGL工具库

包含大约30多个函数,函数名前缀为glut。

这部分函数主要提供基于窗口的工具,如:多窗口绘制、空消息和定时器,以及一些绘制较复杂物体的函数。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在所有的OpenGL平台上运行。

5.Windows专用库

包含有16个函数,函数名前缀为wgl。

这部分函数主要用于连接OpenGL和Windows95/NT,以弥补OpenGL在文本方面的不足。Windows专用库只能用于Windows95/98/NT环境中。

6.Win32API函数库

包含有6个函数,函数名无专用前缀。

这部分函数主要用于处理像素存储格式和双帧缓存。这6个函数将替换WindowsGDI中原有的同样的函数。Win32API函数库只能用于Windows95/98/NT环境中。6.OpenGL介绍OpenGL数据类型前缀数据类型相应C语言类型OpenGL类型b8-bitintegersignedcharGLbytess16-bitintegershortGLshortii32-bitintegerlongGLint,GLsizeif32-bitfloating-pointfloatGLfloat,GLclampfd64-bitfloating-pointdoubleGLdouble,GLclampdub8-bitunsignedintegerunsignedcharGLubyte,GLbooleanus16-bitunsignedintegerunsignedshortGLushortui32-bitunsignedintegerunsignedlongGLuint,GLenum,GLbitfield6.OpenGL介绍OpenGL函数命名约定<库前缀><根命令><可选的参数个数><可选的参数类型>

库前缀:gl、glu、aux、glut、wgl、glx可选的参数个数:2、3、4、V可选的参数类型:I代表int型,f代表float型,d代表double型,u代表无符号整型。*:可以用各种类型例子:glColor3f(1.0,0.0,0.0);

floatcolor_array[]={1.0,0.0,0.0};

glColor3fv(color_array);

6.OpenGL介绍OpenGL基本图元绘制OpenGL提供了点、线、多边形的绘制功能无论是哪种基本图元,都是由一系列的顶点定义的。如点:一个顶点;直线:两个顶点;多边形:多个顶点顶点由一个n维向量来定义,n=2,3,4。二维顶点是用三维顶点来处理的,即自动将Z值赋0.0。voidglVertex{2,3,4}(sifd}(V)(TYPEcoords);基本图素的绘制由glBegin()和glEnd()配对完成。voidglBegin(GLenummode)voidglEnd(void)6.OpenGL介绍OpenGL的图元类型类型说明GL_POINTS点集GL_LINES多条线段GL_POLYGON单个简单填充凸多边形GL_TRIANGLES多组独立填充三角形GL_QUADS多组独立填充四边形GL_LINE_STRIP不闭合折线GL_LINE_LOOP闭合折线GL_TRIANGLE_STRIP线性连续填充三角形串GL_TRIANGLE_FAN扇形连续填充三角形串GL_QUAD_STRIP连续填充四边形串6.OpenGL介绍点的绘制OpenGL中,点被定义为一个方块。默认值是一个象素缺省颜色可以一次绘制多个点

glBegin(GL_POINTS);glVertex3f(0.0,0.0,0.0);glVertex3f(50.0,50.0,50.0);

glEnd();点的大小由以下函数控制:voidglPointSize(GLfloatsize);6.OpenGL介绍线的绘制直线的绘制glBegin(GL_LINES)glVertex(0.0,0.0,0.0);glVertex(50.0,50.0,50.0);glEnd();6.OpenGL介绍折线的绘制

glBegin(GL_LINE_STRIP)

glVertex(0.0,0.0,0.0);

glVertex(50.0,50.0,0.0);

glVertex(100.0,100.0,0.0);

glEnd();线型的设置voidglLineStipple(Glintfactor,GLushortpattern);

factor:1~255,pattern中像素的重复次数;pattern:线型的样板,二进值的一个0和1的序列,其中零表示不画点,1表示画点。划线时,从pattern的最低位开始,决定线上的点是否绘制。用完后,从头再来。glLineStipple(1,0x3F07);0x3F07=0011111100000111若factor=2,则线型为:00001111111111110000000000111111线型的启动:glEnable(GL_LINE_STIPPLE);线型的关闭:glDisable(GL_LINE_STIPPLE);6.OpenGL介绍线宽的设置glLinewidth(GLFloatwidth);指定线的近似宽度,以象素计。width>0,缺省值width=1。不是每个线宽都是可用的,OpenGL规定了线宽的范围和最小间隔,可由函数得到。GLfloatsizes[2];GLfloatstep;glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&step);6.OpenGL介绍多边形的绘制多边形是指由封闭线段围成的区域。OpenGL中的多边形有两点限制:多边形的边不能相交。多边形必须是凸多边形。多边形的绘制也是由glBegin()和glEnd()完成自动用当前的颜色填充。6.OpenGL介绍矩阵的类型OpenGL定义了3种类型的矩阵在变换之前,必须指定当前的操作矩阵类型。voidglMatrixMode(GLenummode);指定当前的操作矩阵类型Model功能GL_MODELVIEW随后的矩阵为模视矩阵堆栈GL_PROJECTION随后的矩阵为投影矩阵堆栈GL_TEXTURE随后的矩阵为纹理矩阵堆栈6.OpenGL介绍矩阵操作函数voidglLoadIdentity(void);功能:设置当前操作矩阵为单位矩阵。voidglLoadMatrix{fd}(constTYPE*m);设置m为当前的操作矩阵m是一个单精度或双精度浮点指针,指向一个按列存储的4x4的矩阵。voidglMultMatrix{fd}(constTYPE*m);用当前矩阵乘以m,并把结果置为当前矩阵。voidglPushMatrix(void);将当前矩阵压入矩阵堆栈。voidglPopMatrix(void);将当前矩阵弹出矩阵堆栈。6.OpenGL介绍OpenGL的几何变换平移变换voidglTranslate{fd}(TYPEx,TYPEy,TYPEz);旋转变换VoidglRotate{fd}(TYPEangle,TYPEx,TYPEy,TYPEz);绕从(x,y,z)到原点的轴,拟时针旋转angle。比例变换voidglScale{fd}(TYPEx,TYPEy,TYPEz);若<0,则进行反射变换6.OpenGL介绍OpenGL的观察变换观察变换的作用是设置和改变观察坐标系。OpenGL中,默认情况下,世界坐标系是右手坐标系,原点在屏幕左下角,原点右方向是Xaxis,向上方向是Yaxis。观察坐标系是左手坐标系,Xaxis和Yaxis和观察坐标系方向相同,Zaxis则相反,指向屏幕内部。有三种方法完成观察变换使用模型变换函数,如glTranslate*()使用gluLookAt()设置观察坐标系。自己编程,封装已有的变换函数。6.OpenGL介绍gluLookAt()VoidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoublecenterx,

温馨提示

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

评论

0/150

提交评论