第8章 交互技术与用户接口_第1页
第8章 交互技术与用户接口_第2页
第8章 交互技术与用户接口_第3页
第8章 交互技术与用户接口_第4页
第8章 交互技术与用户接口_第5页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

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

文档简介

第8章交互技术与用户接口8.1计算机图形软件标准化8.2用户接口8.3交互任务和交互技术8.4交互式图形程序库OpenGL8.5构造一个简单的交互式图形系统习题8.1计算机图形软件标准化8.1.1图形软件标准计算机图形软件的标准通常是指图形系统及其相关应用系统中各界面之间进行数据传送和通信的接口标准,以及供图形应用程序调用的子程序功能及其格式标准,前者称为数据及文件格式标准,后者称为子程序界面标准。计算机图形软件标准在图形及其应用系统各界面之间的作用和关系如图8.1所示,其中CGM和CGI是面向图形设备的接口标准;GKS、GKS-3D、PHIGS、OpenGL等是面向图形应用软件的标准;IGES和STEP是面向图形应用系统中工程和产品数据模型及其文件格式的标准。图形化的用户接口——窗口系统是近几年来蓬勃发展并广泛应用的工业标准,其典型代表有工作站上的Motif、OpenLook和个人计算机上的Ms-Windows。图8.1图形系统各个界面的标准8.1.2常用图形软件标准简介1.计算机图形元文件(CGM-ComputerGraphicsMetafile)CGM是ANSI1986年公布的标准,1987年成为ISO标准。它是一套与设备无关的语义、词法定义的图形文件格式,提供了随机存取、传送、简洁定义图形的手段。

CGM标准规定了生成、存储、传送图形信息的格式。设计CGM的主要目的是:(1)提供图形存档的数据格式;(2)作为假脱机绘图的图形协议;(3)为图形设备接口标准化创造条件;(4)便于检查图形中的错误,保证图形质量;(5)提供了把不同图形系统所产生的图形集成到一起的一种手段。

CGM的结构如图8.2所示。每个图形元文件由一个元文件描述体和若干个逻辑上独立的图形描述体顺序组成。每个图形描述体由一个图形描述单元和一个图形数据单元构成。图8.2CGM的结构2.图形核心系统(GKS-GraphicsKernelSystem)GKS提供了在应用程序和图形输入/输出设备之间的功能接口,是一个子程序接口标准。它只定义了一个独立于语言的图形系统核心,在具体应用中,必须以符合使用语言约定的方式,把GKS嵌入到相应的语言之中。GKS在图形应用中的地位如图8.3所示。图8.3GKS在应用中的地位

GKS提供一系列交互和非交互式图形设备的全部基本图形处理功能,大致可分为以下10类:

(1)控制功能:打开、关闭GKS,以使工作进入或退出活动状态和删除工作站等;(2)输出功能:确定输出图形的类型;(3)输出属性:设定图素的各种属性以及各种图素在工作站上的表现方式;(4)变换功能:实现规范化变换和工作站变换;(5)图组功能:对图形进行生成、删除、复制以及实现图组属性控制;(6)输入功能:对各种输入设备初始化,设定设备方式,确定输入控制方式;(7)询问功能:查询GKS描述表、状态表、出错表、工作站描述表、图素表等;(8)实用程序:实现坐标变换等;(9)元文件处理;(10)出错处理。

GKS定义了以下六种输入功能:(1)定位设备(Locator):提供用户坐标系中某一点的坐标,并变换到规格化的设备坐标系中;(2)笔划设备(Stroke):输入用户坐标系中一组点的坐标,并变换到规格化的设备坐标系中;(3)定值设备(Valuator):取得一个整数或实数值;(4)选择设备(Choice):从一组可以选择的对象中选取一个,并输出一个标志(通常是一个非负的整数);(5)拾取设备(Pick):用游标选定一个图素、图段或整图(含正文),并输出相应的选择标志符或图段名;(6)字符串设备(String):接收一个字符串。

GKS包括下列6种基本图素:(1)线元素:折线集(Polyline);(2)点元素:符号集(Polymarker);(3)字符元素:文本(Text);(4)光栅元素:区域填充(Fillarea);(5)单元阵列(Cellarray);(6)一般图素(GDP-GeneralizedDrawingPrimitive),一般画线图素,如圆、曲线以及用户自定义图素。输出图素具有三类属性:几何属性、非几何属性和标志符。几何属性控制图素的几何形状和大小;非几何属性控制图素的线型、颜色等。图素的这些属性设置存放在GKS状态表中。

在GKS中,图素能以图段方式组合,并以图段为单位进行图形输出,各图段由应用程序定义,GKS根据所指定的图段名进行识别与选择,而且还可对图段进行变换、可见性预测、改名、检测及删除等一系列操作。

GKS设置了三种不同的坐标系:(1)用户坐标系(WCS):专供用户应用程序使用。(2)规格化的设备坐标系(NDCS):这是与设备无关的二维直角坐标系,坐标取值范围在0.0~1.0之间,应用程序可使用该坐标系来定义图形输出界面的位置;更多的是用NDCS来存放图形数据的中间结果,以便在不同的图形设备或图形系统之间实现数据共享。(3)设备坐标系(DCS):这是图形设备在处理图形时所使用的坐标系,各种图形设备均有各自的设备坐标系。

GKS提供了一个称为元文件的顺序文件接口,GKS的元文件(GKSM)主要用于:(1)图形信息的存档;(2)在不同系统之间传送图形信息;(3)在不同的GKS应用软件之间传送图形信息;(4)与图形信息相关的非图形信息的存储和复用。

GKS元文件结构及其读、写过程如图8.4所示。图8.4GKS文件结构8.2用户接口8.2.1交互式图形系统的逻辑构成交互式图形系统应该具有良好的逻辑结构,对一个交互式图形系统要进行合理的层次结构和模块结构划分,把整个系统分为若干层次,每一层次再分为若干模块,使整个系统容易设计、调试和维护,便于系统的扩充和移植。总的来看,一个交互式图形系统在概念上由四个部分组成,即应用数据结构/模型、图形应用程序、图形支撑软件或称基本图形软件、图形设备。图8.5是一个交互式图形系统的概念化框图。图8.5交互式图形系统的逻辑组成1.应用数据结构/模型应用数据结构实质上是一些数据文件(或建立在数据库中),其中保存着构造图形的一个或多个对象的全部描述信息。这些信息中有说明对象所有组成部分的形状和大小的几何信息及其拓扑信息;有说明对象图形的色彩、纹理、表面性质等的属性信息;以及其它一些如材料、单价、加工要求等非几何数据。2.图形应用软件图形应用软件是为解决某种具体应用问题而开发的图形软件,是整个应用软件的一部分,也是图形系统中的核心部分,通常由用户编写或由系统设计者与用户一起编写。交互功能是对其主要的要求,一般用高级语言进行编写和开发。图形应用软件主要完成以下三个方面的功能:(1)它从应用数据结构/模型中取得对象的几何数据及其属性,按照应用的要求对数据进行变换处理,使用图形支撑软件(如TurboC的graphics.h、OpenGL等)所提供的各种图形功能,生成该对象的图形,并在显示屏幕或绘图机上输出,或者作进一步的处理。(2)通过交互手段,根据图形输入设备送来的命令和数据,用来构造、增添或修改被处理对象的模型。(3)完成初始化、定义窗口与视区、设置菜单功能,并且进行分项计算,完成动态模拟以及用户接口设计等其它功能。3.支撑软件(1)设备驱动程序。这是最底层的软件,主要解决图形设备与主机的通信、接口等问题,是一些最基本的输入、输出程序。(2)基本子程序。这类程序主要包括生成基本图形元素、

对设备进行管理的各程序模块。

(3)功能子程序。它是在基本子程序的基础上编制的,主要任务是建立图形数据结构(图形档案),定义、修改和输出图形,建立各图形设备之间的联系。8.2.2用户接口的常用形式及其设计原则1.用户接口的常用形式常用的面向应用的用户接口形式有三种,即子程序库、专用语言和交互命令。1)子程序库这种形式的基本思想是选择一种合适的高级程序设计语言(如C、C++、Java等)作为主语言,用此主语言扩展一系列的过程或函数调用,用以实现有关的图形设计和处理。用户使用图形子程序库的过程一般有以下几步:第一步,编写源程序(含主语言语句和图形子过程或子函数的调用语句)。第二步,编译源程序,产生相应程序的目标代码。第三步,装配连接图形程序库和系统库,产生相应程序的可执行代码。第四步,运行可执行代码,判断结果的正确性,若有错,转第一步修改源程序后继续以下各步的操作;若无错,输出执行结果,结束。2)专用语言专用语言的功能与子程序包的功能类似,但其使用形式与子程序包大不一样。3)交互命令人与计算机运行的程序之间相互传递信息的过程称为交互,子程序包中每个子程序的功能以及专用语言中的有关语句都可以按照命令方式提供给用户使用。2.用户接口的设计原则用户接口确定用户与计算机如何进行信息交换。设计一个友好的图形用户接口应遵循以下三个主要的设计原则:(1)易于接受,用户能迅速掌握系统的特点;(2)易于操作和使用,通过用户接口用户能够以最简单的方式提出应用要求,使用系统的全部功能。(3)高效率、高可靠性和实用性,并尽可能减少错误。本着上述三条基本原则,在进行图形系统用户接口设计时应着重考虑如下几个方面:1)适应不同熟练程度的用户在交互式图形系统中,用户接口应提供多种软件操作方法给不同熟练程度的用户。2)保持一致性一致性原则是指在设计系统的各个环节时,应遵从统一的、简单的规则,这包括系统内部的一致性和系统之间的一致性。3)回退和出错处理用户在使用系统时难免会出错,好的用户接口设计应使用户不会因为怕出错而缩手缩脚,处处小心,可以采用如回退(undo)机制、取消机制、确认机制、设计好的诊断程序、提供出错消息、对可能导致错误的一些动作进行预测、约束机制、动作与对象相一致等方法避免用户因误操作而造成损失或挽回损失。4)反馈反馈就是动态地显示系统运行中所发生的变化,以便更有效地进行交互作用。反馈要求系统在接收到用户每次输入后给出某种类型的反应。5)显示屏幕的有效利用在图形系统用户接口设计中,怎样以最有效的方式在屏幕上显示信息是一个非常重要的问题。行信息显示一般需考虑如下几个问题:(1)信息显示的合理布局。图形用户接口中通常将屏幕分为三个基本部分:用户工作区、菜单区、显示提示及反馈信息区。(2)正确地使用图标。1975年,D.C.Smith在他的Stanford博士论文中首次提出“Icons”这个新名词,以后图标被广泛应用。图标可以分为两类,一类是应用图标(ApplicationIcons),用来代表具体的对象,如图8.6所示MathType公式编辑器中的图标;另一类是控制图标(ControlIcons),代表旋转、放大、比例、裁剪和粘贴等对对象的操作和控制,如图8.7所示MicrosoftWord中的常用工具栏图标。图8.6应用图标图8.7控制图标(3)恰当地使用各种表示方法进行选择性信息显示。在程序的执行过程中,无论是命令输入反馈,还是命令执行结果的输出,都需要显示信息,有时甚至会有大量的信息需要显示。6)视觉效果设计这里强调的是色彩的使用。如就色调而言,应尽量避免使用容易引起视觉疲劳的蓝色、紫色、红色和橙色,而应选择黄色、绿色、蓝绿色和淡青色等不容易引起视觉疲劳的色调。7)联机帮助功能为用户提供联机帮助(OnLineHelp)措施,在用户操作过程中的任何时刻能提供帮助。联机帮助功能应具有:(1)完整性。做到有求必应,应尽可能满足用户的所有要求。(2)针对性。不同用户有不同要求,应对不同的用户提供不同的帮助信息。(3)高效性。使用户可以方便、高效地找到帮助主题,如用超媒体结构构建的帮助系统。(4)智能性。帮助系统应能够猜测到用户的困难,使用诸如向导的方式帮助用户解决问题。(5)实时性。应能为用户在不同操作中主动提供相关主题帮助信息。8.3交互任务和交互技术8.3.1交互任务交互过程中常见的任务可归纳成六种类型。1.定位定位任务是用来给应用程序指定位置坐标,如(x,y)或(x,y,z)。定位分为两种情况,一种是把屏幕上的光标移到要确定的点;第二种就是用键盘键入一个点的坐标。2.选择选择任务是要从一个选择集中挑选一个元素,常用的有命令选择、操作数选择、属性选择和对象选择等。选择集一般分为固定集和可变集两种。命令、属性及对象类型等选择集一般是固定的,而对象调用选择集通常是可变的。3.输入文本输入文本任务即输入一个字符串,如键入一个插图说明,向文字处理器输入文字等。4.输入数值输入数值任务是要在最大和最小数值之间确定一个值。5.定向定向是在指定的坐标系中确定形体的方向,此时需要由应用程序来确定其反馈类型、自由度和精度。6.定路径定路径任务是一系列定位和定向任务的结合,它与时间、空间有关。8.3.2交互技术1.定位技术定位技术有直接定位和间接定位两种方式。直接定位是指使用定位设备直接在屏幕上指定一个点的位置,比如使用触感屏幕时,可直接用手在屏幕上指定一个点的位置;或用光笔在屏幕上指定一个点。图8.8数字化仪和鼠标等设备的相对移动控制光标定位(异或方式显示光标)图8.9定位技术中的反馈2.橡皮筋技术有时定位操作依赖于环境。例如,在绘图时,已经存在一个圆C和圆外一点A,现在要确定另外一个点B,使AB连线与圆C相切。这样的点的确定可通过橡皮筋技术的使用而变得容易实现。如果在用定位器移动点B时屏幕上始终有一线段连结AB,犹如有一根橡皮筋连结着AB两点一样,这就是橡皮筋技术。有了橡皮筋技术,操作员只需在移动B点使AB与圆C相切时按下定位按键,就能准确地定位,如图8.10所示。图8.10用橡皮筋技术定位(显示线段用异或方式)橡皮筋技术除了用于橡皮筋线段外,还可用于其它一些方面。比如橡皮筋圆和橡皮筋矩形等(如图8.11所示)。图8.11橡皮筋技术图例橡皮筋圆的圆心固定,当圆上一点移动时,生成的圆跟着变化。一旦满意,按下定位键,圆上该点就得到确定。也可以将两点交换,即圆上一点固定,圆心变化。当按下定位键时圆心得到确定。橡皮筋矩形的一个顶点是固定的。在用定位器移动与该顶点相对的另一个顶点时,始终有一个矩形跟着变化。橡皮筋棱锥的底(多边形)是固定的,随着顶点的移动,棱锥的各棱线跟着变化,当按下定位键时,顶点确定,棱锥也随之确定。图8.12拖曳技术3.拖曳(拖动)技术在复杂物体的模型设计中,常用到拼装操作。拖曳技术常被用于拼装定位和其它一些操作(如布局操作)中,以便使上述工作直观、简便、高效。拖曳技术以取样定位输入为基础,应用程序不断地读取定位器位置,在每一原位置上擦去原有对象图形,再在新位置上显示该对象图形,从而使对象的图形被操作员在屏幕上拖曳到适当位置。这里,显示和擦除图形的操作与橡皮筋一样使用异或方式,以便不影响其它图形。图8.12给出了拖曳一电路元件的过程。4.菜单技术菜单是一种很重要的交互技术。它可用于指定命令、确定操作对象或选定属性等场合。使用菜单可较好地改善应用系统的用户接口的友好性。1)菜单的层次结构根据可选对象的数量、性质及彼此的逻辑关系,菜单可以是单层次的,也可以是多层次的。2)菜单的表示菜单的表示方法有三种:字符串方法、图符方法和图像方法。在字符串方法中,每一菜单项用一字符串来表示,如图8.13所示。一个菜单可以是单列式、单行式或矩阵式结构,这样的菜单比较容易组织和实现。在图符方法中,每一菜单项用一个形象地表达该项内容的图形符号来表示,如图8.14所示的Word的自选图形菜单的各个菜单项。这样的菜单比较容易理解和使用。图8.13文字菜单示例图8.14图符菜单示例在图像菜单方法中,每一菜单项由表示一个实物的视图来表示,比如某一类零件的零件菜单中,每一项用该零件的立体图表示,使菜单更加直观、准确,如图8.15所示。图8.15图像菜单示例3)菜单的显示控制菜单的显示位置有固定式和可变式两种。固定式菜单可以在屏幕上显示,也可以固定在数字化仪等设备上。弹出式(pop-up)菜单是典型的位置可变式菜单。它总是显示在光标的现行位置,如图8.16所示。弹出式菜单在选择以后又自动消失。菜单的可见性控制有全局性菜单(永久可见)和局部性菜单(使用时可见)两种控制方式。图8.16菜单显示控制示例图8.17菜单的有效和无效4)菜单的选择菜单可使用多种设备来选择,如使用指点设备直接选择;使用方向键顺序循环选择;使用数字键指定选择或使用功能键对应选择等。菜单中的某些项可动态地定义为有效或无效,无效的项不能选择,如图8.17中显示较暗的菜单项无效。5.定值技术定值输入用于输入各种参数和数据。定值输入设备可以是键盘、旋钮等,也可以是各种指点设备,如鼠标、数字化仪等。使用键盘键入某值是最基本的和最直接的定值输入方法,此外可以通过在屏幕上显示标尺、刻度尺、拉杆或按钮等模拟的办法输入定值,如图8.18所示。用户通过使用定点设备控制滑块在尺子上的移动,同时在屏幕上给出与位置对应的值,在适当时刻,按下确定键来获得要输入的值。这种方法比较直观。图8.18用标尺进行定值输入6.拾取技术1)指定名称法操作员可以通过指定欲拾取对象的名称来实现拾取。但记住这些名称并不是容易的事,所以常用一列表记录所有对象,然后通过列表选取对象,如图8.19所示。图8.19名称法拾取技术2)特征点法选择时让图形的特征点(如线段的端点、圆的圆心等)以强光醒目显示(如图8.20(a)所示),操作员通过选择特征点来拾取对象,这样涉及的内部计算较少。图8.20其它拾取技术(a)特征点;(b)边界矩形;(c)分类法;(d)直接法3)外接矩形法为每一基本对象确定一外接正规矩形(其四边分别平行于坐标轴),只要选中矩形内就表示拾取该对象(如图8.20(b)所示)。该方法只能用于边界矩形非重选情况。4)分类法将折线、点、弧等分别在有关按键的控制下进行拾取(如图8.20(c)所示),这有助于减少计算。5)直接法使用游标拾取,只要有线条穿过以游标所在位置为中心的小正方形(边长在设计时确定)内,即认为该对象被拾取了(如图8.20(d)所示)。图8.21对象的层次结构6)矩形包围法通过指定一个确定矩形,完全包含在矩形之内的对象被拾取,凡在矩形之外或只有一部分包含在矩形内的对象均不被拾取。7.网格与吸附网格化是帮助绘制整齐、精确图形的一种技术。网格化一般用在用户坐标系统中,按从用户坐标系统的窗口到屏幕视区的变换映射到屏幕上去。如图8.22所示,网格一般是规则的,且覆盖整个显示区。应用程序将定位器坐标舍入到最近的网格交叉点上去,从而使绘制的图形规整、精确。

图8.22网格技术图8.23引力域技术8.约束技术所谓约束技术就是指在图形绘制过程中对图形的方向、对齐方式等进行规定和校准。可以有多种约束方式,最常用的是水平或垂直约束,这可以使用户方便地实现水平和垂直直线的绘制。另外,还有其它类型的约束技术,如画矩形时按一定的键可约束画出正方形,画椭圆时按住一定的键可约束画圆等。8.4交互式图形程序库OpenGL1.OpenGL的API结构图8.24(a)是Win32平台上OpenGLAPI的结构简图;图8.24(b)是UNIX平台上OpenGLAPI的结构简图。其中“OpenGL”表示OpenGL基本API,这类API的主要功能包括形体描述、平移、旋转、缩放、光照、纹理、材质、像素、位图和文字处理等。图8.24OpenGLAPI结构图(a)Win32OpenGLAPI;(b)UNIXOpenGLAPI2.OpenGL的工作顺序

OpenGL的工作顺序就是一个从定义几何要素到把像素段写入帧缓冲区的过程。在屏幕上显示图形的主要步骤是以下三步:(1)构造几何要素(点、线、多边形、图像、位图),创建对象的数学描述,在三维空间上放置对象,选择有利的场景观察点。(2)计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。(3)光栅化,把对象的数学描述和颜色信息转换到屏幕的像素。3.OpenGL的基本语法常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。这里只讨论C语言下OpenGL的语法。4.状态机制

OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。

5.程序的基本结构

OpenGL程序的基本结构可分为三个部分:第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式选择,是否作光照处理(若有的话,还需设置光源的特性)、深度检验、裁剪等。这些状态一般都用函数glEnable(???)和glDisable(???)来设置,其中“???”表示特定的状态。第二部分设置观察坐标系下的取景模式和取景框的位置及大小。主要利用了三个函数:(1)函数voidglViewport(left,top,right,bottom),设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以像素表示);(2)函数voidglOrtho(left,right,bottom,top,near,far),设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;(3)函数voidgluPerspective(fovy,aspect,zNear,zFar),设置投影方式为透视投影,其取景体积是一个截头锥体。第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等。6.OpenGL有关的库

OpenGL本身是一个低层库,但在编程实践中还需要一些能简化编程任务、易于在窗口系统上执行的高层库。SGI建立了四个库:前两个库对各种OpenGL实现都提供,第三个库是专为OenGLProgrammingGuide编写的辅助库,第四个库是在OpenGL之上开发的独立产品。(1)OpenGL实用库(GLU)。(2)OpenGL的Windows系统扩充(GLX)。(3)OpenGLProgrammingGuide辅助库(AuxiliaryLibrary)。8.4.2利用OpenGL绘制基本几何对象1.绘图准备和结束在开始绘制新图形前,计算机屏幕上可能已有一些图形,OpenGL在显示缓冲区中存储了那些图形的绘图信息。绘制新的图形以前,应当清除当前的这些内容,以免影响绘图的效果。可用如下函数准备绘图工作:(1)voidglClearColor(red,green,blue,alpha),

给当前屏幕的背景设置颜色,red、green、blue、alpha为RGBA颜色值,(2)voidglClear(mask),清除缓冲区,可以清除的缓冲区如表8-1所示。表8-1可清除的缓冲区绘制完图形后,需要使用两个函数来结束绘图并返回:(1)voidglFlush(),

强制OpenGL命令序列在有限的时间内完成执行;(2)voidglFinish(),

完成全部OpenGL命令的执行,即等到全部命令结束后才返回。2.绘制OpenGL的基本几何元素

OpenGL的几何要素有点、线、多边形。OpenGL中的点是三维的,用户设定二维坐标(x,y)时,z自动置0;线是用一系列相连的点定义的;多边形是一个封闭的线段集合。通过选择属性,既可以得到填充的多边形,也可以是轮廓线,或是一系列点。表8-2mode的取值例如,下列程序定义如图8.25所示的图形。

glBegin(GL-POLYGON);glVertex2f(0.0,0.0);glVertex2f(0.0,3.0);glVertex2f(3.0,3.0);glVertex2f(4.0,1.5);glVertex2f(3.0,0.0);

glEnd();图8.25绘多边形或一组点3.设置几何要素的属性1)点属性

voidglPointSize(Glfloatsize)用于设置点属性,它以像素为单位设置点的宽度。Size参数指定点的宽度,它必须大于0,缺省值为1.0。2)线属性

voidglLineWidth(Glfloatwidth)函数以像素为单位设置绘制线的宽度。绘制线时的反走样处理与点的处理一样。3)多边形属性通常多边形用实模式填充,但也可以指定某种点画模式(图案)来填充。多边形也存在反走样,而且较点和线更复杂。4)控制多边形绘制及法向量多边形的绘制通常是在多边形闭合边界内填充全部图像,但也可以只绘多边形边框,或只绘多边形顶点。由于多边形面存在正面和背面,因此需要控制反转多边形面和剔除不绘的面。8.4.3基于OpenGL真实感图形生成技术简介应用OpenGL基本几何元素,结合其几何变换等功能便可生成各种复杂的线框(Wireframe)物体。但线框物体能反应物体的结构,不能反应物体的表面细节,有必要对构成物体的各个表面进行填充以形成实体。1.OpenGL的颜色模型

OpenGL可以采用RGB颜色模型。红、绿、蓝三原色叠加在一起产生复合色。2.OpenGL光照

OpenGL除了可以管理环境光、漫反射光和镜面反射光以外,还可以管理辐射光。辐射光可以用来模拟自体发光的物体,如灯泡等,以产生特殊效果。表8-3OpenGL光源类型常量3.物体的材质类似于OpenGL中的光照,用GLfloat型的数组来定义一种材质,如:

GLfloatm-materialAmb[4]={0.2f,0.2f,0.2f,1.0f};

Glfloatm-materialDif[4]={0.8f,0.0f,0.0f,1.0f};

GLfloatm-materialSpe[4]={1.0f,1.0f,1.0f,1.0f};

GLfloatm-matShininess=10.0f;

每个数组的前三个元素依次说明了物体对红光、绿光、蓝光的反射率。比如m-materialDif[]数组定义了该材质只反射红光,而不反射绿光和蓝光。数组的第四个元素反应材质的透明度。m-matShininess变量则定义物体的光度。在定义了材质的基本属性后,也应该把这些属性通知给OpenGL,如下所示:

glMaterialfv(GL-FRONT,GL-AMBIENT,m-materialAmb);

glMaterialfv(GL-FRONT,GL-DIFFUSE,m-materialDif);

glMaterialfv(GL-FRONT,GL-SPECULA,m-materialSpe);

glMaterialfv(GL-FRONT,GL-SHININESS,m-matShininess);

glMaterialfv()函数有三个参数,第一个参数指定要定义的多边形的面,有三个可选常量:GL-FRONT、GL-BACK和GL-FRONT-AND-BACK,分别说明的是多边形的前面、后面或前后双面。第二个参数也是一个OpenGL常量,它告诉OpenGL定义材质的哪一个属性,如表8-4所示。第三个参数是一个数组地址,该数组也是一个齐次坐标向量。表8-4OpenGL材质类型常量4.物体的明暗处理

OpenGL可以对场景中的物体进行平面明暗着色处理和光滑明暗着色处理。其实现函数为glShadeModel(),常用如下两种形式:

glShadeModel(GL-FLAT);

glShadeModel(GL-SMOOTH);5.深度测试为了正确地进行消隐,OpenGL必须知道各个物体间的相对位置关系,因此,必须进行深度测试。OpenGL中通过对深度缓存进行操作来完成深度测试,常用的深度缓存操作有:清除深度缓存:

glClear(GL-DEPTH-BUFFER-BIT);

设置深度缓存:glClearDepth(1.0);屏蔽深度缓存:

glDepthMask(GL-TRUE);//允许写深度缓存

glDepthMask(GL-FALSE);//禁止写深度缓存启动和关闭深度缓存:

glEnable(GL-DEPTH-TEST);

glDisable(GL-DEPTH-TEST);确定测试条件:glDepthFunc(GL-LESS);确定深度缓存深度范围:glDepthRange(GLclampdzNear,GLclampdzFar)。6.光照模型

OpenGL通过glLightModel()函数近似模拟光照,该函数的第一个参数为一个OpenGL常量,只能取如下三者之一:

GL-LIGHT-MODEL-AMBIENT;GL-LIGHT-MODEL-LOCAL-VIEWER;

GL-LIGHT-MODEL-TWO-SIDE。1)全局环境光全局环境光不来自于任何指定的光源,就好像环境本身就是这种光。下面的语句可以为整个场景提供一盏环境光。2)镜面高光镜面高光与光源的镜面反射光、材质的镜面反射率、物体表面的位置以及视点的位置有关。3)双面光照

OpenGL既支持单面光照也支持双面光照。单面光照时,只取表面的指定面的材质属性进行光照计算。

7.聚光与点光源和无限光源相比,聚光更具有艺术表现力。剧场多采用聚光,手电筒发出的光便是聚光。8.5构造一个简单的交互式图形系统8.5.1交互式

温馨提示

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

评论

0/150

提交评论