计算机图形系统_第1页
计算机图形系统_第2页
计算机图形系统_第3页
计算机图形系统_第4页
计算机图形系统_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

计算机图形系统目录2.1计算机图形系统概述2.2图形输入设备2.3图形绘制设备2.4图形显示系统2.5图形软件标准2.6VisualC++的图形程序开发方法2.7OpenGL程序设计基础2.1计算机图形系统概述2.1.1计算机图形系统的结构2.1.2计算机图形系统的基本功能2.1.1计算机图形系统的结构计算机图形系统图形软件系统图形硬件系统图形应用软件图形支撑软件图形计算机平台图形设备计算机图形系统的基本功能1、处理功能:包含形体设计、分析,图形描述,基本几何元素(点、线、面等)的表示、求交运算、分类、几何变换,光、色模型的建立和计算,干涉检测等。2、存储功能:存储图形数据,包括图形几何数据、拓扑关系及属性信息等。3、交互功能:通过图形显示器和图形输入设备实现用户与图形系统的人机通信。用户通过显示屏幕观察设计的图形,利用交互输入设备对图形进行在线的操作(增加、删除、修改等)以得到满意的设计结果。4、输入功能:将图形的形状、尺寸等有关的图形数据和操作命令输入到计算机中去。5、输出功能:把所设计的图形从计算机中输出出来,包括显示输出和硬拷贝输出两种形式。2.2图形输入设备作用:

图形输入设备用于输入图形数据或图形操作命令分类:

一般应用输入设备类:鼠标、键盘、光笔等特殊用途的图形输入设备:数据手套、触摸板、图像扫描仪等2.2.1一般应用图形输入设备控制光标移动用来输入定位坐标或选择操作的输入设备,它将移动距离及方向的信息变成数字脉冲信息送给计算机,由计算机转换成光标的坐标数据,从而达到定位目的。根据位移测量方法不同将其分为:机电式、光机式和光电式三种。最基本的输入设备,具有ASCII编码键、命令控制键和功能键,能用来输入图形坐标、选择菜单、选择图形功能等。1、键盘2、鼠标光笔是一种检测装置,是“能检测出光的笔”。它靠检测荧光屏上的发光点来选择屏幕的位置坐标。3、光笔(LightPen)光笔的基本功能:定位、拾取和笔划跟踪。拾取是选中显示器上已显示的图形或文字。笔划跟踪是用光笔拖动光标实现定位①操纵杆:是有一根手柄的可摇动装置。手柄通过一个球形轴承半固定在底座上,在手柄运动时带动一对电位器或电脉冲产生器产生信号,控制屏幕上的光标的运动。②跟踪球:跟踪球是一个球,可用手掌或掌心旋转使屏幕光标移动。附加的电位计量器用来测量球的旋转量和方向。4、游戏杆(JoyStick)和跟踪球触摸屏是允许用手指触摸的方式选择显示屏幕位置的显示器。根据触点记录方式将触摸屏分为光学的、电子的和声学。5、触摸屏(TouchScreen)2.2.2特殊应用图形输入设备特殊应用图形输入设备是指那些用于专门目的的图形输入专门设备。这里仅介绍数字化仪、图象扫描仪、数码相机和数据手套。又称绘图板,是用来给物体作画、着色或交互选择坐标位置的常用设备。这些设备可输入两维或三维空间的坐标。通常,数字化仪在所绘制的图或对象上扫描,并输入一组随机的坐标位置,相互之间以直线段连接,以逼近曲线或表面形状。标准的数字化仪有两个主要部分:(1)坚固的、内部布满金属栅格的图板;(2)提供位置信息的定位器。1、数字化仪(Digitizer)扫描仪是一种图像输入设备,是直接把图形(工程图纸)和图像(照片、广告等)扫描输入到计算机中并以图像形式存储表示的设备。按扫描仪所支持的颜色可分为单色扫描仪和彩色扫描仪;按其所采用的固态器件又可分为电荷耦合器件(CCD)扫描仪、MOS电路扫描仪和紧贴型扫描仪;按扫描宽度和操作方式可以分为大型扫描仪、台式扫描仪和手持式扫描仪。扫描仪的两个重要指标是分辨率和支持的颜色数或灰度等级,如分辨率为1200dpi(dotsperinch),颜色为32位真彩色。现在大多扫描仪都提供分辨率和颜色、灰度的选择功能。2、图象扫描仪(ImageScanner)数码相机是专门用来获取数字化图像的照相机。虽然它从外观上看很像一架普通的光学照相机,但内部结构却大不相同。数码相机利用电耦合器件成像,图像存储在半导体器件上。数码相机作为计算机的输入设备,将存储在半导体器件上的图像输入到计算机中,并利用相应的软件进行编辑处理,可用彩色打印机打印输出。另外数据手套也是一种特殊的图形输入设备,主要用于对虚拟场景中的对象定位,它与头盔联合使用,可直接操纵与观察三维虚拟场景中的对象。3、数码相机(DigitalCamera)2.3图形绘制设备图形输出包括图形显示和图形绘制。图形绘制通常指把图形画在纸上,也称硬拷贝。绘图仪和打印机是两种最常用的硬拷贝设备。绘图仪绘图仪分笔式绘图仪和喷墨式绘图仪两种。喷墨式绘图仪的工作原理是利用电脉冲控制喷墨头,由喷墨头上的喷嘴把墨滴喷到图纸上而形成图形。笔式绘图仪又分为滚筒式绘图仪和平板式绘图仪两种。滚筒式绘图仪是把有孔的绘图纸卷在有突针的滚筒上,机架静止,笔在托架上运动,绘图纸在滚轮上沿托架前后移动,从而绘制出图形。绘图纸和绘图工具笔的运动是由两只步进电机带动,通过控制两只步进电机进行绘图。绘图工具可以是笔,也可以是彩色喷墨头。滚筒式绘图仪一般结构较简单、价格较低,但精度和速度不高。平板式绘图仪有一块绘图平板,图纸平铺在绘图平板上,横梁和笔架运动。这种绘图仪精度高、速度快、但价格也较高。绘图笔的运动有六种基本动作:+X、-X、+Y、-Y四个方向上的移动和抬笔、落笔。因此,任何绘图路线都只能由这四个方向的基本运动组成。2.3.2打印机打印机可用来输出文本、数据和图形。目前常用的打印机主要有针式打印机、喷墨打印机和激光打印机。1、针式打印机针式打印机的打印机头上装有一组打印钢针,在打印机和打印头之间装有色带,通过选择打出的某些钢针撞击色带和纸将点阵图案印在纸上。打印时打印头从左至右移动来打印一行,当打完一行后打印纸以一定的行距向前移动,以便打印下一行。这种打印机因机器本身和耗材的价格便宜而被普遍使用,但作为图形输出设备时因其输出精度太低致使图形质量很差。2、喷墨打印机喷墨打印机的基本原理是通过喷墨头在打印纸上横向移动时将小墨点喷射到打印纸上来形成图案的。墨水泵将黄、品红、青3种颜色的墨水分别注入3支很细的喷笔中,在高压下,墨水通过喷笔内细而长的玻璃毛细管喷到纸上。喷墨打印机因其价格较激光打印机便宜,使用彩色墨盒的彩喷可打印彩色图形,所以是较理想的图形打印设备,但速度较慢且耗财昂贵。3、激光打印机激光打印机的基本原理:用激光束在光敏鼓上扫描,通过控制激光束的开关来控制光敏鼓是否吸附碳粉。当光敏鼓在纸上滚动时,便能在纸上输出图形等信息。激光打印机有效地利用了激光的定向性、单色性和能量密集性,结合电子扫描技术的高灵敏度和快速存取等特性,使输出图形图像的质量非常高,是理想的图形输出设备。激光打印机正朝着高速度、高精度、低噪音、彩色化的方向发展。2.4图形显示系统图形显示指的是在显示器屏幕上输出图形,显示器通过显示卡接到系统总线上,显示器和显示卡共同构成了显示系统。显示器显示器是显示图形的设备。根据显示器外形可将其分为两种类型:阴极射线管式(CRT)显示器和平板显示器(液晶显示器、等离子显示器、激光显示器等)。在应用中,以前是以CRT显示器为主;目前,由于液晶显示器价格的大幅降低,使用日渐增多,大有取代CRT显示器的趋势。1、阴极射线管(CRT)阴极射线管(CRT,CathodeRayTube)是CRT显示器的主要组成部分。根据阴极射线管的可显示颜色数可分为单色阴极射线管和彩色阴极射线管两种。(1)单色阴极射线管CRT是一种真空器件,利用电磁场产生高速的、经过聚焦的电子束,偏转到屏幕的不同位置轰击屏幕表面的荧光材料而产生可见图形。阴极射线管的各组成部分及其功能:电灯丝:通电后变热以给阴极加热。阴极:由灯丝加热后释放自由电子,在其周围形成电子云。控制栅:加上负电压后,能够控制通过其中小孔的带负电的电子束的强弱。通过调节负电压高低来控制电子数量,来控制荧光屏上相应点的亮度。聚焦系统:保证电子束在轰击屏幕时,汇聚成很细的点。加速电极:对电子束加速,用于产生高速电子束。偏转系统:控制电子束的偏转路径,以轰击屏幕的特定位置。屏幕:内壁涂有荧光粉,常称作荧光屏,是CRT显示图形的表面。(2)彩色阴极射线管如果显示屏上只涂一种荧光粉,则只能发出一种光色,这种显示器称作单色显示器,色彩单调。彩色显示器利用能发出不同光色的荧光粉的光色组合来显示彩色图形。最常用的CRT彩色显示器采用的是荫罩式彩色显像管。荫罩式彩色CRT显示屏上显示图形的每个点有3个小的色点构成,它们排成三角形。这3个小色点的荧光粉配方不同,分别能发出红色光、绿色光和蓝色光,该点的显示颜色为其混合色。红绿蓝被称作CRT彩色显示器的三基色。这种显示器的内部有3只电子枪,所产生的电子束分别作用于同一点中3个不同的小色点上。如果调整3只电子束的强度,它们所作用的3个小色点的发光强度也就不同,于是就能调配出不同的颜色。荫罩又叫影孔板,是一块带孔的金属板。它被安放在紧靠近屏幕内表面荧光粉涂层的位置上,且圆孔与构成三角形的3个小色点组一一对应。当3只电子束被偏转汇集成一组通过荫罩上的小圆孔时,与之对应的3个小色点就被激活发光,在屏幕上就出现了一个彩色的光点。当这3只电子束从一个光点向另一个光点偏转时,一旦偏离了该孔,便被荫罩阻断,直到对准下一个光点所对应的小圆孔。这样,在电子束偏转过程中,荫罩就确保电子束不会作用在不该作用的光点上,这就是影孔板的定位作用。根据影孔板孔的形状可将影孔板分为三类:①点状影孔板:大多数球面与柱面显像管采用此类影孔板。由于太多电子无法穿过荫罩孔而直接打在荫罩上,导致长时间工作后,荫罩容易出现过热导致变形,影响屏幕的局部色纯。但其抗震性好。②栅格式影孔板:这种并行排列的方式容易对齐,调出的颜色也较鲜艳,常用于高分辨率的彩色CRT显示器。如,Sony的Trinitron与Mitsubishi的Diamondtron显像管采用此类影孔板。③沟槽式影孔板:长形板孔在保证荫罩强度的前提下,提高了电子透过率。LG的Flatron显像管采用此类影孔板。(a)点状影孔板(b)栅格式影孔板(c)沟槽式影孔板2、CRT图形显示器按其扫描方式,CRT显示器可分为随机扫描显示器(又称矢量显示器)、直视存储管图形显示器和光栅扫描式显示器三种。它们的原理不同,可显示的图形种类不同,因此用途也不同。(1)随机扫描的图形显示器随机扫描图形显示器,又称向量(vector)显示器、笔划(Strokewriting)显示器,是画线设备,其特点是电子束可随意移动,只扫描荧屏上要显示的部分。优点:扫描速度快,分辨率高,线条质量好,易修改,交互性好,动态性能好。缺点:价格贵;只能显示线框图形,并不能显示逼真的有阴影场景。应用领域:主要应用于军事、CAD领域。(2)直视存储管图形显示器直视存储管DVST(direct-viewstoragetube)通过紧贴在屏幕荧光层后的电荷分布(存储栅)来存储图形信息。从表面上看直视存储管的特性极象一个有长余辉的荧光屏,一条线一旦画在屏幕上,在一小时之内都将是可见的。

DVST的特点有:无需刷新,很复杂的图形也可以在极高的分辨率下无闪烁地显示,成本较低;不能显示彩色,不能局部修改,擦除和重画过程对复杂图形来讲可能需要几秒钟。(3)光栅扫描式显示器目前使用最广泛的CRT显示器是基于电视技术的光栅扫描式显示器。在光栅扫描系统中,电子束横向扫描屏幕,一次一行,从顶到底顺次进行。当电子束横向沿一行移动时,电子束的强度不断变化来建立亮点的图案。关于光栅扫描的几个概念如下:帧:电子束从左到右、自顶至底扫描一遍,对应于一帧。水平回扫:每条扫描线末端,电子束返回到屏幕的左端,称为电子束的水平回扫。回扫时关闭电子枪。垂直回扫:在每帧的终了,电子束返回到屏幕的左上角,称为电子束的垂直回扫。回扫时关闭电子枪。行频、帧频:水平扫描频率为行频,垂直扫描频率为帧频。扫描方式:有逐行扫描和隔行扫描。逐行扫描是从屏幕顶端开始,逐行下扫,直到屏幕底部。隔行扫描是先扫偶数行扫描线,再扫奇数行扫描线。隔行扫描技术主要用于刷新速率较慢的显示器中,以避免闪烁。刷新速率:以多少周期/秒或赫兹/秒为单位来描述。一个周期对应一帧。如每秒60帧的刷新速率为60Hz/s。采用一定速率的刷新来保持屏幕显示的图形稳定。3、液晶显示器LCD(LiquidCrystalDisplay)由于CRT显示器体积大、重量重、耗电量高、产生辐射与电磁波干扰等缺点,而液晶显示器能克服这些不足,应用日益广泛,前景十分广阔。液晶显示器是基于液晶电光效应的显示器件。液晶是一种介于液体和固体之间的具有规则性分子排列的有机化合物,分子形状为细长棒形,长宽约1nm~10nm。在不同电流电场作用下,液晶分子会做规则旋转90度排列,产生透光度的差别,如此在电源ON/OFF下产生明暗的区别。依此原理控制每个像素,便可构成所需图像。液晶显示器由六层薄板组成:第一层是垂直偏光板,第二层是镀在石英平面上的垂直网格线板,第三层是液晶层,第四层是水平网格线板,第五层是水平偏光板,第六层是反射层。在不加电场的情况下,入射光经过偏光板后通过液晶层,偏光被分子扭转排列的液晶层旋转90度。在离开液晶层时,其偏光方向恰与另一偏光板的方向一致,所以光线能顺利通过,使电极面呈光亮。当加入电场的情况时,每个液晶分子的光轴转向与电场方向一致。液晶层也因此失去了旋光的能力,结果来自入射偏光板的偏光,其方向与另一偏光板的偏光方向成垂直的关系,并无法通过,这样电极面就呈现黑暗的状态。液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。显示图像时,通过对显示信号的AD转换,计算出各像素的通断状态后,直接把信号驱动具体像素,控制该液晶像素对光线的"通断",就可以在屏幕上生成图像。反射层水平偏光板水平网格线液晶层垂直网格线垂直偏光板图2.18液晶显示器的六层结构液晶显示器具有如下优点:①体积小,重量轻;②功耗低(数十uW/cm

以下),散热小;③精确还原画面,文字锐利;④画面不闪烁;⑤幅射小;⑥屏幕调节简单方便。目前,LCD显示器图像质量还不够完善,色彩表现和饱和度不及CRT显示器,而且响应时间也比CRT显示器长,当画面更新速度快而剧烈时,画面延迟会产生重影、脱尾等现象。显示卡显示卡将显示器连接到系统总线上,并与显示器共同构成计算机的显示系统,实现将信息从显示器显示输出。显示子系统结构常用的光栅图形显示子系统的结构:帧缓存由显示控制器直接访问,显示图形时所需的扫描转换工作由CPU完成,加重了CPU的负担。高级光栅图形显示子系统,增加了显示处理器又称显示协处理器,把CPU从图形显示处理的事务中解脱出来。其主要任务是扫描转换待显示的图形,甚至一些基本图形操作,还有与鼠标等交互输入设备的接口。图2.19常用的光栅扫描显示系统结构帧缓存可以是主存中划出的一个固定区域,也可以是一个独立的随机存储器。它的主要功能是为显示装置提供刷新信息。帧缓存中的存储单元与显示屏幕上的像素一一对应,单元中存有与之对应的像素的强度值。2、显示卡的功能在PC机组成的计算机图形系统中,将显示控制器和帧缓存等做在一个板卡上,称为图形适配卡或图形显示卡。它直接插在主机板的扩展槽上,显示器通过它与计算机相连。图2.20显卡早期的显示卡只起到CPU与显示器之间的接口作用,负责把需要显示的图形数据转换成视频控制信号,控制显示器显示图形。而今天的显卡的作用已远非如此,它还具有处理图形数据、加速图形显示等作用3、相关概念(1)分辨率(2)象素与帧缓存(3)颜色查找表(4)屏幕坐标系(1)分辨率(Resolution)光点是指电子束打在显示器的荧光屏上能够显示的最小发光点,一般用直径来表明光点的大小。在当前的图形显示模式下,屏幕上可以控制的可显示的最小单元,被称作像素点(pixel),它是组成图形的基本元素。图形显示系统中的三种分辨率概念:①屏幕分辨率,也称为光栅分辨率或物理分辨率,是指CRT显示器显示系统能够显示的最大光点数,通常用水平方向上的光点数与垂直方向上的光点数的乘积来表示。一般来说,分辨率越高,显示的图形越细致、质量越好。但这种度量并不严谨,因即使具有相同的分辨率,显示器屏幕尺寸不同,其显示图形的精细程度也不同,比如,屏幕越大,光点面积就越大,显示图形的精细程度就越差。②显示分辨率:是显示控制器所能提供的显示模式分辨率。显示系统的显示模式分为文本模式和图形模式。对于文本显示方式,显示分辨率用水平和垂直方向上所能显示的字符总数的乘积表示。对于图形显示方式,显示分辨率是指屏幕上所包含像素的个数,通常用水平和垂直方向上所能显示的象素点总数的乘积表示。显示器的显示模式不同,其显示分辨率可能不同,它所对应的象素点大小也会不同。任何显示控制器所提供的分辨率也不能超过屏幕分辨率。③图形的存储分辨率:是指帧缓冲区的大小,一般用缓冲区的字节数表示。存储分辨率不仅与显示分辨率有关,还与象素点的色彩有关。帧缓存的容量等于显示分辨率乘上每个像素对应的字节数。三种分辨率的概念既有区别又有联系,对图形的显示都会产生一定的影响。屏幕分辨率决定了所能显示的最高分辨率;显示分辨率和存储分辨率对所能显示的图形也有控制作用。(2)象素与帧缓存屏幕上一个象素点具有颜色、灰度等属性,它们存储在帧缓存中,所以,象素点对应帧缓存中的一组信息,其对应技术有组合象素法(PackedPixelMethod)和颜色位面法(ColorPlaneMethod)。在组合象素法中,一个象素点的全部属性信息被编码成一个数据字节,按照一定方式存储到帧缓存中,编码字节的长度与点的属性(如颜色、灰度等)有关。在颜色位面法中,帧缓存被分成若干独立的存储区域,每一个区域称为一个位面(BitPlane),每个位面或几个位面控制一种颜色或者灰度。每一个图形象素点在每个位面中占一位,通过几个位面中的同一位组合成一个象素。这种方式在目前的彩色显示器中较为常见。图2.21给出了具有24位面的彩色帧缓存的显示器。这24个位面被分成3组(各8个位面),分别对应红绿蓝三种原色,故三种原色各有256级灰度,经8位数模转换器转换后加到相应原色的电子枪上,在荧光屏上就可显示一个彩色光点。这24个位面共能组合出的颜色数为224种,这种显示器被称为真彩色光栅显示器,其帧缓存也被称为全色帧缓存。图2.21具有24位面彩色帧缓存的显示器(3)颜色查找表颜色查找表也称调色板,是由高速的随机存储器组成,用来储存表达象素色彩的代码。在使用颜色查找表的显示系统中,帧缓存中每一象素对应单元的代码不再代表该象素的色彩值,而是作为颜色查找表的地址索引。图2.22给出了具有n位帧缓存和w位颜色查找表的显示器的示意图,其中,n<w。使用颜色查找表的意义在于,即使容量小的帧缓存也能表达出较大的颜色选择范围。值得注意的是,尽管采用颜色查找表后颜色的选择范围扩大到了2w,但同一屏图形中所使用的颜色数并未增加,仍是2n。(4)屏幕坐标系屏幕是显示图形的场所,为了进行定位,在屏幕上定义了一个屏幕坐标系。它给出了第一象限的一个平面区域0≤x≤Xmax,0≤y≤Ymax(分辨率为(Xmax+1)*(Ymax+1))。坐标值是正整数,一对(X,Y)坐标对应一个像素点。注意有些显示器的屏幕坐标系的Y轴方向向上而有的向下。图2.23两种屏幕坐标系2.5图形软件标准图形标准是指系统中各界面之间进行数据交换的接口标准、语言连接规范和应用程序接口API标准等。图形标准的制定是为了在不同的计算机系统和图形设备之间进行图形应用软件的移植。随着计算机图形学应用领域的不断扩大,各种图形软件日益增多,图形输入输出设备也是种类繁多。如果没有一些软件标准,对应用软件的开发和移植等工作将造成困难。20世纪50年代到70年代初,人们要求图形软件想着通用、高级、与设备无关的方向发展,导致了计算机图形标准的出现。图形标准的研究和制定于20世纪70年代初开始,在80年代进入了大发展时期。1985年,第一个国际计算机图形信息标准及计算机图形核心系统(GKS)正式颁布。之后,三维图形核心系统(GKS-3D)、程序员层次交互式图形系统(PHIGS)、计算机图形原文件(CGM)、计算机图形接口(CGI)、初始图形交换规范(IGES)以及产品数据交换标准(STEP)等相继制订并颁布。除了由官方标准化组织发布的图形标准外,还有一些被工业界使用的已经成为事实上的标准,比较著名的有SGI等公司的OpenGL,微软公司的DirectX等。计算机图形标准的研究和发展,进一步推动了计算机图形学及其应用技术的发展。本节将介绍GKS标准、CGM标准、CGI标准、IGES标准、DXF标准、STEP标准、OpenGL标准。1、GKS标准图形核心系统GKS(GraphicalKernelSystem)是由德国工业标准化组织协会提出的并被许多国家采纳、引用的第一个图形软件国际标准。它是一个子程序软件包,提供了各种物理的图形输入输出设备和应用软件之间的接口。用户通过应用程序调用GKS的功能子程序便可方便的进行图形的输入、输出、变换、组合、装配等交互设计操作。GKS独立于设备和高级语言。它免除了绘图设计和显示指令的繁琐工作,也不需要详细了解各种图形的输入输出设备的控制功能,减轻了设计人员的许多重复性工作。由于GKS使应用软件只与抽象的逻辑设备打交道,略去了物理设备的个性,为应用软件的移植提供了极大的方便,从而使开发的软件具有了设备无关性。为便于应用,GKS提供了与各种流行高级语言的接口,并作为独立于高级语言的通用软件为开发各种应用图形软件服务。GKS是针对二维图形应用的,为满足三维图形应用的需求,在此基础上又制定了GKS-3D。GKS-3D具有三维图素、填充区域图素集、具有视图操作的三维变换、三维输入、消隐处理、边界属性和三维几何属性等功能。GKS-3D是一个完全的三维图形系统,并与GKS(2D)兼容。GKS的应用领域十分广泛,包括科学技术和商业图形的生成、支持地图学、过程控制和CAX等领域的应用。2、CGM标准计算机图形元文件CGM(ComputerGraphicMetafile)规定了生成与设备无关的图形定义、存取和传递图形数据的格式。它提供了把不同图形系统所产生的图形集成到一起的一种手段,适用于各种设备和应用程序。CGM标准是由一套标准的与设备无关的定义图形的语法和词法元素组成。它分为两部分,第一部分是功能描述,包括元素标志符、语义的说明及参数描述,以抽象的词法描述了相应的文件格式;第二部分描述了3种标准元文件编码形式,即字符、二进制数和正文编码。CGM标准元文件本身并不提供元文件生成和解释的具体方法,而利用上述三种不同的标准数据编码形式来实现元文件的元素功能。

3、CGI标准计算机图形接口CGI(ComputerGraphicsInterface)是ISOTC97组提出的图形设备标准。CGI是第一个针对图形设备接口,而不是应用程序接口的交互式计算机图形标准。CGI的目标是使应用程序和图形库直接与各种不同的图形设备相作用,使其在各种图形设备上不经修改就可以运行,即在用户程序和虚拟设备之间以一种独立于设备的方式提供图形信息的描述和通信。CGI规定了发送图形数据到设备的输出和控制功能,从图形设备接收图形数据的输入、查询和控制功能,因CGI是设备级接口,对出错处理和调试只提供了最小支持。CGI提供的功能集包括控制功能集、独立于设备的图形对象输出功能集、图段功能集、输入和应答功能集以及产生、修改、检索和显示以象素数据形式存储的光栅功能集。在二维图形设备中可以找到CGI支持的功能,但没有一个图形设备包含由CGI定义的所有功能,从这个意义上说,CGI定义了与虚拟设备的接口。4、IGES标准基本图形交换规范IGES(InitialGraphicsExchangeSpecification)是CAD/CAM应用最广泛的数据交换标准。它于1980年由美国国家标准局(NBS)主持成立由波音公司和通用电气公司参加的技术委员会制订,并于1981年正式成为美国的国家标准。它适用于CAD/CAM系统间或同一CAD/CAM系统内部不同模块间的图形信息交换。IGES文件由五或六个段组成:标志(flag)段、开始(start)段、全局(global)段、元素索引(directoryentry)段、参数数据(paramterdata)段、结束(terminate)段组成。其中,标志段仅出现在二进制或压缩的ASCII文件格式中。在IGES文件中表示信息的基本单位是元素,IGES定义了五类元素:曲线和曲面几何元素、构造实体几何CSG元素、边界B-Rep实体元素、标注元素和结构元素。各商用CAD系统几乎都提供了IGES文件前、后置处理程序,实现将传送来的数据格式转换为IGES文件格式,把IGES文件格式转换为CAD系统内部的数据格式。5、DXF标准绘图交换文件DXF(DrawingExchangeFile)是Autodesk公司首先用于描述AutoCAD图形的文件。每个CAD系统都有自己的数据文件,数据文件分图形数据文件、几何模型文件和产品模型文件几种。数据文件的格式与每个CAD系统自己的内部数据模式密切相关,而每个CAD系统自己内部的数据模式一般是不公开的,也是各不相同的。由于用户使用的需要,就有数据交换文件概念的出现。一个完整的DXF文件是由四个段和一个文件结尾组成的。其顺序如下:(1)标题段,记录AutoCAD系统的所有标题变量的当前值或当前状态。这些标题变量记录了AutoCAD系统的当前工作环境。例如,AutoCAD版本号、插入基点、绘图界限、SNAP捕捉的当前状态、栅格间距、式样、当前图层名、当前线型和当前颜色等;(2)表段,包含了四个表,每个表又包含可变数目的表项。按照这些表在文件中出现的顺序,它们依次为线型表、图层表、字样表和视图表;(3)块段,记录定义每一块时的块名、当前图层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH命令生成的剖面线和用DIM命令完成的尺寸标注;(4)元素段,记录了每个几何元素的名称、所在图层的名称、线型名、颜色号、基面高度、厚度以及有关几何数据;(5)文件结束,标识文件结束。DXF为AutoCAD系统的图形数据文件,是具有专门格式的ASCII码文本文件。AutoCAD可以用DXFFOUT命令生成它,也或以用DXFIN命令读入它,许多CAD系统具有输入和输出该文件的功能。DXF虽然不是标准,但已成为事实上的数据交换标准。6、产品数据表达与交换标准STEP产品数据表达与交换标准STEP(StandardforTheExchangeofProductmodeldata)是为了克服IGES存在的文件太长及有些数据不能表达等问题而开发的,是一个关于产品数据计算机可理解的表示和交换的国际标准,目的是提供一种不依赖于具体系统的中性机制,能够描述产品整个生命周期中的产品数据。产品生命周期包括产品的设计、制造、使用、维护、报废等。产品在各过程产生的信息既多又复杂,而且分散在不同的部门和地方。这就要求这些产品信息以计算机能理解的形式表示,而且在不同的计算机系统之间进行交换时保持一致和完整。产品数据的表达和交换,构成了STEP标准,STEP把产品信息的表达和用于数据交换的实现方法区分开来。7、OpenGL标准OpenGL(OpenGrepgicsLibrary)是在SGI等多家世界闻名的计算机公司的倡导下制定的一个通用共享的开放式的三维图形标准。它提供了一个标准的计算机图形学所使用的数学模型到显示的接口,并独立于硬件设备和操作系统。以它为基础开发的应用程序,可以运行于当前各种流行的操作系统并可方便地在各平台间移植。从个人机到工作站及超级计算机,利用它都能实现高性能的三维图形功能。由于OpenGL具有高度的可充用性和灵活性,它已经成为高性能图形和交互式视景处理的工业标准,广泛应用于军事、CAD/CAM/CAE、电视广播、娱乐、艺术造型、医疗影像、虚拟世界等方面。OpenGL的核心库包括一百多个用于三维图形操作的函数,除了提供基本的点、线和多边形的绘制函数外,还提供了复杂的三维物体以及复杂曲线和曲面的绘制函数,主要负责处理对象的外形描述、几何变换和投影变换、绘制三维物体、光照和材质设置、颜色模式设置、着色、位图显示与图像增强、纹理映射、动画制作、交互操作等三维图形图像操作。2.6VisualC++的图形程序开发方法Windows提供了丰富的内部函数,称为API(ApplicationProgrammingInterface),其中的图形设备接口GDI(GraphicsDeviceInterface)是用于处理图形函数调用和驱动绘图设备的动态链接库。Windows应用程序就是通过使用GDI进行图形编程的。为实现设备无关性,GDI定义了设备环境(又称设备上下文)。用户绘制屏幕时需通过设备环境DC间接实现。VisualC++的MFC封装了许多与设备环境相关的类,通过这些类可使用户很容易地对DC进行处理。这些类不仅包含DC自身,而且还有字体、画笔、画刷等绘图工具。总体来说,图形编程就是通过调用Windows自带的GDI函数库中的函数和对DC进行操作,来完成绘制任务的。2.6.1图形设备接口GDI

1、图形设备接口GDIGDI接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定硬件的输出,如打印机打印和屏幕显示。GDI负责Windows的所有图形输出。Windows图形编程主要是调用GDI中的相关函数并通过获取DC的“状态”,以确定图形的颜色、尺寸等属性。应用程序使用GDI可创建三种类型的图形输出:矢量输出、光栅图形输出和文本输出。通过GDI可以实现对图形的颜色、线条的粗细等属性的控制。通过调用这些GDI函数操作硬件,可实现设备无关性。2、设备上下文DCWindows不允许直接操作显示输出设备,而是通过一个抽象层与设备上下文进行通讯。设备上下文DC(DeviceContext,又称设备环境,也称设备描述表)实际上就是一个关于如何绘制图形方法的集合,它不仅可以绘制各种图形,而且还可以确定在应用窗口中绘制图形的方式,即确定绘图模式和映射模式。DC的数据结构存储了显示器(或打印机)的性能、属性之类的详细信息,这些数据信息决定程序如何在显示器上进行显示。在Windows环境下,所有图形输出都是在DC上进行的。图形和输出类封装了设备环境和绘图工具,用来支持各种图形设备环境。用户在绘图之前,必须获取绘图窗口区域的一个设备环境DC,然后才能进行GDI函数的调用,以执行适合于设备环境DC的命令。获取DC时,用户不必关心大多数的属性,为了创建自己应用程序的特定显示,可以更改这些属性和对象。在Windows编程术语中,让DC提供新对象的操作被称为将绘图对象选取到DC中。另外,应该注意的是,Windows的设备环境是GDI的关键元素,它代表了不同的物理设备。3、CDC类设备上下文不能被应用程序直接存取,只能通过调用有关函数或使用设备上下文的句柄(HDC)来间接的存取设备上下文及其属性。MFC类库提供了不同类型的设备上下文的类,每一个类都封装了代表Windows设备上下文的句柄和函数。其中CDC是设备上下文的基类,包含了绘图所需要的所有成员函数(包括部分虚函数),并且除了CMetaFile类之外,其所有的派生类均只是构造函数和析构函数的定义有所不同。在MFC中,提出这些派生类的目的就是为了在不同的显示设备上进行显示。函数说明Arc()绘制椭圆弧BitBlt()把位图从一个DC拷贝到另一个DCDraw3dRect()绘制三维矩形DrawDragRect()绘制用鼠标拖拽的矩形DrawEdge()绘制矩形的边缘DrawIcan()绘制图标Ellipse()绘制椭圆FillRect()用给定画刷的颜色填充矩形FillRgn()用给定画刷的颜色填充区域GetBkColor()获取背景颜色GetCurrentBitmap()获取所选位图的指针GetCurrentBrush()获取所选画刷的指针GetCurrentFront()获取所选字体的指针GetCurrentPalette()获取所选调色板的指针GetCurrentPen()获取所选画笔的指针GetCurrentPosition()获取画笔的当前位置GetMapMode()获取当前设置映射模式GetPixel()获取给定像素的RGB颜色值(1)CDC中常用的成员函数GetTextColor()获取文本颜色GetTextExtent()获取文本宽度和长度GetWindow()获取DC窗口的指针LineTo()绘制线条MoveTo()设置当前画笔的位置Pie()绘制饼图Polygon()绘制多边形Polyline()绘制一组线条RealizePalette()将逻辑调色板映射到系统调色板Rectangle()绘制矩形RoundRect()绘制圆角矩形SelectObject()选取GDI绘图对象SelectStockObject()选取库存(预定义)图形对象SetBkColor()设置背景颜色对象SetMapMode()设置映射模式SetPixel()把像素设置成给定颜色SetTextColor()设置文本颜色StretchBlt()把位图从一个DC拷贝到另一个DC,并根据需要扩充或压缩位图TextOut()绘制文本串(2)CDC类的派生类派生类名称说明CClientDC提供对窗口客户区域的图形访问。在窗口中画图时可使用此类DC,但WM_PAINTWindows消息除外。CMetaFileDC代表Windows图元文件,它包含一系列命令已重新产生图形。想要创建独立于设备的文件时可使用此类DC,用户可以回放这种文件来创建图像。CPaintDC创建响应WM_PAINTWindows消息,通常在MFC应用程序的OnPaint()函数中使用。CWindowDC可以提供在整个窗口(包括客户区和非客户区)中画图的设备环境。(3)CDC类的调用函数与设备环境有关的常用函数:

①GetDC()函数:用于获取指定窗口的客户区的显示器设备环境原型声明如下:CDC*CWnd::GetDC();②ReleaseDC()函数:用于释放由调用GetDC或GetWindowDC函数获取的指定设备环境。它对类或私有设备环境无效,以便该设备环境可以被其它应用程序使用。其原型声明如下:intReleaseDC(CDC*pDC);//pDC为待释放的设备环境的指针③BeginPaint()函数:为在指定的窗口中画图做准备工作,并且把与绘图有关的信息填写到PAINTSTRUCT结构中。原型声明如下:CDC*CWnd::BeginPaint(LPPAINTSTRUCTlpPaint);

lpPaint参数是指向PAINTSTRUCT结构的指针。若函数调用成功则返回指定窗口的显示器设备环境的指针,否则返回NULLPAINTSTRUUCT结构包含了对绘图操作有关的各种信息,它的定义如下:typedefstructtagPAINTSTRUCT{

HDC

hdc;//显示器设备环境句柄

BOOLfErase;//标识是否擦除背景

RECTrcPaint;//指定了需要绘图的屏幕矩形

BOOLfRestore;//Windows内部保留

BOOLfIncUpdate;//Windows内部保留

BYTErgbReserved[16];//Windows内部保留}PAINTSTRUCT;④EndPaint()函数EndPaint()函数是用来结束指定窗口中的绘图过程,其原型声明如下:voidEndPaint(LPPAINTSTRUCTlpPaint);其参数的含义与BeginPaint()函数中的相同,返回值总是TRUE。⑤SelectObject()函数SelectObject()函数用于把位图、画笔、画刷等GDI对象选入设备环境中,用新的对象替代同一类型的对象,其原型声明如下:CPen*SelectObject(Cpen*pPen);CBrush*SelectObject(CBrush*pBrush);virtualCFont*SelectObject(CFont*pFont);CBitmap*SelectObject(CBitmap*pBitmap);intSelectObject(CRgn*pRgn);⑥DeleteObject()函数DeleteObject()函数可以删除逻辑画笔、画刷、字体、位图、区域或调色板对象,并释放所有与该对象相关的系统资源,当对象被删除之后,则指定的对象句柄将无效。其原型声明如下:BOOLDelectObject(HGDIOBJhObject);4、GDI对象GDI对象基类是CGdiObject。使用GDI对象时要注意以下两点。①同其它MFC对象一样,GDI对象的创建分为两步:第一步定义一个GDI绘图对象类的实例;第二步调用该对象的创建方法真正创建对象。②使用该对象时,首先要调用CDC::SelectObject(),将它选入到设备上下文中,同时保存原来的设置到一个GDI对象指针如pOldObject中。在使用完后,再用SelectObject(pOldObject)恢复原来的设置。但是,如果该设备上下文是用户自己创建的,则不必恢复原来设置,因为框架会在该设备上下文生存期结束时删除该设备上下文,同时也就删除了原来存放于该设备上下文中的绘图对象设置。具体应用参见下面的OnDraw函数。voidCMyProjectView::OnDraw(CDC*pDC){ …… CpenNewPen(PS_SOLID,1,RGB(0,0,0));//构造画笔类对象//选择新设备环境的同时,保存旧的绘图对象到设备环境Cpen*pOldPen=pDC->SelectObject(&NewPen);……pDC->SelectObject(pOldPen);//恢复旧的绘图对象……}5、使用库存GDI对象在Windows中包含了一些库存的GDI对象,这些库存对象是通过一些预定义的宏来表示的,用于绘制屏幕的常用对象,包括库存画笔、刷子、字体等,因此用户在使用以后无需删除它们。MFC库函数SlectStockObject()可以把一个库存对象选进设备环境中,并返回原先被选中的对象的指针,同时使该对象被分离出来。该函数的声明及其参数设置如下:virtualCGdiObject*SelectStockObject(intnIndex);如果函数调用成功,则返回一个被代替的CGdiObject对象的指针,而实际指向的是CPen、CBrush、CFont等类的实例。如果调用不成功,则返回值为NULL。参数nIndex用来指定想要得到的库存对象的种类,它的取值可参见VC++参考资料。总之,设备环境(DC)和图形设备接口(GDI)是实现计算机绘图的两个重要的组成部分,DC主要负责设置绘图的状态和方式,而GDI则主要负责设置所用的绘图工具。2.6.20nDraw成员函数VC++所编写的Windows图形应用程序通常是在视图类中通过OnDraw函数中添加绘图代码完成图形的生成。OnDraw函数是CView类中的一个虚拟成员函数,每当窗口需重绘时应用程序框架会调用它。函数原型如下:virtualvoidOnDraw(CDC*pDC);

参数是CDC类的指针,Windows是通过和窗口相关联的设备环境和显示硬件进行通讯,有了这个指针便可调用CDC类的成员函数来完成各种绘制工作。如当用户改变了窗口尺寸,或者当窗口恢复了先前被遮盖的部分,或者当应用程序改变了窗口数据时,应用程序框架都会自动调用OnDraw函数。若程序中某个函数修改了数据,为把更改后的数据形象地体现在视图中,则它必须通过调用视图类所继承的Invalidate(或者InvalidateRect)成员函数来通知Windows重绘窗口。下面的OnDraw函数是由AppWizard直接生成的:voidCMyProjectView::OnDraw(CDC*pDC){ CMyProjectDoc*pDoc=GetDocument();//获取当前文档指针ASSERT_VALID(pDoc);//检查指针是否为空//TODO:adddrawcodefornativedatahere//下面可添加自己的程序代码}2.6.3GDI对象类GDI的基本绘图对象类有:CBitmap类、CBrush类、CFont类、CPen类、CRgn类和CPalette类.它们都是CGdi0bject类的派生类。1、CPen类

(1)CPen类构造函数CPen的构造函数可创建绘图对象。该类有3个构造函数:CPen();CPen(intnPenStyle,intnWidth,COLORREFcrColor);throw(CResourceException);CPen(intnPenStyle,intmWidth,constLOGVRUSH*pLogBrush,intnStyleCount=0,constDWORD*lpStyle=NULL);throw(CResourceException);该类封装了Windows图形设备接口画笔,包含在“afxwin.h”头文件中。画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及宽度,并且可以指定它画实线、点线或虚线。运用缺省画笔画的是一个像素宽的黑色实线。(2)CPen类初始化成员函数

①调用CreatePen()成员函数

CreatePen()成员函数通过指定线型、线宽和颜色等画笔属性参数直接创建一个具有特定线型、线宽和颜色的画笔对象,其原型声明如下:

BOOLCreatePen(intnPenStyle,intnWidth,COLORREFcrColor);BOOLCreatePen(intnPenStyle,intnWidth,constLOGBRUSH*pLogBrush,intnStyleCount=0,constDWORD*lpStyle=NULL);

②调用CreatePenIndirect()成员函数

CreatePenIndirect()成员函数创建画笔对象,其属性并不是直接通过函数参数的形式给出的,而是通过LOGPEN结构的成员变量间接地给出。为了创建一个具有特定属性的画笔对象主要工作是重置LOGPEN结构的成员变量,该函数的原型声明如下;

BOOLCreatePenIndirect(LPLOGPENlpLogPen);

参数lpLogPen是指向LOGPEN结构的指针,在该结构中有3个成员变量,分别用于指定画笔的风格、宽度和颜色。LOGPEN结构的具体定义如下:

typedefstructtagLOGPEN{/*lgpn*/UNITlopnStyle;POINTlopnWidth;COLORREFlopnColor;}LOGPEN;第二个成员变量lopnWidth虽然也是用于指定画笔的宽度,但其类型却是POINT结构,在该结构中的y成员变量不起任何作用,只采用x成员变量来表示画笔宽度。2、CBrush类该类封装了Windows的GDI刷子,包含在“afxwin.h”头文件中。CBrush类画刷用来填充一个封闭图形对象(如矩形、椭圆)的内部区域。缺省的画刷将封闭图形的内部填充成全白色。通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数。该画刷可以是实线、阴影线或某种图案。(1)CBrush类构造函数该类具有4个重载的构造函数:CBrush();CBrush(COLORREFcrColor);throw(CResourceException);CBrush(intnIndex,COLORREFcrColor);throw(CResourceException);CBrush(CBitmap*pBitmap);throw(CResourceException);(2)CBrush初始化成员函数①调用CBrush::CreateSolidBrush()成员函数来初始化实画刷,以便使用纯色来填充区域内部,该函数原型声明如下:BOOLCreateSolidBrush(COLORREFcrColor);参数crColor指定了由结构COLORREF定义的画刷颜色,该颜色值是由定义在WINDOWS.H文件中的RGB宏指定的。②调用CBrush::CreateHatchBrush()成员因数来初始化阴影画刷,参数与构造函数中的参数完全相同。

BOOLCreateHatchBrush(intnIndex,COLORREFcrColor);③调用CBrush::CreatePatternBrush()成员函数来初始化一个图形画刷,当使用该画刷填充图形时,图形内部将用位图一个接一个的填充。该函数原型声明如下:BOOLCreatePatternBrush(CBitmap*pBitmap);参数如前所述。使用图形画刷需要注意的是在删除图形画刷时与画刷相联系的位图并未被删除,位图必须被单独地删除。④调用CBrush::CreateBrushIndirect()成员函数来创建画刷对象,画刷的属性并不是直接通过函数参数的形式给出的,而是通过LOGBRUSH结构的成员变量间接的给出的。该函数原型声明如下:BOOLCreateBrushIndirect(constLOGBRUSH*lpLogBrush);其中的lpLogBrush参数是指向LOGBRUSH结构的指针。LOGBRUSH结构中包含有关画刷的信息。函数如果调用成功,则返回非零值,否则返回零。另外,还可用CBrush::CreateDIBPatternBrush()成员函数来创建一个由设备无关位图(DIB)指定的图形画刷,它可被选进任何一种设备环境以支持光栅操作。3、CFont类该类封装一个Windows的图形设备接口字体并且提供了操纵字体的成员函数,包含在“afxwin.h”头文件中。字体CFont类是一种具有某种风格和尺寸的所有字符的完整集合,它常常被当作资源存于磁盘中,其中有一些还依赖于某种设备。要使用CFont对象,则需构造一个CFont对象并用成员函数CreateFont、CreateFontIndirect、CreatePointFont或CreatePointFontIndirect将一个Windows字体附加给它,然后用该对象的成员函数来操纵字体。CreatePointFont和CreatePointFontIndirect要比CreateFontIndirect好用,因为它们自动将字体高度从点大小变为逻辑单位。(1)CFont类构造函数及初始化成员函数该类只有一个构造函数CFont()。CFont对象在使用之前必须使用成员函数CreateFont、CreateFontIndirect、CreatePointFont或CreatePointFontIndirect进行初始化,以确定字体对象的参数。调用CreateFont函数来选择一种字体时,需要很多参数,其原型声明如下:BOOLCreateFont(intnHeight,intnWidth、intnEscapement、intnOrientation、intnWeight、BYTEbItalic、BYTEbUnderLine、BYTEcStrikeOut、BYTEnCharSet、BYTEnOutPrecision,BYTEnClipPrecision、BYTEnQuality、BYTEnPitchAndFamilyLPCTSTRlpszFacename);4、CRgn类CRgn类封装了一个WindowsGDI的区域对象,用于设备环境(通常是窗口)内的区域操作,包含在“afxwin.h”头文件中。在窗口中,一个区域是由多边形、椭圆或二者组合形成的一种范围,可以利用它来进行填充、裁剪以及鼠标击中测试。CRgn类提供了对区域对象的创建、更改等操作的成员函数。要使用这个区域,可以使用CRgn类的成员函数以及被定义为CDC类的成员函数的剪贴函数。(1)CRgn类构造函数及初始化成员函数构造函数CRgn()用来创建一个未被初始化的区域对象,只有使用一个或多个其它成员函数进行初始化后,成员m_hObject才包含一个有效的WindowsGDI区域对象。CRgn类的初始化成员函数为:①使用成员函数CreateRectRgn()直接创建一个矩形区域,原型声明为:BOOLCreateRectRgn(intx1,inty1,intx2,inty2);②使用成员函数CreateRectRgnIndirect()间接创建一个矩形区域,声明如下:B00LCreateRectRgnIndirect(LPCRECTlpRect);③使用成员函数CreateEllipticRgn()直接创建一个椭圆形区域,原型声明如下:BOOLCreatEllopticRgn(intx1,inty1,intx2,inty2);④使用成员函数CreateEllipticRgnIndirect()间接创建一个椭圆形区域,原型声明如下:BOOLCreatEllopticRgn(LPCRECTlpRect);⑤使用成员函数CreatePolygonRgn():创建一个多边形区域,原型声明如下:BOOLCreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);(2)操作CRgn对象的成员函数①使用OffsetRgn()成员函数,按照给定的偏移量移动一个区域。其原型声明如下:

intOffsetRgn(intx,inty);intOffsetRgn(POINTpoint);参数x表示区域对象沿着X方向向左或向右的移动量,参数y表示区域对象沿着Y方向向左或向右的移动量。参数point的两个分量x和y的含义与上面的参数x和y相同。该成员函数返回值指定一个新区域的类型。②使用PtInRegion()成员函数,来判断给定点是否在该对象的区域内。其原型声明为:

BOOLPtInRegion(intx,inty)const;

BOOLPtInRegion(POINTpoint)const;参数x和y表示给定点的坐标。参数point的两个分量x和y与前面的参数含义相同。如果给定点在区域内,成员函数的返回值为非零值,否则为0。③使用RectInRegion()成员函数,来判断给定的矩形的任何部分是否在区域边界内部。其原型声明为:BOOLRectInRegion(LPCRECTlpRect)const;参数lpRect指向了一个RECT结构或是CRect对象,通过该参数指定了给定的矩形。如果给定矩形的任何一部分在区域的边界内,则成员函数返回非零值,否则返回0。④使用CombineRgn成员函数对两个已经存在的区域进行操作,其完整定义如下:intCombineRgn(CRgn*pRgn1,CRgn*pRgn2,intnCombineMode);5、CPalette类调色板是应用程序和彩色输出设备之间的接口,它保存着系统可用的色彩信息。这个接口允许应用程序充分利用彩色设备的颜色处理特性,而不干涉其它应用程序的显示效果。Windows使用应用程序的逻辑调色板(一个所需颜色的列表)和系统调色板(定义了可使用的颜色)来确定使用的颜色。CPalette类包含在“afxwin.h”头文件中。①CPalette类构造函数调色板的构造函数只有一个,其原型声明如下:CPalette();它只是构造了一个CPalette对象,而这个对象没有连接调色板,这时需要调用CreatePalette将一个调色板连接到此对象上。②CPalette对象的初始化成员函数成员函数CreatePalette可完成对调色板对象的初始化工作,从而创建一个Windows的逻辑调色板。该函数调用成功时返回非零值,否则为0。此函数的完整声明如下:

BOOLCreatePalette(LPLOGPALETTElpLogPalette);其参数lpLogPalette指向一个LOGPALETTE结构的指针,此结构包含了有关逻辑调色板中的颜色的信息。该结构的完整定义为:typedefstructtagLOGPALETTE{//lgplWORDpalVersion;//Windows的版本号,一般为win3.0WORDpalNumEntries;//调色板中颜色表项的数目

PALETTEENTRYpalPalEntry[1];//每个表项的颜色和使用方法}LOGPALETTE;③删除CPalette对象与CRgn对象一样,初始化后的CPalette对象也需要调用基类的成员函数DeleteObject来删除对象。方法为:m_Palette.DeleteObject();6、CBitmap类CBitmap类封装了WindowsGDI中的位图,包含在“afxwin.h”头文件中。CBitmap类提供成员函数装载和操作位图。用户可以利用位图来表示图像,也可以利用它来创建画刷。(1)CBitmap类构造函数CBitmap类构造函数的原型为:CBitmap();它负责构造一个CBitmap对象。生成的对象必须用下面的成员函数进行初始化。(2)CBitmap对象的初始化成员函数①CreateBitmap(intnWidth,intnHeight,UINTnPlanes,UINTnBitcount,constvoid*lpBits)该函数调用成功时返回非零值,否则为0。nWidth指定位图的宽度(以像素数为单位)nHeight指定位图的高度(以像素数为单位)nPlanes指定位图中的彩色位面数。nBitcount指定位图中每个像素颜色的位数。lpBits指向一个短整型数组,数组中记录了位图的初始位值。如果为NULL,则新的位图没有被初始化。本函数用指定的宽度、高度和位模式初始化依赖于设备的内存位图。对彩色位图来说,参数nPlanes和nBitcount要有一个被设置为1。如果二者都被设置为1,则建立一个黑白位图。虽然不能为显示设备直接选中一个位图,但可以调用CDC::SelectObject()把位图置为内存设备上下文(memorydevicecontext)的当前位图,然后调用CDC::BitBlt函数把它拷贝到任何兼容的设备上下文中。终止用CreateBitmap建立的CBitmap对象,先要从设备上下文中移出该位图,然后删除该对象。②BOOLLoadBitmap(LPCTSTRlpszResourceName);BOOLLoadBitmap(UINTnIDResoure);函数调用成功时返回非零值,否则返回0。其中参数lpszResourceName指向一个包含了位图资源名字的字符串(该字符串以null结尾)。参数nIDResoure指定位图资源的ID号。本函数从应用的可执行文件中加载由lpszResourceName指定名字或者由nIDResoure指定的ID号标志的位图资源。加载的位图被附在CBitmap对象上。如果由lpszResourceName指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回0。可以调用函数CGdiObject::DeleteObject删除由LoadBitmap加载的位图,否则CBitmap的析构函数将删除该位图对象。在删除位图对象之前,要保证它没有被选到设备上下文中。2.6.4Windows映射模式1、Windows中定义的映射模式映射模式映射识别码逻辑单位X轴正向Y轴正向MM_TEXT1pixels右下MM_LOMETRIC20.1mm右上MM_HIMETRIC30.01mm右上MM_LONGLISH40.01mm右上MM_HIENGLISH50.001mm右上MM_TWIPS61/1440in右上MM_ISOTROPIC7可变(x等于y)可变的可变的MM_ANSISOTROPIC8可变(x不等于y)可变的可变的2、Windows映射模式设置在VC++中调用CDC类中的成员函数SetMapMode即可完成映射模式的设置。该函数的声明:virtualintSetMapMode(intnMode);

其中nMode是映射模式,返回值是先前的映射模式。2.6.5绘图模式的设置参数值说明R2_BLACK像素总是黑色的R2_WHITE像素总是白色的R2_NOP像素颜色保持不变R2_NOT像素为屏幕颜色的反色R2_COPYPEN像素为画笔的颜色R2_NOTCOPYPEN像素为画笔颜色的反色R2_MERGEPENNOT像素颜色=(NOT屏幕颜色)OR画笔颜色)R2_MASKPENNOT像素颜色=(NOT屏幕颜色)AND画笔颜色R2_MERGENOTPEN像素颜色=(NOT画笔颜色)OR屏幕颜色R2_MASKNOTPEN像素颜色=(NOT画笔颜色)AND屏幕颜色)R2_MERGEPEN像素颜色=(画笔颜色)OR屏幕颜色R2_NOTMERGEPEN像素颜色=NOT(画笔颜色OR屏幕颜色)R2_MASKPEN像素颜色=画笔颜色AND屏幕颜色R2_NOTMASKPEN像素颜色=NOT(画笔颜色AND屏幕颜色)R2_XORPEN像素颜色=画笔颜色XOR屏幕颜色R2_NOTXORPEN像素颜色=NOT(画笔颜色XOR屏幕颜色)2.7OpenGL程序设计基础2.7.1OpenGL的主要功能2.7.2OpenGL绘图程序开发方法2.7.1OpenGL的主要功能1、OpenGL基本操作①绘制物体:真实世界里的任何物体都可以在计算机中用简单的点、线、多边形来描述。OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体。②变换:论多么复杂的图形都是由基本图元组成并经过一系列变换来实现的,OpenGL提供了一系列基本的变换,如取景变换、模型变换、投影变换及视口变换。③光照处理:正如自然界不可缺少光一样,绘制有真实感的三维物体必须做光照处理。④着色:OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引模式。⑤反走样:在OpenGL绘制图形过程中,由于使用的是位图,所以绘制出的图像的边缘会出现锯齿形状,称为走样。为了消除这种缺陷,OpenGL提供了点、线、多边形的反走样技术。⑥融合:为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就要用到融合技术。⑦雾化:正如自然界中存在烟雾一样,OpenGL提供了"fog"的基本操作来达到对场景进行雾化的效果。⑧位图和图像:在图形绘制过程中,位图和图像操作是非常重要的一个方面。OpenGL提供了一系列函数来实现位图和图像的操作。⑨纹理映射:在计算机图

温馨提示

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

评论

0/150

提交评论