《计算机图形学完整版ppt课件》由会员分享,可在线阅读,更多相关《计算机图形学完整版ppt课件(133页珍藏版)》请在金锄头文库上搜索。
1、1计算机图形学与虚拟现实计算机图形学与虚拟现实ComputerGraphicsandVirtualRealityl第一章第一章图形学综述图形学综述l第二章第二章图形系统概述图形系统概述l第三章第三章输出图元输出图元l第四章第四章图元属性图元属性l第五章第五章图形变换图形变换l第六章第六章三维对象的表示三维对象的表示l第七章第七章可见面判别算法可见面判别算法l第八章第八章光照模型光照模型l第九章第九章图形用户界面和交互输入方法图形用户界面和交互输入方法l第十章第十章颜色模型颜色模型l第十一章第十一章虚拟现实技术虚拟现实技术lOpenGL2第一章第一章计算机图形学综述计算机图形学综述l一些概念一些
2、概念l图形学与相关分支学科间的关系图形学与相关分支学科间的关系l计算机图形学主要研究内容计算机图形学主要研究内容l应用领域及前沿应用领域及前沿3图形图形Graphics广义:各种图,景物、图像、图片、图画、形象广义:各种图,景物、图像、图片、图画、形象狭义:用数学方法描述的图对象(几何关系、代数方程、分析表达式等建立的图狭义:用数学方法描述的图对象(几何关系、代数方程、分析表达式等建立的图形。)形。)一些相关概念:一些相关概念:图元(图素)图元(图素)Primitive矢量(向量)图矢量(向量)图Vecter-basedgraphics参数图参数图Parametric动画动画animation
3、 图像(图像(Image)一些相关概念:一些相关概念:像素像素Pixel网格图网格图Grid位图位图Bitmap点阵图点阵图光栅图光栅图Raster图片图片Picture4图形学图形学模式识别模式识别计算计算几何几何图像图像处理处理图形信息处理相关分支学科间的关系:图形信息处理相关分支学科间的关系:l图像处理图像处理物体映像处理成新的数字化图像。采用一定的算法对图像进行分析、解释、修改等一系列过程。编辑的最小单元是像素而不是对象或形状。l模式识别模式识别分析、识别各类信息,找出其中蕴含的内在联系或抽象模型。如文字识别、语音识别、图像识别5基于模型:建模基于模型:建模处理处理图形输出图形输出计算
4、机图形学计算机图形学(CG,ComputerGraphics)l分支学科分支学科光栅图形学光栅图形学RasterGraphics计算几何学计算几何学ComputationalGeometry真实感图形学真实感图形学PhotorealisticRendering虚拟现实虚拟现实VirtualRealityl运用计算机建立、存储、处理对象的模型,并根据模型产生该对象的图形输出的运用计算机建立、存储、处理对象的模型,并根据模型产生该对象的图形输出的有关理论、方法和技术有关理论、方法和技术6CG主要研究内容:主要研究内容:l图形硬件、输入输出设备图形硬件、输入输出设备l图形软件、图形数据库图形软件、图
5、形数据库l图形标准图形标准l图形交互技术图形交互技术l光栅图形生成算法光栅图形生成算法l曲线、曲面造型曲线、曲面造型l实体造型,复杂形体造型实体造型,复杂形体造型l真实感图形计算与显示算法真实感图形计算与显示算法l数据可视化数据可视化l计算机动画计算机动画l自然景物仿真自然景物仿真l实时建模、渲染技术实时建模、渲染技术l基于网络的图形技术基于网络的图形技术真实感图形学涉及:真实感图形学涉及:投影变换,三维观测投影变换,三维观测三维对象表示三维对象表示可见线可见线/面判别(消除隐藏线面判别(消除隐藏线/面)面)颜色模型和颜色应用颜色模型和颜色应用光照模型光照模型(透明,雾,阴影,明暗透明,雾,阴
6、影,明暗)面绘制面绘制(表面细节,纹理表面细节,纹理)7第二章第二章图形系统概述图形系统概述l图形输出图形输出/输入设备输入设备l图形工作站图形工作站l图形控制器(图形卡,显卡)图形控制器(图形卡,显卡)l图形软件图形软件l图形系统的交互设备和交互任务图形系统的交互设备和交互任务8图形系统的层次结构:图形系统的层次结构:9图形输出显示设备图形输出显示设备l阴极射线管阴极射线管CRT存储管式显示器随机扫描显示器(矢量显示器)刷新式光栅扫描显示器彩色光栅扫描显示器l平板显示器平板显示器FPD等离子体显示板薄膜光电显示器发光二极管LED液晶显示器LCDl三维观察设备三维观察设备l虚拟现实系统的输出显
7、示设备虚拟现实系统的输出显示设备l10输入设备输入设备l键盘、鼠标键盘、鼠标l按钮盒、旋钮按钮盒、旋钮l跟踪球、空间球跟踪球、空间球l操作杆操作杆l触觉反馈设备触觉反馈设备l数据手套、数据衣数据手套、数据衣l数字化仪数字化仪l扫描仪扫描仪l触摸板触摸板l光笔光笔l硬拷贝设备硬拷贝设备l打印机打印机喷墨激光l绘图仪绘图仪台式大型滚动传送式11图形硬件系统组成模块示意图:图形硬件系统组成模块示意图:CPU系统系统存储器存储器视频卡视频卡GPU显存显存系统总线系统总线其他输入其他输入/输出设备输出设备图图形形卡卡帧缓存帧缓存DAC接口接口12图形卡工作原理示意图形卡工作原理示意可看作连接计算机和显示
8、终端的纽带。不仅存储图形,还能完成大部分图形函数,减轻了可看作连接计算机和显示终端的纽带。不仅存储图形,还能完成大部分图形函数,减轻了CPU的负担,提高了显示能力和显示速度。的负担,提高了显示能力和显示速度。GPU图形处理器图形处理器13图形软件体系结构图形软件体系结构支持图形处理的操作系统支持图形处理的操作系统,如如Macintosh、Windows、Unix、Linux、各种嵌、各种嵌入式入式OS图形编程软件包,如图形编程软件包,如OpenGL、VRML、Java2D、Java3D专业应用系统,如专业应用系统,如MATLAB、AutoCAD、3DSMAX、UG图形设备驱动程序,如显卡驱动、
9、打印机图形设备驱动程序,如显卡驱动、打印机/绘图仪绘图仪驱动驱动14图形软件主要类型图形软件主要类型1.通用软件包通用软件包用现有某种计算机语言写成的子程序包。使用时按相应计算机语言的规定调用所需要的子程序生成各种图形。如:GKS、OpenGL2.基于通用语言的扩展图形软件基于通用语言的扩展图形软件扩充某种计算机语言使其具有图形生成和处理功能,例如:Fortran、PascalBasic(VisualBasic)C、C+(VisualC+)AutoLisp15图形软件主要类型图形软件主要类型3.专用图形软件包专用图形软件包针对某一种设备或应用,设计/配置专用的图形生成语言或函数集,例如:场景描
10、述:OpenInventor建立虚拟世界的三维模型:VRML生成三维Web显示:Java3D创建Javaapplet中的二维场景:Java2D生成各种光照模型下的场景:RendermanInterface(Pixar)164.专业图形应用系统专业图形应用系统针对某类应用或专业领域而专门开发,例如针对某类应用或专业领域而专门开发,例如:制造领域:制造领域:Unigraphics、Pro/Engineer、AutoCAD、 CATIA、ANSYS、MSCSoftware数值计算与可视化:数值计算与可视化:MATLAB控制:控制:Matrix XEDA/虚拟实验虚拟实验/虚拟仪器:虚拟仪器:Prot
11、el、EWB、LabVIEWGIS: Mapinfo、ArcGIS.效果设计效果设计/动画:动画:3D Studio MAX 、Maya、Coreldraw图像图像/画图:画图:Photoshop、Painter、Illustrator网页设计:网页设计:Dreamweaver /Flash /Firework 流程设计:流程设计:Visio图形软件主要类型图形软件主要类型17图形软件包的主要功能图形软件包的主要功能l计算机图形应用编程接口(计算机图形应用编程接口(CGAPI)以及程序设计语言与硬件的接口,如:)以及程序设计语言与硬件的接口,如:输出函数,组织并在输出设备上显示图形输入函数,用
12、于控制和处理交互式输入设备的数据流l图形函数库图形函数库如构造图元、描述图元属性、几何变换、观察变换,分割/管理图形部件l控制操作类函数集控制操作类函数集处理事务性任务,各种状态设置,如初始化参数设置等等 计算机图形软件的标准化意义计算机图形软件的标准化意义l可移植性可移植性通用、与设备无关l推动、促进计算机图形学的推广、应用推动、促进计算机图形学的推广、应用l资源信息共享资源信息共享18第三章第三章输出图元输出图元l图形软件包中的图元(图形软件包中的图元(primitive)图形软件包中用来描述各种图形元素的函数称为图形软件包中用来描述各种图形元素的函数称为图形输出原语图形输出原语,简称图元
13、,简称图元l几何图元几何图元描述对象几何要素的输出图元,如:描述对象几何要素的输出图元,如:点、直线段圆、椭圆二次曲线/曲面,样条曲线/曲面多边形填色区域字符串显示19图元的绘制、显示过程图元的绘制、显示过程图元操作、像素操作图元操作、像素操作光栅化(扫描转换)光栅化(扫描转换)像素信息像素信息帧缓存帧缓存顶点顶点法向量、颜色、纹理法向量、颜色、纹理像素像素显示器显示器调用底层函数,如调用底层函数,如setPixel(x,y);将当前像素颜色设定值存入帧;将当前像素颜色设定值存入帧缓存的整数坐标位置(缓存的整数坐标位置(x,y)处。)处。20图元描述与操作图元描述与操作l几何几何图元由一组顶点
14、图元由一组顶点(Vertex)描述)描述这一组顶点可以是一个或是多个。每个顶点信息二维或三维,使用24个坐标。顶点信息由位置坐标、颜色值、法向量、纹理坐标等组成。l图元操作:图元操作:几何变换、光照、反走样、消隐、像素操作等,然后准备进行光栅化处理。l扫描转换或扫描转换或光栅化光栅化(Rasterization)将对象的数学描述、颜色信息转换成像素信息(像素段写入帧缓存),送到屏幕显示。图对象图对象 像素像素扫描转换扫描转换21第四章第四章图元的属性图元的属性l图元的属性参数(图元的属性参数(attributeparameter)影响图元显示特性的参数称为属性参数。l控制图元基本显示特性的一系
15、列属性,如:控制图元基本显示特性的一系列属性,如:线型、线宽、颜色填充某种颜色或图案文本显示方式字符的字体、颜色、大小平滑光栅阶梯效果反走样22第五章第五章图形变换图形变换-观察流水线观察流水线l坐标系统坐标系统l几何变换几何变换二维/三维基本/复合变换l二维二维/三维观察流水线三维观察流水线世界坐标系到观察坐标系的变换投影变换视口变换和三维屏幕坐标系23坐标系统坐标系统l坐标系统:用于描述物体的空间位置及空间位置关系。如在数学上常用到的笛卡尔直坐标系统:用于描述物体的空间位置及空间位置关系。如在数学上常用到的笛卡尔直角坐标系。角坐标系。l在构造和显示一个场景时往往会涉及几个不同的笛卡儿坐标系
16、:在构造和显示一个场景时往往会涉及几个不同的笛卡儿坐标系:建模坐标系(modelingcoordinate)l或称局部坐标系、主坐标系、造型坐标系l如在建模坐标系中构造各零件世界坐标系(worldcoordinate)l或称图形坐标系、用户坐标系、全局坐标系l如在世界坐标系中进行装配观察坐标系(viewingcoordinate)l对场景进行观察所对应的坐标系l对象经变换到该场景的一个二维投影投影变换规范化坐标系(normalizedcoordinate)l可使图形软件与特定输出设备的坐标范围无关l坐标范围:-11,或01等等设备坐标系(devicecoordinate)l对于显示器也称屏幕坐
17、标系(screencoordinate)24图形建模图形建模-观察变换观察变换l建立图对象并在屏幕上显示,一般会发生三种类型的变换:视图、模型和投影。建立图对象并在屏幕上显示,一般会发生三种类型的变换:视图、模型和投影。变换类型变换类型用途用途视图(视图(Viewing)指定观察者或照相机位置指定观察者或照相机位置模型(模型(Modeling)在场景中对物体移动、旋转、缩放、扭曲等,或在场景中对物体移动、旋转、缩放、扭曲等,或转换模型坐标系转换模型坐标系投影(投影(Projection)3D2D,并对观察区域进行裁剪和缩放,并对观察区域进行裁剪和缩放视口(视口(Viewport)一种伪变换,对
18、窗口上的最终输出进行移动、缩一种伪变换,对窗口上的最终输出进行移动、缩放等放等25三维几何变换三维几何变换l可用可用44矩阵操作统一表示二维和三维几何变换矩阵操作统一表示二维和三维几何变换缩放、旋转、缩放、旋转、对称、错切等对称、错切等平移平移投影投影整体缩放整体缩放l基本变换:平移、旋转、缩放基本变换:平移、旋转、缩放l复合变换:可由平移、旋转、缩放和其他变换的矩阵乘积(合并)形成。复合变换:可由平移、旋转、缩放和其他变换的矩阵乘积(合并)形成。复合变换时,先作用的变换矩阵在右端,后作用的变换矩阵在左端。26二维建模二维建模-观察变换流水线观察变换流水线应用建模坐标应用建模坐标变换构造世界变
19、换构造世界坐标系场景坐标系场景二维二维观察变换观察变换观察坐标观察坐标转换为规范化转换为规范化设备坐标设备坐标规范化设备规范化设备坐标映射坐标映射到设备坐标到设备坐标MC窗口窗口视口视口WCVCNCDCxmymxmymxy(定义定义裁剪窗口裁剪窗口)(定义视口定义视口)27三维建模三维建模-观察变换流水线观察变换流水线建模变换建模变换观察变换观察变换规范化变换规范化变换与裁剪与裁剪视口变换视口变换MCWCPCNCDC投影变换投影变换VCu投影坐标系统投影坐标系统PC:在投影面(观察面)上定义,用于指定物体在投影面上的所有点。:在投影面(观察面)上定义,用于指定物体在投影面上的所有点。可进一步在
20、投影面上定义裁剪窗口。可进一步在投影面上定义裁剪窗口。28投影变换投影变换(projectiontransformation)l投影变换:将对象描述投影到观察平面上的过程。有两种方式:平行投影、透视投影变换:将对象描述投影到观察平面上的过程。有两种方式:平行投影、透视投影。投影。(投影平面)(投影平面)xyz29投影变换类型投影变换类型保持对象保持对象相对比例相对比例提供真实提供真实感表达感表达30第六章第六章三维对象的表示三维对象的表示l三维形体的表示方法三维形体的表示方法边界表示B-repsl多面体,规则二次/超二次曲面l样条曲面l细分曲面空间分区表示space-partitioningl
21、结构实体几何法CSGl八叉树octree,二叉树BSP过程方法l扫描表示sweeprepresentationl分形几何方法fractal-geometrymethodl形状语法(基于产生规则)shapegrammar基于特征的三维造型粒子系统particalsystem基于物理的方法physicallybasedmodeling31边界表示边界表示B-repsl使用一组多边形平面或曲面使用一组多边形平面或曲面面片,来描述三维对象。面片将对象分为内部和面片,来描述三维对象。面片将对象分为内部和外部。外部。l多边形面片与曲面面片多边形面片与曲面面片OpenGL中使用多边形,如三角形或四边形图元函
22、指定标准图形对象的多边形面片。曲面面片离散化为多边形面片,在进入观察流水线处理。l标准图形对象标准图形对象(standardgraphicsobject):用多边形(线性方程)描述的图形对:用多边形(线性方程)描述的图形对象。象。32边界表示举例边界表示举例三角形面片三角形面片四边形面片四边形面片33曲面曲面l二次曲面(二次方程描述)二次曲面(二次方程描述)球、椭球、环、抛物面、双曲面l超二次曲面超二次曲面l样条曲面样条曲面l细分曲面细分曲面34B样条曲线样条曲线一些常用样条曲线一些常用样条曲线/曲面曲面三次三次Bzier曲线曲线双三次样条插值双三次样条插值Bzier曲面曲面l一组控制点拟合曲
23、线一组控制点拟合曲线/曲面时,由建立边界条件的方法不同,曲面时,由建立边界条件的方法不同,可以构造不同的样条曲线可以构造不同的样条曲线/曲面,如:曲面,如:自然三次插值样条曲线/曲面Bzier样条曲线/曲面B样条曲线/曲面Beta样条曲线/曲面(B样条的一般化)有理样条曲线/曲面35空间分区表示空间分区表示space-partitioningrepresentation将包含一个对象的空间区域划分成一组较小的、非重叠的连续实体(例如立将包含一个对象的空间区域划分成一组较小的、非重叠的连续实体(例如立方体)。方体)。l结构实体几何法结构实体几何法CSGl八叉树八叉树octree,二叉树,二叉树B
24、SP可以描述图形对象的内部性质可以描述图形对象的内部性质36结构实体几何法结构实体几何法(CSG,constructivesolidgeometry)l要点:通过指定对象间的并、交、差要点:通过指定对象间的并、交、差操作,生成一个新对象。操作,生成一个新对象。例如并、差操作:例如并、差操作:37图形对象的图形对象的CSG树形表示树形表示CSG对象对象操作操作1操作操作3对象对象1对象对象2对象对象4操作操作2对象对象2对象对象3二叉空间分割树二叉空间分割树(BSP,binaryspace-partitioning)其本体元(体素)其本体元(体素)38分层树形结构分层树形结构八叉树八叉树(oct
25、ree)l利用空间相关性利用空间相关性l八叉树编码方法:八叉树编码方法:将三维空间区域(如立方体)分成八等分非均质八等分再分成八等分,直到该子区域均质每个节点有0到8个直接后代体素或体元体素或体元39三维形体的特征表示三维形体的特征表示l有时用户希望直接用设计特征来建模有时用户希望直接用设计特征来建模例如,进行工艺设计时,需要的并不是构成形体的点、线、面这些几何和拓扑信息,而需要高层的机械加工特征信息,如光孔、螺孔、环形槽、键槽、滚花等l特征是面向应用、面向用户的特征是面向应用、面向用户的如特征造型系统:Pro/Engineering如圆柱的特征用如圆柱的特征用R、H定义定义40基于特征的造型
26、系统示意基于特征的造型系统示意41三维对象表示的过程方法三维对象表示的过程方法l扫描表示扫描表示sweeprepresentationl分形几何方法分形几何方法fractal-geometrymethodl形状语法(基于产生规则)形状语法(基于产生规则)shapegrammar42第七章第七章第七章第七章 可见面判别算法可见面判别算法可见面判别算法可见面判别算法uu可见面判别算法分类可见面判别算法分类可见面判别算法分类可见面判别算法分类uu一些常用算法的基本思想一些常用算法的基本思想一些常用算法的基本思想一些常用算法的基本思想 后向面判别,后向面判别,后向面判别,后向面判别,Z Z Z Z缓存
27、(深度缓存),缓存(深度缓存),缓存(深度缓存),缓存(深度缓存),A A A A缓存,扫描线算法,深度排缓存,扫描线算法,深度排缓存,扫描线算法,深度排缓存,扫描线算法,深度排序,序,序,序,BSPBSPBSPBSP树,区域细分,八叉树,光线投影算法树,区域细分,八叉树,光线投影算法树,区域细分,八叉树,光线投影算法树,区域细分,八叉树,光线投影算法uu算法比较算法比较算法比较算法比较43可见面判别算法分类可见面判别算法分类可见面判别算法分类可见面判别算法分类n n根据消隐空间不同,将算法分为三类:根据消隐空间不同,将算法分为三类:根据消隐空间不同,将算法分为三类:根据消隐空间不同,将算法分
28、为三类: (a)(a)物空间物空间物空间物空间(object-space)(object-space)(object-space)(object-space)算法算法算法算法,直接处理图对象,如,直接处理图对象,如,直接处理图对象,如,直接处理图对象,如光线投射算法等。光线投射算法等。光线投射算法等。光线投射算法等。 将场景中每将场景中每将场景中每将场景中每一个面与其他每个面比较,求出所有点、边、面遮挡关系。一个面与其他每个面比较,求出所有点、边、面遮挡关系。一个面与其他每个面比较,求出所有点、边、面遮挡关系。一个面与其他每个面比较,求出所有点、边、面遮挡关系。(b)(b)像空间像空间像空间像
29、空间(image-space)(image-space)(image-space)(image-space)算法算法算法算法,处理图对象的投影图像,如深度缓存,处理图对象的投影图像,如深度缓存,处理图对象的投影图像,如深度缓存,处理图对象的投影图像,如深度缓存、扫描线算法等。、扫描线算法等。、扫描线算法等。、扫描线算法等。对屏幕上每个象素进行判断,决定哪个多边形在该象素可见。对屏幕上每个象素进行判断,决定哪个多边形在该象素可见。对屏幕上每个象素进行判断,决定哪个多边形在该象素可见。对屏幕上每个象素进行判断,决定哪个多边形在该象素可见。(c)(c)画家算法画家算法画家算法画家算法(painter
30、salgorithm)(paintersalgorithm),结合物空间和像空间的消隐算法。在物空间中预先,结合物空间和像空间的消隐算法。在物空间中预先,结合物空间和像空间的消隐算法。在物空间中预先,结合物空间和像空间的消隐算法。在物空间中预先计算面的可见性优先级,再在像空间中生成消隐图。计算面的可见性优先级,再在像空间中生成消隐图。计算面的可见性优先级,再在像空间中生成消隐图。计算面的可见性优先级,再在像空间中生成消隐图。44可见面判别算法要点可见面判别算法要点可见面判别算法要点可见面判别算法要点uu深度计算深度计算深度计算深度计算/ / / /排序排序排序排序 将场景中的对象表面与观察平面
31、的距离进行排序将场景中的对象表面与观察平面的距离进行排序将场景中的对象表面与观察平面的距离进行排序将场景中的对象表面与观察平面的距离进行排序深度排序;深度排序;深度排序;深度排序;uu连贯性连贯性连贯性连贯性 充分利用场景的规则性特征。充分利用场景的规则性特征。充分利用场景的规则性特征。充分利用场景的规则性特征。观察平面观察平面场景中的图对象场景中的图对象物空间物空间像空间像空间像素像素45z z缓存缓存缓存缓存(z-buffer)(z-buffer)算法算法算法算法uu沿观察系统沿观察系统沿观察系统沿观察系统z z z z轴,计算、比较各对象距观察平面的深度。轴,计算、比较各对象距观察平面的
32、深度。轴,计算、比较各对象距观察平面的深度。轴,计算、比较各对象距观察平面的深度。像空间像空间沿正交投影方向,沿正交投影方向,不同深度的对象面不同深度的对象面观察坐标系观察坐标系46Z-Z-Z-Z-缓存算法的实现缓存算法的实现缓存算法的实现缓存算法的实现1.1.1.1.将缓存中所有单元初始化:将缓存中所有单元初始化:将缓存中所有单元初始化:将缓存中所有单元初始化: depthBuff (x,y)=1.0 (depthBuff (x,y)=1.0 (depthBuff (x,y)=1.0 (depthBuff (x,y)=1.0 (规格化最大深度),规格化最大深度),规格化最大深度),规格化最大
33、深度), frameBuff (x,y)=backgndColorframeBuff (x,y)=backgndColorframeBuff (x,y)=backgndColorframeBuff (x,y)=backgndColor2.2.2.2.处理场景中的每一多边形处理场景中的每一多边形处理场景中的每一多边形处理场景中的每一多边形l l计算或提取多边形面上各点计算或提取多边形面上各点计算或提取多边形面上各点计算或提取多边形面上各点(x,y)(x,y)(x,y)(x,y)深度值深度值深度值深度值z z z z;l l若若若若zdepthBuff (x,y)zdepthBuff (x,y)z
34、depthBuff (x,y)zdepthBuff (x,y),则计算该位置表面颜色并设定:,则计算该位置表面颜色并设定:,则计算该位置表面颜色并设定:,则计算该位置表面颜色并设定: depthBuff (x,y)=zdepthBuff (x,y)=zdepthBuff (x,y)=zdepthBuff (x,y)=z, frameBuff (x,y)=surfColor (x,y)frameBuff (x,y)=surfColor (x,y)frameBuff (x,y)=surfColor (x,y)frameBuff (x,y)=surfColor (x,y)Z(深度深度)缓存缓存帧(刷
35、新)缓存帧(刷新)缓存屏幕象素阵列屏幕象素阵列循循环环47Z Z Z Z缓存算法特点缓存算法特点缓存算法特点缓存算法特点uu无需对场景中的表面进行排序,易于实现;无需对场景中的表面进行排序,易于实现;无需对场景中的表面进行排序,易于实现;无需对场景中的表面进行排序,易于实现;uu除帧缓存外,还需另一个深度缓存;除帧缓存外,还需另一个深度缓存;除帧缓存外,还需另一个深度缓存;除帧缓存外,还需另一个深度缓存;uu对象按任意次序处理,带来一些不必要的计算;对象按任意次序处理,带来一些不必要的计算;对象按任意次序处理,带来一些不必要的计算;对象按任意次序处理,带来一些不必要的计算;uu只能处理非透明表
36、面。只能处理非透明表面。只能处理非透明表面。只能处理非透明表面。48A A- - - -缓存算法缓存算法缓存算法缓存算法 (A-buffer method)(A-buffer method)(A-buffer method)(A-buffer method)uu扩充扩充扩充扩充z z z z缓存算法,以处理透明效果、颜色混合等;缓存算法,以处理透明效果、颜色混合等;缓存算法,以处理透明效果、颜色混合等;缓存算法,以处理透明效果、颜色混合等;uu在深度缓存算法基础上,可以实现处理区域平均、边界反走样等。在深度缓存算法基础上,可以实现处理区域平均、边界反走样等。在深度缓存算法基础上,可以实现处理区
37、域平均、边界反走样等。在深度缓存算法基础上,可以实现处理区域平均、边界反走样等。透过透明表面观察不透明表面,需要透过透明表面观察不透明表面,需要多个颜色输入,并应用颜色混合操作,如:多个颜色输入,并应用颜色混合操作,如:glClearColor(1.0,1.0,1.0,0.0);GL_BLEND49A A缓存算法原理缓存算法原理缓存算法原理缓存算法原理A缓存缓存每个单元有两个域:每个单元有两个域:l深度域:存储一个正或负实数深度域:存储一个正或负实数l表面数据域:存储表面信息或指针值表面数据域:存储表面信息或指针值深度深度0RGB强度分量强度分量一个表面投影到该像素一个表面投影到该像素深度深度
38、0表面表面1信息信息表面表面2信息信息有多个表面对该像素颜色有影响有多个表面对该像素颜色有影响RGB强度分量强度分量透明度透明度深度深度覆盖度覆盖度表面标识名表面标识名其他参数其他参数指针指针50深度排序深度排序深度排序深度排序(depth-sorting)(depth-sorting)(depth-sorting)(depth-sorting)或画家算法或画家算法或画家算法或画家算法uu同时运用物空间与像空间操作同时运用物空间与像空间操作同时运用物空间与像空间操作同时运用物空间与像空间操作uu算法要点:算法要点:算法要点:算法要点: (1 1 1 1)在像空间或物空间,将表面按深度递减方向排
39、序;)在像空间或物空间,将表面按深度递减方向排序;)在像空间或物空间,将表面按深度递减方向排序;)在像空间或物空间,将表面按深度递减方向排序; (2 2 2 2)在像空间,由深度最大表面开始,逐个对表面进行扫描转换。)在像空间,由深度最大表面开始,逐个对表面进行扫描转换。)在像空间,由深度最大表面开始,逐个对表面进行扫描转换。)在像空间,由深度最大表面开始,逐个对表面进行扫描转换。类似画家绘画,类似画家绘画,由远及近的绘由远及近的绘制各对象。制各对象。51光线投射算法原理光线投射算法原理光线投射算法原理光线投射算法原理uu计算光线与对象表面所有交点,得到深度值,离像素最近的交点所在计算光线与对
40、象表面所有交点,得到深度值,离像素最近的交点所在计算光线与对象表面所有交点,得到深度值,离像素最近的交点所在计算光线与对象表面所有交点,得到深度值,离像素最近的交点所在表面为可见面。表面为可见面。表面为可见面。表面为可见面。由像素点射入场景的视线(射线或光线)由像素点射入场景的视线(射线或光线)像素像素沿光线的路径追踪沿光线的路径追踪52光线投射算法实现描述光线投射算法实现描述光线投射算法实现描述光线投射算法实现描述forfor(屏幕上的每一像素)(屏幕上的每一像素)(屏幕上的每一像素)(屏幕上的每一像素) 形成通过该屏幕像素形成通过该屏幕像素形成通过该屏幕像素形成通过该屏幕像素(x,y)(x
41、,y)的射线;的射线;的射线;的射线; forfor(场景中的每个物体)(场景中的每个物体)(场景中的每个物体)(场景中的每个物体)将射线与该物体求交;将射线与该物体求交;将射线与该物体求交;将射线与该物体求交; ifif(存在交点)(存在交点)(存在交点)(存在交点)以最近的交点所属的颜色显示像素以最近的交点所属的颜色显示像素以最近的交点所属的颜色显示像素以最近的交点所属的颜色显示像素(x,y)(x,y)elseelse以背景色显示像素以背景色显示像素以背景色显示像素以背景色显示像素(x,y)(x,y) 为提高该算法效率:为提高该算法效率:为提高该算法效率:为提高该算法效率:使用包围盒技术使
42、用包围盒技术使用包围盒技术使用包围盒技术空间分割技术空间分割技术空间分割技术空间分割技术物体的层次表示方法等。物体的层次表示方法等。物体的层次表示方法等。物体的层次表示方法等。53算法比较及适用情况算法比较及适用情况算法比较及适用情况算法比较及适用情况uu深度排序或深度排序或深度排序或深度排序或BSPBSPBSPBSP树树树树场景中表面沿视线分布较广,从而在深度上重叠较场景中表面沿视线分布较广,从而在深度上重叠较场景中表面沿视线分布较广,从而在深度上重叠较场景中表面沿视线分布较广,从而在深度上重叠较少;少;少;少;uu扫描线或区域细分扫描线或区域细分扫描线或区域细分扫描线或区域细分投影面上的表
43、面投影较少;投影面上的表面投影较少;投影面上的表面投影较少;投影面上的表面投影较少;uu深度缓存或八叉树深度缓存或八叉树深度缓存或八叉树深度缓存或八叉树几千个面以上场景,复杂场景表现出高性能;几千个面以上场景,复杂场景表现出高性能;几千个面以上场景,复杂场景表现出高性能;几千个面以上场景,复杂场景表现出高性能;uuBSPBSPBSPBSP树树树树使用不同观察参考点生成多个视图时较有效;使用不同观察参考点生成多个视图时较有效;使用不同观察参考点生成多个视图时较有效;使用不同观察参考点生成多个视图时较有效;uu八叉树或光线投射法八叉树或光线投射法八叉树或光线投射法八叉树或光线投射法场景包含曲面时;
44、八叉树可用于获得三维对象剖场景包含曲面时;八叉树可用于获得三维对象剖场景包含曲面时;八叉树可用于获得三维对象剖场景包含曲面时;八叉树可用于获得三维对象剖切面。切面。切面。切面。提高复杂场景可见性检测效率:提高复杂场景可见性检测效率:结合多种算法、并行技术,硬件实现结合多种算法、并行技术,硬件实现54第八章第八章第八章第八章 光照模型与面绘制算法光照模型与面绘制算法光照模型与面绘制算法光照模型与面绘制算法uu光照模型光照模型光照模型光照模型 图对象表面上单个点的光强度计算模型。用于对象表面某光照位置图对象表面上单个点的光强度计算模型。用于对象表面某光照位置图对象表面上单个点的光强度计算模型。用于
45、对象表面某光照位置图对象表面上单个点的光强度计算模型。用于对象表面某光照位置的颜色计算。的颜色计算。的颜色计算。的颜色计算。uu表面绘制算法表面绘制算法表面绘制算法表面绘制算法 使用光照模型为对象的所有投影表面位置确定像素颜色的过程。使用光照模型为对象的所有投影表面位置确定像素颜色的过程。使用光照模型为对象的所有投影表面位置确定像素颜色的过程。使用光照模型为对象的所有投影表面位置确定像素颜色的过程。55第八章第八章第八章第八章 主要内容主要内容主要内容主要内容uu光源与光照效果光源与光照效果光源与光照效果光源与光照效果 点光源,无穷远光源,方向光源,扩展光源点光源,无穷远光源,方向光源,扩展光
46、源点光源,无穷远光源,方向光源,扩展光源点光源,无穷远光源,方向光源,扩展光源 漫反射,镜面反射,透射效果,混合效果漫反射,镜面反射,透射效果,混合效果漫反射,镜面反射,透射效果,混合效果漫反射,镜面反射,透射效果,混合效果uu基本光照模型(局部光照模型)基本光照模型(局部光照模型)基本光照模型(局部光照模型)基本光照模型(局部光照模型) PhongPhongPhongPhong模型、模型、模型、模型、GouraudGouraud明暗处理明暗处理明暗处理明暗处理、Phong明暗处理、阴影明暗处理、阴影 考虑材质的模型扩展考虑材质的模型扩展考虑材质的模型扩展考虑材质的模型扩展uu光透射模型光透射
47、模型光透射模型光透射模型 WhittedWhittedWhittedWhitted光透射模型,光透射模型,光透射模型,光透射模型,HallHallHallHall光透射模型光透射模型光透射模型光透射模型uu全局光照明模型全局光照明模型全局光照明模型全局光照明模型 光线跟踪方法,辐射度光照模型光线跟踪方法,辐射度光照模型光线跟踪方法,辐射度光照模型光线跟踪方法,辐射度光照模型 uu绘制表面细节绘制表面细节绘制表面细节绘制表面细节 多边形表面,纹理映射,凹凸映射,帧映射多边形表面,纹理映射,凹凸映射,帧映射多边形表面,纹理映射,凹凸映射,帧映射多边形表面,纹理映射,凹凸映射,帧映射56基本光照模型
48、基本光照模型基本光照模型基本光照模型PhongPhongPhongPhong模型模型模型模型 uuPhongPhong光照模型模拟的情况:光照模型模拟的情况:光照模型模拟的情况:光照模型模拟的情况:光源假定为点光源;光源假定为点光源;光源假定为点光源;光源假定为点光源;环境光各向分布均匀;环境光各向分布均匀;环境光各向分布均匀;环境光各向分布均匀;只考虑物体对直接光照的反射作用,包括镜面反射、漫反射。所以只考虑物体对直接光照的反射作用,包括镜面反射、漫反射。所以只考虑物体对直接光照的反射作用,包括镜面反射、漫反射。所以只考虑物体对直接光照的反射作用,包括镜面反射、漫反射。所以也也也也称局部光照
49、模型。称局部光照模型。57PhongPhongPhongPhong光照模型光照模型光照模型光照模型 物体表面上一点物体表面上一点物体表面上一点物体表面上一点P P反射到视点的光强反射到视点的光强反射到视点的光强反射到视点的光强I I为:为:为:为:光反射方向光反射方向光反射方向光反射方向物体表面上的点物体表面上的点物体表面上的点物体表面上的点视线方向视线方向视线方向视线方向光线方向光线方向环境光的环境光的反射光强反射光强理想漫反射光强理想漫反射光强镜面反射光强镜面反射光强58PhongPhongPhongPhong模型的实现模型的实现模型的实现模型的实现作如下假设:作如下假设:作如下假设:作如
50、下假设:a)a)光源在无穷远处。即光线方向光源在无穷远处。即光线方向光源在无穷远处。即光线方向光源在无穷远处。即光线方向L L为常数;为常数;为常数;为常数;b)b)视点在无穷远处,即视线方向视点在无穷远处,即视线方向视点在无穷远处,即视线方向视点在无穷远处,即视线方向V V为常数;为常数;为常数;为常数;c)c)用用用用H H N N近似近似近似近似R R V V。H H为为为为L L和和和和V V的平分向量。的平分向量。的平分向量。的平分向量。结合结合结合结合RGBRGB颜色模型,颜色模型,颜色模型,颜色模型,PhongPhong光照模型实现如下:光照模型实现如下:光照模型实现如下:光照模
51、型实现如下:通过这些分量的值来调整颜色,以获得某种光照效通过这些分量的值来调整颜色,以获得某种光照效果。果。59PhongPhongPhongPhong光照模型的局限光照模型的局限光照模型的局限光照模型的局限 uu为经验模型,有较多误差;为经验模型,有较多误差;为经验模型,有较多误差;为经验模型,有较多误差;uu显示出的某些物体,如塑料,没有质感;显示出的某些物体,如塑料,没有质感;显示出的某些物体,如塑料,没有质感;显示出的某些物体,如塑料,没有质感;uu环境光是常量,没有考虑物体之间相互的反射光;环境光是常量,没有考虑物体之间相互的反射光;环境光是常量,没有考虑物体之间相互的反射光;环境光
52、是常量,没有考虑物体之间相互的反射光;uu镜面反射的颜色是光源颜色,与物体材料无关;镜面反射的颜色是光源颜色,与物体材料无关;镜面反射的颜色是光源颜色,与物体材料无关;镜面反射的颜色是光源颜色,与物体材料无关;uu镜面反射的计算在入射角很大时会产生失真;镜面反射的计算在入射角很大时会产生失真;镜面反射的计算在入射角很大时会产生失真;镜面反射的计算在入射角很大时会产生失真;u没有处理光的透射现象没有处理光的透射现象uu牛多边形网格模型牛多边形网格模型用用Phong模型绘制模型绘制用增量式光照模型绘制用增量式光照模型绘制60Vi增量式光照模型增量式光照模型明暗平滑处理明暗平滑处理 模模模模型改进基
53、本思想,得到对象面片表面像素渲染常用插值算法:型改进基本思想,得到对象面片表面像素渲染常用插值算法:型改进基本思想,得到对象面片表面像素渲染常用插值算法:型改进基本思想,得到对象面片表面像素渲染常用插值算法: 在每一个多边形的顶点处计算合适光强参数,然后在各多边形内部在每一个多边形的顶点处计算合适光强参数,然后在各多边形内部在每一个多边形的顶点处计算合适光强参数,然后在各多边形内部在每一个多边形的顶点处计算合适光强参数,然后在各多边形内部进行均匀插值,得到多边形的光滑颜色分布进行均匀插值,得到多边形的光滑颜色分布进行均匀插值,得到多边形的光滑颜色分布进行均匀插值,得到多边形的光滑颜色分布双线性
54、光强插值,双线性光强插值,双线性光强插值,双线性光强插值,例如例如例如例如GouraudGouraud顶点色彩插值模型;顶点色彩插值模型;顶点色彩插值模型;顶点色彩插值模型; 计算顶点计算顶点计算顶点计算顶点V V处法向量时,使用共享该顶点所有多边形表面法向量的处法向量时,使用共享该顶点所有多边形表面法向量的处法向量时,使用共享该顶点所有多边形表面法向量的处法向量时,使用共享该顶点所有多边形表面法向量的平均值平均值平均值平均值双线性法向插值,例如双线性法向插值,例如双线性法向插值,例如双线性法向插值,例如PhongPhong顶点法向量插值模型顶点法向量插值模型顶点法向量插值模型顶点法向量插值模
55、型.uu为使连续、相邻多边形呈现匀称光强为使连续、相邻多边形呈现匀称光强为使连续、相邻多边形呈现匀称光强为使连续、相邻多边形呈现匀称光强61光透射模型光透射模型光透射模型光透射模型n透射光:对于透明或半透明的物体,在光线与物体表面相交时,产透射光:对于透明或半透明的物体,在光线与物体表面相交时,产生反射与折射。生反射与折射。n获得透射效果主要方法:获得透射效果主要方法:n颜色调和法,不考虑透明体对光的折射以及透明物体本身的厚颜色调和法,不考虑透明体对光的折射以及透明物体本身的厚度。度。nWhitted光透射模型、光透射模型、Hall光透射模型光透射模型颜色调和模拟透明效果:颜色调和模拟透明效果
56、:62全局光照模型全局光照模型全局光照模型全局光照模型u针对以下问题:针对以下问题:更好地模拟光的折射、反射和阴影等;更好地模拟光的折射、反射和阴影等;表示物体间的相互光照明影响;表示物体间的相互光照明影响;模拟多个透明体间的复杂光照明现象等。模拟多个透明体间的复杂光照明现象等。u主要方法:主要方法:光线跟踪光线跟踪辐射度辐射度l局部光照明模型:仅处理光源直接照射物体表面的模型;局部光照明模型:仅处理光源直接照射物体表面的模型;l全局光照明模型:还处理物体之间光照的相互作用的模型,也称整体全局光照明模型:还处理物体之间光照的相互作用的模型,也称整体光照模型。光照模型。63光线跟踪方法光线跟踪方
57、法光线跟踪方法光线跟踪方法光线跟踪过程:光线跟踪过程:1.由视点(投影参考点)出发,跟踪一束光线。跟踪方向与光传播的由视点(投影参考点)出发,跟踪一束光线。跟踪方向与光传播的方向相反;方向相反;2.光线穿过像素进入包含多个对象的场景中;光线穿过像素进入包含多个对象的场景中;3.然后经多次反射和透射。然后经多次反射和透射。64光线跟踪方法的基本过程光线跟踪方法的基本过程光线跟踪方法的基本过程光线跟踪方法的基本过程65光线跟踪方法的实现光线跟踪方法的实现光线跟踪方法的实现光线跟踪方法的实现由场景中的反射和折射光线,构造二叉光线跟踪树:由场景中的反射和折射光线,构造二叉光线跟踪树:左:左:反射分支反
58、射分支右:右:折射分支折射分支66光线跟踪方法的实现光线跟踪方法的实现光线跟踪方法的实现光线跟踪方法的实现RayTracing(start,direction,weight,color)if(weightMinWeight)color=black;else计算光线与所有物体的交点中离计算光线与所有物体的交点中离start最近的点;最近的点;if(没有交点没有交点)color=black;elseIlocal=在交点处用局部光照模型计算出的光强;在交点处用局部光照模型计算出的光强;计算反射方向计算反射方向R;RayTracing(最近的交点最近的交点,R,weight*Wr,Ir);计算折射方向
59、计算折射方向T;RayTracing(最近的交点最近的交点,T,weight*Wt,It);color=Ilocal+KsIr+KtIt;光线起点为光线起点为start,光线方向为,光线方向为direction,光线衰减权值,光线衰减权值weight。返回光线方向上的颜色值。返回光线方向上的颜色值color。67光线跟踪算法的相关问题光线跟踪算法的相关问题光线跟踪算法的相关问题光线跟踪算法的相关问题光线与物体的求交是光线跟踪算法的核心,主要包括:光线与物体的求交是光线跟踪算法的核心,主要包括:光线与球的求交光线与球的求交光线与多边形求交光线与多边形求交光线与二次曲面求交光线与二次曲面求交光线跟
60、踪算法的加速:光线跟踪算法的加速:自适应深度控制自适应深度控制包围盒及层次结构包围盒及层次结构三维三维DDA算法算法空间八叉树剖分技术空间八叉树剖分技术第第9章章图形用户界面和交互输入方法图形用户界面和交互输入方法InteractiveInputMethods&GraphicalUserInterfacesl逻辑交互输入设备(LogicalInteractiveInputDevice)l基本交互任务与技术l组合交互任务与技术lOpenGL支持交互输入设备的函数lOpenGL菜单功能函数68;.69基本交互任务与技术基本交互任务与技术基本交互任务基本交互任务用户输入到计算机的具有明确意义的最小信
61、息单元。有四种:定位、用户输入到计算机的具有明确意义的最小信息单元。有四种:定位、文本、选择、取值。文本、选择、取值。1.定位任务定位任务(Position)向应用程序输入点的位置。向应用程序输入点的位置。2.文本任务(文本任务(Text)向应用程序输入一个字符串。向应用程序输入一个字符串。如向字处理软件输入文本是文本任务,而输入一个命令名不是文本任务而是选如向字处理软件输入文本是文本任务,而输入一个命令名不是文本任务而是选择任务。择任务。3.选择任务(选择任务(Select)从一个选择集(命令、属性、对象类型、对象实例)中从一个选择集(命令、属性、对象类型、对象实例)中挑选出一个元素。挑选出
62、一个元素。相对定长选择集的选择技术:菜单选择技术;变长选择集的选择技术:按名字选择、按位置选择。4.取值任务(取值任务(Quantify)在某最小值与最大值之间指定一个数值。在某最小值与最大值之间指定一个数值。70组合交互任务与技术组合交互任务与技术组合交互任合交互任务基本交互任基本交互任务组合构成的信息合构成的信息输入入单元,主要有三种元,主要有三种:1. 构造技术(Construction Technique):构造需要两个或多个定位的对象。如一个作图过程l常用构造技术:拖拖曳曳(DragDrag)、约约束束(ConstraintConstraint)、网网格格(GridGrid)、橡橡皮
63、皮筋筋(Rubber-Rubber-BandBand)、引力场()、引力场(Gravity fieldGravity field)2. 对话框(Dialogue Box):指定多个参数。3. 动态控制(Dynamic Manipulation):修改已生成的图形对象。71图形用户界面图形用户界面GUI(GraphicalUserInterface)lGUI要素要素窗口、图标(应用图标、控制或命令图标)、菜单、滑动块、按键lGUI一般设计原则一般设计原则按应用的语言来表达用户对话的信息适应多种熟练程度的用户相关性、一致性回退、出错处理、确认反馈,对用户的操作及时响应减少记忆量,应用简便72图形用
64、户界面图形用户界面GUI举例举例一个图形应用软件的主界面一个图形应用软件的主界面(窗口、菜单、图标、对话框、光标(窗口、菜单、图标、对话框、光标)73第十章第十章颜色模型颜色模型l颜色特性颜色特性物理特性视觉/心理学特性l常用颜色模型常用颜色模型74物理学上的颜色特性描述:物理学上的颜色特性描述:l主频率主频率(DominantFrequency)或主波长(或主波长(DominantWavelength):观察光线所见):观察光线所见色光的主导波长。色光的主导波长。l纯度纯度(Purity):该颜色主波长的光与白色光的比例。:该颜色主波长的光与白色光的比例。l明度或灰度(明度或灰度(Lumin
65、ance):光的能量或光强。):光的能量或光强。f75颜色的三个视觉、心理学特性:颜色的三个视觉、心理学特性:l1854年,格拉斯曼年,格拉斯曼(H.Grassmann)发表颜色定律,提出从视觉角度颜色包含三个要素:发表颜色定律,提出从视觉角度颜色包含三个要素:色调(Hue):一种颜色区别于其他颜色的因素,既平常所说的红、绿、蓝、紫等。对应于物理特性的主波长(主频率);饱和度(Saturation):接近光谱颜色(单色)的程度。对应于物理特性的纯度;亮度(Lightness):光对视觉的刺激强度。对应于物理特性的明度,即光能E。另外有时也用一些混合特征描述,如:另外有时也用一些混合特征描述,如
66、:色度色度包含色调和饱和度两种特征。包含色调和饱和度两种特征。76颜色模型机制的建立颜色模型机制的建立l基于光谱能量分布来定义颜色基于光谱能量分布来定义颜色非常麻烦有“异谱同色”现象l基于视觉感受基于视觉感受色调、饱和度、亮度色调、饱和度、亮度l基于视觉的生理基础基于视觉的生理基础三色学说三色学说1862年,Helmhotz提出颜色视觉生理机制学说。到现在,三色原理已经成为颜色科学中最重要的原理和学说。77三色学说(三刺激理论三色学说(三刺激理论TristimulusTheory)叠加叠加三种视觉细胞共同作用,使人产生不同的颜色感觉。三种视觉细胞共同作用,使人产生不同的颜色感觉。三种锥体视觉细
67、胞光谱灵敏度曲线三种锥体视觉细胞光谱灵敏度曲线视觉光照效率灵敏度曲线视觉光照效率灵敏度曲线78基于三色学说的基于三色学说的CIE_RGB颜色模型颜色模型l与三色学对应,与三色学对应,CIE(国际照明委员会)选取了标准红、绿、蓝:(国际照明委员会)选取了标准红、绿、蓝:R R1 1700nml基色基色(primarycolor)(原色)一般取主频率颜色,有如下性质的三种颜色可以作为基色:(原色)一般取主频率颜色,有如下性质的三种颜色可以作为基色:用适当比例混合这三种颜色,可以获得白色;三种颜色中的任意两种的组合都不能生成第三种颜色。l颜色空间颜色空间(colorgamut):通过基色可产生的所有
68、颜色的组合,也称颜色域、颜色范围。):通过基色可产生的所有颜色的组合,也称颜色域、颜色范围。G G2 2546nmB B3 3435.8nm一组基色一组基色79基于基于RGB颜色模型的颜色匹配颜色模型的颜色匹配任意颜色任意颜色c匹配公式:匹配公式:c=r R+g G+b Br、g、b:权值,即颜色匹配中所权值,即颜色匹配中所需要的需要的R、G、B三基色的三基色的相对量,也称三刺激值。相对量,也称三刺激值。显示光谱颜色所需的显示光谱颜色所需的RGB基色量基色量颜颜色色匹匹配配RGB相相对对量量fRfGfB生成光谱色的三基色颜色匹配函数:生成光谱色的三基色颜色匹配函数:80RGB正六边形正六边形R
69、GB颜色域的二维模型颜色域的二维模型互补色:混合后产生白色光的两种颜互补色:混合后产生白色光的两种颜色。色。81RGB立方体立方体RGB颜色模型的三维颜色空间颜色模型的三维颜色空间R G B82RGB颜色模型特点颜色模型特点l颜色空间采用三维直角坐标系颜色空间采用三维直角坐标系RGB颜色立方体;颜色立方体;l通常用于彩色光栅图形显示设备;通常用于彩色光栅图形显示设备;lRGB颜色模型的颜色域取决于显示设备荧光点的颜色特性,与硬件相关;颜色模型的颜色域取决于显示设备荧光点的颜色特性,与硬件相关;l不能组合生成所有可见的颜色。不能组合生成所有可见的颜色。1931年,年,CIE提出了一种理论颜色模型
70、提出了一种理论颜色模型XYZ颜色模颜色模型。型。83CMY颜色模型颜色模型l以红、绿、蓝的补色青(以红、绿、蓝的补色青(Cyan)、)、品红(品红(Magenta)、黄)、黄(Yellow)为基色构成)为基色构成CMY颜色颜色模型;模型;l减性基色系统;减性基色系统;l常用于从白光中滤去某种颜色;常用于从白光中滤去某种颜色;l应用于某些印刷硬拷贝设备的颜色应用于某些印刷硬拷贝设备的颜色处理。处理。YMCBGR84HSV颜色模型颜色模型lHSV:色调色调hue,饱和度饱和度saturation,值值valuel对应于画家的配色方法:在一种纯色中加对应于画家的配色方法:在一种纯色中加入白色改变色泽
71、,加入黑色改变明暗,同入白色改变色泽,加入黑色改变明暗,同时加入不同比例的白、黑得到不同色调的时加入不同比例的白、黑得到不同色调的颜色。颜色。色泽色泽明暗明暗SVH85HSV颜色模型,颜色模型,圆锥形表示圆锥形表示lV取值:取值:0到到1;lS取值:取值:0到到1;lH由绕由绕V轴的旋转角给定;轴的旋转角给定;l互补色相差互补色相差180度;度;l圆锥顶点圆锥顶点V=0,H和和S无定义,代表黑色;无定义,代表黑色;l圆锥顶面中心圆锥顶面中心S=0,V=1,H无定义,无定义,代表白色;代表白色;l任何任何V=1,S=1的颜色都是纯色。的颜色都是纯色。黑黑白白86HSL颜色模型,纺锤体表示颜色模型
72、,纺锤体表示lHSL:色调(色调(hue)、饱和度)、饱和度(saturation)和亮度和亮度(lightness);l垂直轴线:白黑系列亮度变化;垂直轴线:白黑系列亮度变化;l水平的圆周:色调;水平的圆周:色调;l圆周上不同角度的点:不同色调颜圆周上不同角度的点:不同色调颜色;色;l从圆心向圆周过渡:同一色调下饱从圆心向圆周过渡:同一色调下饱和度提高;和度提高;l在纺锤体的一个平面圆形上,色调在纺锤体的一个平面圆形上,色调和饱和度不同,而亮度相同。和饱和度不同,而亮度相同。87第十一章第十一章虚拟现实技术虚拟现实技术l虚拟现实(虚拟现实(VR,VirtualReality)技术概述)技术概
73、述VR概念、VR系统体系结构、特征lVR输入输入/输出设备(接口输出设备(接口Interfaces)lVR系统的实现类型系统的实现类型沉浸式VR系统桌面式VR系统增强式VR系统分布式VR系统lVR的相关软件的相关软件建模工具软件(3DMAX、MultiGenCreator)开发工具软件(WTK、VEGA)VRML(虚拟现实建模语言)lVR技术的研究与应用技术的研究与应用88虚拟现实与虚拟现实系统虚拟现实与虚拟现实系统lVRVR技术:以计算机技术(技术:以计算机技术(CGCG)为核心,生成逼真的视、听、触觉等一体化的虚拟)为核心,生成逼真的视、听、触觉等一体化的虚拟环境,用户利用接口、交互设备以
74、自然的方式与虚拟世界中的物体进行交互,从环境,用户利用接口、交互设备以自然的方式与虚拟世界中的物体进行交互,从而产生身临其境的感受和体验。而产生身临其境的感受和体验。视觉视觉光学投影仪光学投影仪CRTLCD(较成熟)(较成熟)听觉听觉SoundSynthesizer喇叭喇叭耳机耳机嗅觉嗅觉 ?SimpleSmell味觉味觉?触觉触觉力反馈装置力反馈装置数据衣服数据衣服风扇等风扇等内耳感知内耳感知动平台动平台VR/Virtual Environment带给人们多种感受:带给人们多种感受:89VR技术的特征技术的特征l1993年,美年,美BurdeaG.和和PhilippeCoiffet在在“Vi
75、rtualRealitySystemandApplications”文章中提出文章中提出“VR技技术三角形术三角形”:交互性交互性Interactivity沉浸性沉浸性Immersion想象性想象性Imagination3I90VR系统的体系结构系统的体系结构VR EngineVR引擎引擎User InterfacesI/O Devices接口,设备接口,设备User用户用户Task任务任务Software & Database软件和数据库软件和数据库PC+图形卡图形卡或图形工作站或图形工作站91VR系统的用户接口与输入系统的用户接口与输入/输出设备输出设备lGUI(Graphical Use
76、r Interfaces)l多模式交互多模式交互Multimodal interaction语音识别/产生Speechrecognition/generation手势、姿态识别/跟踪Gesturerecognition/Tracking触觉反馈(力、温度、触感等)Hapticfeedbackl新的交互模拟新的交互模拟New interaction metaphors数字助手Digitalassistants化身Avatarsl新的输出设备新的输出设备Newoutputdevices个人显示设备(Wearablecomputers、Handhelddevices、头盔显示器HMD、立体监视器,立
77、体LCD透镜)大型显示设备(多屏显示器、基于投影仪的显示器)92l特点:特点:大视场LargeFOV多用户MultipleUser舒适性ComfortablelCAVE系统的组成结构:系统的组成结构:沉浸式沉浸式VR系统:洞穴式自动虚拟环境系统:洞穴式自动虚拟环境CAVE图形工作站图形工作站投影仪投影仪Projector93桌面式桌面式VR系统系统DesktopVRSystemlCheap,EasylMultiUserlLimitedImmersion/FOV94增强式增强式VR系统系统l真实环境与虚拟环境融为一体,真实世界和虚拟世界在三维空间中整合真实环境与虚拟环境融为一体,真实世界和虚拟世
78、界在三维空间中整合l实现实时人机交互实现实时人机交互95分布式分布式VR系统系统lVR技术技术+网络技术网络技术l特点特点多流水线同步(多流水线图形卡,多流水线同步(多流水线图形卡,PC集群集群)各用户具有共享的虚拟工作空间各用户具有共享的虚拟工作空间虚拟实体的行为真实感虚拟实体的行为真实感支持多用户异地实时交互,共享时钟支持多用户异地实时交互,共享时钟资源共享资源共享VR工作站工作站1广域网广域网/局域网局域网VR工作站工作站2Web3D技技术:Java3D、VRML.96VR开发软件开发软件l通用建模软件通用建模软件3DSMAX,MAYAAutoCAD,Pro/El专用建模工具专用建模工具
79、MultiGenCreator(MultiGen-Paradigm公司,创建视景仿真的交互式实时三维模型,用于战场仿真、城市仿真、游戏、计算可视化.)SiteBuilder3D、PolyTransl开发工具软件开发工具软件WTK(WorldToolKit,Sense8公司。实时、跨平台、支持基于网络的分布式虚拟环境开发,支持多界面设备.)VEGA(实时视景、声音仿真,C语言API,支持多处理器.97Web3D技术与软件技术与软件lWeb3D:互联网上的:互联网上的3D图形及动画技术图形及动画技术l实现技术与软件实现技术与软件VRML、Cult3D、Viewpoint、Java3D、OpenWo
80、rld.X3D(Extensible3D)lWeb3D图形制作工具及实用程序基本功能:图形制作工具及实用程序基本功能:创建与编辑三维场景模型优化、压缩场景模型文件,使其适合在网上传输增加图形交互性增加或改进图形/图像质量文件加密.98虚拟现实建模语言虚拟现实建模语言VRML(VirtualRealityModelingLanguage)l目标:实现三维立体网络世界、动态交互与智能感知目标:实现三维立体网络世界、动态交互与智能感知l发展:发展:OpenInventor(1992)VRML1.0(1994)VRML2.0(1996)VRML97(1997)lVRML基本特点与功能基本特点与功能简便
81、;文件容量小,适宜网络传输;创建三维形体与场景;人机交互;可嵌入Java、JavaScript等程序;多媒体功能,通过传感器节点实现用户与虚拟场景的智能交互.需要相应VRML浏览器或相关插件支持99VRML场景的编辑与浏览场景的编辑与浏览lVRML编辑器编辑器VrmlPad、CosmoWorld、Internet3DSpaceBuilderlVRML浏览器插件浏览器插件CosmoPlay、BSContact、Cortona、WorldView100VR应用领域应用领域ApplicationAreasl产品虚拟设计、制造产品虚拟设计、制造VirtualPrototypingl产品、设备维护产品、
82、设备维护Maintenancel医疗医疗Medicinel导航导航Guidancel娱乐娱乐Entertainmentl电子学习电子学习、培训、培训e-Learningl其他领域其他领域Otherareas101OpenGL专题专题广泛应用的通用图形软件包广泛应用的通用图形软件包l基本语法与结构基本语法与结构l相关函数库相关函数库l与通用编程语言(如与通用编程语言(如C/C+)的关系(语言绑定)的关系(语言绑定)lOpenGL函数列举函数列举l程序实例分析程序实例分析OpenGL资源:资源:102OpenGL的一些特点的一些特点l广泛应用的广泛应用的CGAPI,各种控制指令与图形函数的集合,各
83、种控制指令与图形函数的集合是目前主要的二、三维交互式图形应用程序开发环境,已成为业界最受推荐的图形应用编程接口(CGAPI)l跨平台性跨平台性UNIX、MacOS、OS/2、WindowsNT、Windows9x、Linux,也能够与其中绝大多数的窗口系统一起工作l高性能图形生成能力高性能图形生成能力l稳定性,伸缩性,易使用性稳定性,伸缩性,易使用性l网络透明性(支持网络应用)网络透明性(支持网络应用)允许一个运行在工作站上的进程,通过网络在远程工作站上显示图形。103OpenGL的组成:相关库的组成:相关库基本函数库基本函数库GLglClear,glCopyPixels与硬件无关,与硬件无关
84、,核心库核心库描述图元、属性、几何变换、描述图元、属性、几何变换、观察变换观察变换实用函数库实用函数库GLUgluOrtho2D控制、操作类函数;控制、操作类函数;生成复杂对象,处理表面绘制生成复杂对象,处理表面绘制操作,操作,二次曲面、二次曲面、NURBS曲曲线曲面,矩阵管理,指定二维线曲面,矩阵管理,指定二维观察参数观察参数实用函数工具包实用函数工具包GLUTglutInit, glutDisplayFunc生成某些三维形体;管理显示生成某些三维形体;管理显示窗口,与屏幕窗口交互,负责窗口,与屏幕窗口交互,负责与计算机系统接口,如输入与计算机系统接口,如输入/输出函数输出函数104Open
85、GL的一些窗口系统相关库的一些窗口系统相关库lGLX:UNIX、Linux系统支持系统支持OpenGL的编程接口(的编程接口(X窗口系统扩充)窗口系统扩充)lWGL:Win32支持支持lAppleGL:AppleMacOS支持支持lPGL:IBMOS/2支持支持l在在Windows中,中,OpenGL相关库以动态链接库相关库以动态链接库DLL的形式存在:的形式存在:opengl32.lib:OpenGL库,头文件:gl.hglu32.lib:实用库,头文件:glu.hglut.lib:实用工具库,头文件:glut.h(早期glaux.lib:辅助库)105glext.h,wglext.h,gl
86、ut.hlglext.h专为Windows开发人员提供。包含了OpenGL1.1版本以后的标准OpenGL扩展和许多厂商特定的OpenGL扩展,如一些常量和函数原型等。lwglext.h包含一些Windows特有的扩展。lglut.h替代早期的AUX函数库,包含新功能(如复杂三维形体,管理显示窗口,与屏幕窗口交互,输入/输出函数)#include106OpenGL图形函数与语言绑定图形函数与语言绑定l通用或标准的通用或标准的图形函数图形函数定义为独立于任何程序设计语言的一组规范。l语言绑定语言绑定(Languagebinding)语言绑定指图形函数集在特定语言中的实现描述(由ISO制定),给出
87、该语言访问各种图形函数的语法。定义目标:最佳使用有关的语言能力、处理好数据类型,解决参数传递、出错处理等各种问题。OpenGL已有C、C+、Ada、Fortran、Pascal、Java等语言绑定。107OpenGL基本语法基本语法函数名函数名以以C、C+版本为例版本为例l基本函数基本函数gl为函数名前缀,每一组成词第一字母大写,如:glBegin,glClearColor()l实用函数实用函数glu为函数名前缀,如:gluSphere()l实用工具函数实用工具函数glut为函数名前缀,如:glutDisplayFunc()108OpenGL基本语法基本语法数据类型和格式数据类型和格式l一些函
88、数名后接不同的后缀以支持不同的数据类型和格式。如定义颜色值一些函数名后接不同的后缀以支持不同的数据类型和格式。如定义颜色值glColor*():glColor3b()3表示函数带有三个参数,b表示参数是字节型glColor3d(.)d表示参数是双精度浮点型glColor3f(.)f表示单精度浮点型glColor3bv(.)v表示参数以向量形式出现lOpenGL的内置数据类型,例如:的内置数据类型,例如:GLbyte以GL开头,后面小写表示标准数据类型名GLshort,GLint,GLfloat,GLdouble109OpenGL基本语法基本语法常量常量l基本常量(也称符号常量或原语)基本常量(
89、也称符号常量或原语)以GL_开头,如GL_LINE_LOOPl实用常量实用常量以GLU_开头,如GLU_FILL。l实用工具常量实用工具常量以GLUT_开头,如GLUT_KEY_DOWNl特殊常量(定义数据类型)特殊常量(定义数据类型)如GLfloat,GLvoid,相当于C中的float和void。例如,在gl.h文件中可以看到以下定义:typedeffloatGLfloat;typedefvoidGLvoid;110OpenGL的状态机制的状态机制l状态机制(状态机):可以设置各种状态或模式,这些状态或模式在重新改变前状态机制(状态机):可以设置各种状态或模式,这些状态或模式在重新改变前一
90、直有效一直有效例如,当前颜色是一个状态变量,在这个状态改变之前,绘制的每个象素都使用该颜色,直到当前颜色被设置为其它颜色为止。lOpenGL中使用的状态机制,如:中使用的状态机制,如:颜色模式、投影模式、单双显示缓存区的设置、背景色的设置、光源的位置和特性l设置、查询状态,如:设置、查询状态,如:函数glEnable(),glDisable(),将状态变量设置成有效或无效状态。函数glGetBooleanv()、glGetDouble()、glGetFloatv()、glGetIntegerv()等,获取某个状态变量的值。111包含包含OpenGL函数的图形程序编译、运行流程函数的图形程序编译
91、、运行流程包含包含OpenGL命令命令OpenGLDLLOpenGL内核函数内核函数操作系统服务操作系统服务图形卡驱动图形卡驱动图形卡图形卡显示器显示器应用程序应用程序112使用使用GLUT创建显示窗口创建显示窗口l初始化,如:初始化,如:glutInit(&argc,argv);l给定一个标题,如:给定一个标题,如:glutCreateWindow(“AnExampleOpenGLProgram”);l将图赋给显示窗口(图形调用),如:将图赋给显示窗口(图形调用),如:glutDisplayFunc(lineSegment);l激活窗口及图,如:激活窗口及图,如:glutMainLoop()
92、;可以利用glut函数,改变窗口默认的位置、大小、缓存类型、颜色模型等113OpenGL的输出图元函数的输出图元函数glVertex*选择一坐标位置选择一坐标位置,该函数在该函数在glBegin/glEnd之间之间glBegin(GL_POINT);绘出一个或多个点绘出一个或多个点,每个都在每个都在glVertex函数中指定函数中指定glBegin(GL_LINES);显示一组直线段显示一组直线段,其端点坐标在其端点坐标在glVedex函数中指定函数中指定glBegin(GL_LINE-STRIP);显示用与显示用与GL_LINES相同的结构所指定的折线相同的结构所指定的折线gIBegin(G
93、L_LINE-LOOP);显示用与显示用与GL_LINES相同的结构所指定的封闭折线相同的结构所指定的封闭折线glRect*显示显示xy平面上的一个填充区平面上的一个填充区glBegin(GL-POLYGON);显示一个填充多边形显示一个填充多边形,其顶点在其顶点在glVertex中给出中给出glBegin(GL-TRIANGLES);显示一组填充三角形显示一组填充三角形,其描述结构与其描述结构与GL-POLYGON相同相同114OpenGL填充区属性函数与反走样函数填充区属性函数与反走样函数glEnable(GL_POLYGON_STIPPLE);/激活填充模式激活填充模式glPolygon
94、Stipple(pattern);/指定填充模式图案指定填充模式图案glEdgeFlag;/将填充多边形边标志设为将填充多边形边标志设为GL_TRUE或或GL_FALSE来确定一条边的显示状来确定一条边的显示状态。态。glEnable(primitiveType);/激活激活OpenGL的反走样子程序的反走样子程序115OpenGL属性组属性组(attributegroup)l属性和其他状态参数按属性组进行组织,例如:属性和其他状态参数按属性组进行组织,例如:点属性组,线属性组,多边形属性组glPushAttrib(attrGroup);/保存一个指定属性组所有的参数保存一个指定属性组所有的参
95、数glPopAttrib();/将属性栈的所有值进行重建将属性栈的所有值进行重建例如:例如:glPushAttrib(GL_POINT_BIT|GL_LINE_BIT|GL_POLYGON_BIT);116基本的基本的OpenGL几何变换函数几何变换函数glTranslate*(tx,ty,tz);/构造构造44的平移矩阵,例如:的平移矩阵,例如:glTranslatef(25.0,-10.0,0.0);/将随后定义的坐标位置在x方向平移25,在y方向平移-10glRotate*(theta,vx,vy,vz);/构造构造44的旋转矩阵,例如:的旋转矩阵,例如:glRotatef(90.0,0
96、.0,0.0,1.0);/设定绕z轴旋转90的矩阵glScale*(sx,sy,sz);/构造相对于坐标原点的构造相对于坐标原点的44缩放矩阵,例如:缩放矩阵,例如:glScalef(2.0,-3.0,1.0);/x方向缩放2倍,y方向缩放3倍,且相对于xz平面反射OpenGL几何变换函数(子程序)统一建立几何变换函数(子程序)统一建立44的变换矩阵,对调用的变换矩阵,对调用该函数之后的对象进行变换。该函数之后的对象进行变换。117OpenGL矩阵操作函数矩阵操作函数glMatrixMode();/指定一个当前矩阵(几何指定一个当前矩阵(几何-观察、投影、纹理或颜色变换),例如:观察、投影、纹
97、理或颜色变换),例如:glMatrixMode(GL_MODELVIEW);/指定当前矩阵是一个44的建模几何-观察矩阵(GL_MODELVIEW是该函数的默认变量)glMatrixMode(GL_PROJECTION);glLoadIdentity();/设定当前矩阵为单位矩阵设定当前矩阵为单位矩阵glLoadMatrix*(elements);/为当前矩阵元素赋值为当前矩阵元素赋值glMultMatrix*(otherElements);/将指定矩阵与当前矩阵合并(矩阵乘)将指定矩阵与当前矩阵合并(矩阵乘)118OpenGL矩阵栈有关函数矩阵栈有关函数glGetIntegerv(GL_MA
98、X_MODELVIEW_STACK_DEPTH,stackSize);/获取建模观察获取建模观察栈的最大深度栈的最大深度glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH,numMats);/获取建模观察获取建模观察栈中矩阵数目栈中矩阵数目glPushMatrix();/复制栈顶矩阵,并将其存入第二个栈位置复制栈顶矩阵,并将其存入第二个栈位置glPopMatrix();/删除栈顶矩阵,并将第二位置矩阵移到栈顶删除栈顶矩阵,并将第二位置矩阵移到栈顶gluOrtho2D/指定二维世界坐标系统指定二维世界坐标系统119OpenGL多面体多面体(polyhedron)
99、函数函数lOpenGL多边形填充函数多边形填充函数lGLUT规则多面体函数规则多面体函数例如:例如:glBegin(GL_POLYGON);glVertex*(p1);glVertex*(p2);.glEnd();glutSolidCube(edgeLength);或:或:120GLUT中的中的10个规则多面体函数个规则多面体函数glut多面体函数多面体函数规则多面体规则多面体glutWireTetrahedron线框三棱锥(四面体)线框三棱锥(四面体)glutSolidTetrahedron实体三棱锥实体三棱锥glutWireCube线框立方体线框立方体glutSolidCube实体立方体实
100、体立方体glutWireOctahedron线框八面体线框八面体glutSolidOctahedron实体八面体实体八面体glutWireDodecahedron线框十二面体线框十二面体glutSolidDodecahedron实体十二面体实体十二面体glutWireIcosahedron线框二十面体线框二十面体glutSolidIcosahedron实体二十面体实体二十面体121GLUT二次和三次曲面函数二次和三次曲面函数Glut二次二次/三次曲面函数三次曲面函数二次二次/三次曲面三次曲面glutWireSphere线框球面线框球面glutSolidSphere实体球面实体球面glutWir
101、eCone线框圆锥面线框圆锥面glutSolidCone实体圆锥面实体圆锥面glutWireTorus线框环面线框环面glutSolidTorus实体环面实体环面glutWireTeapot线框三次曲面茶壶线框三次曲面茶壶glutSolidTeapot实体三次曲面茶壶实体三次曲面茶壶122OpenGLOpenGLOpenGLOpenGL可见性检测函数举例可见性检测函数举例可见性检测函数举例可见性检测函数举例多边形剔除:多边形剔除:多边形剔除:多边形剔除:glEnable (GL_CULL_FACE);glEnable (GL_CULL_FACE);glCullFace (mode); /mod
102、eglCullFace (mode); /mode可设为可设为可设为可设为GL_BACK(GL_BACK(消除后向面),或消除后向面),或消除后向面),或消除后向面),或GL_FRONTGL_FRONT,或,或,或,或GL_FRONT_AND_BACKGL_FRONT_AND_BACKglDisable (GL_CULL_FACE);glDisable (GL_CULL_FACE);设置深度缓存:设置深度缓存:设置深度缓存:设置深度缓存:glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitDisplayMode
103、(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); / /初始化初始化初始化初始化glClear (GL_DEPTH_BUFFER_BIT); /glClear (GL_DEPTH_BUFFER_BIT); /深度缓存值初始化,设为最大值深度缓存值初始化,设为最大值深度缓存值初始化,设为最大值深度缓存值初始化,设为最大值1.01.0123OpenGLOpenGL可见性检测函数举例可见性检测函数举例可见性检测函数举例可见性检测函数举例线框面可见性:线框面可见性:线框面可见性:线框面可见性:glPolygonMode (GL_FRONT_AND_BACK, GL_LINE
104、);/ glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);/ 图形对象的线框图形对象的线框图形对象的线框图形对象的线框显示显示显示显示运用深度提示函数建立雾气效果:运用深度提示函数建立雾气效果:运用深度提示函数建立雾气效果:运用深度提示函数建立雾气效果:glEnable (GL_FOG)glEnable (GL_FOG)glFogi (GL_FOG_MODE, GL_LINEAR);glFogi (GL_FOG_MODE, GL_LINEAR);124计时器函数计时器函数计时器函数计时器函数- - - -可以实现动画效果可以实现动画效果可以实现动画效果可以实
105、现动画效果glutTimerFuncglutTimerFuncglutTimerFuncglutTimerFuncuu目的:注册一个回调函数,当指定时间值到期后由目的:注册一个回调函数,当指定时间值到期后由目的:注册一个回调函数,当指定时间值到期后由目的:注册一个回调函数,当指定时间值到期后由GLUTGLUTGLUTGLUT调用。调用。调用。调用。uu语法:语法:语法:语法: void glutTimerFunc (unsigned int msecs, (*func) (int value), int void glutTimerFunc (unsigned int msecs, (*fun
106、c) (int value), int void glutTimerFunc (unsigned int msecs, (*func) (int value), int void glutTimerFunc (unsigned int msecs, (*func) (int value), int value);value);value);value);当指定时间值到期当指定时间值到期后被调用的函数名后被调用的函数名回调函数执行时,回调函数执行时,传递给函数的用传递给函数的用户指定的值户指定的值125OpenGLOpenGL光照和表面绘制函数光照和表面绘制函数光照和表面绘制函数光照和表面绘制函
107、数glLight/指定一个光源特征值;指定一个光源特征值;glEnable(lightName)/激活一个光源;激活一个光源;glEnable(GL_LIGHTING)/激活激活OpenGL光源;光源;glLightModel/指定全局光照参数值;指定全局光照参数值;glMaterial/指定光学表面值;指定光学表面值;glFog/指定雾气参数,用指定雾气参数,用glEnable激活雾气效果;激活雾气效果;glColor4f(R,G,B,A)/模拟透明表面,指定模拟透明表面,指定alpha值;值;glShadeModel/指定指定Gouraud表面绘制或单色表面绘制;表面绘制或单色表面绘制;g
108、lTexImage1D/为建立一维纹理空间指定参数(用为建立一维纹理空间指定参数(用glEnable激活纹理);激活纹理);glTexImage2D/为建立二维纹理空间指定参数;为建立二维纹理空间指定参数;glTexImage3D/为建立三维纹理空间指定参数为建立三维纹理空间指定参数126OpenGL的交互输入函数:的交互输入函数:glutMouseFuncglutMotionFuncglutPassiveMotionFuncglutKeyboardFuncglutSpecialFunc/指定当鼠标按键按下时调用的鼠标回调函数指定当鼠标按键按下时调用的鼠标回调函数/指定当鼠标光标移动并且鼠标按
109、键按下时调用的鼠标指定当鼠标光标移动并且鼠标按键按下时调用的鼠标回调函数回调函数/指定当鼠标光标移动并且鼠标按键未按下时调用的鼠指定当鼠标光标移动并且鼠标按键未按下时调用的鼠标回调函数标回调函数/指定当键盘上的标准键按下时调用的键盘回调函数指定当键盘上的标准键按下时调用的键盘回调函数/指定当键盘上的特殊功能键按下时调用的键盘回调函指定当键盘上的特殊功能键按下时调用的键盘回调函数数127GLUT鼠标函数鼠标函数/子程序子程序voidmouseFunc(GLintbutton,GLintaction,GLintxMouse,GlintyMouse);/鼠标鼠标回调函数。回调函数。button=GL
110、UT_LEFT_BUTTON/GLUT_MIDDLE_BUTTON/GLUT_RIGHT_BUTTONaction=GLUT_DOWN/GLUT_UP(xMouse,yMouse):鼠标光标相对于窗口左上角的位置坐标鼠标光标相对于窗口左上角的位置坐标glutMouseFunc(mouseFunc);/指定指定当当鼠标鼠标光标在窗口内,并且鼠标按键按下或松开时,光标在窗口内,并且鼠标按键按下或松开时,调调用的函数用的函数128GLUT鼠标函数鼠标函数/子程序子程序voidfuncDoSomething(GLintxMouse,GlintyMouse);glutMotionFunc(funcDoS
111、omething);/指定当鼠标光标移动并且指定当鼠标光标移动并且一个或多个一个或多个鼠标按键按下鼠标按键按下时调用的鼠标回调函数时调用的鼠标回调函数glutPassiveMotionFunc (funcDoSomethingElse); /指定当鼠标光标移动指定当鼠标光标移动,鼠标按键未鼠标按键未按下时调用的鼠标回调函数按下时调用的鼠标回调函数129GLUT键盘函数键盘函数/子程序子程序voidkeyFunc(GLubytekey,GLintxMouse,GlintyMouse);glutKeyboardFunc(keyFunc);/指定当键盘上的标准键按下时调用的键盘回调函数指定当键盘上的
112、标准键按下时调用的键盘回调函数。(如。(如backspace:8(ASCIIbackspace:8(ASCII码)码)glutSpecialFunc ( ); /指定当键盘上的特殊功能键指定当键盘上的特殊功能键(功能键(功能键(GLUT_KEY_F1(GLUT_KEY_F1) )、方向键、其、方向键、其他特殊键(他特殊键(pageup(GLUT_KEY_PAGE_UP)pageup(GLUT_KEY_PAGE_UP))按下时调用的键盘回调函数按下时调用的键盘回调函数字符值或字符值或ASCII编编码码130GLUT其他输入函数其他输入函数glutTabletButtonFunc(tabletFu
113、nc);/数据板函数数据板函数glutSpaceballButtonFunc(spaceballFunc);/空间轨迹球函数空间轨迹球函数glutButtonBoxFunc(buttonBoxFunc);/按钮盒函数按钮盒函数glutDialsFunc(dialsFunc);/拨号盘函数拨号盘函数131OpenGL的菜单函数的菜单函数glutCreateMenu/创建一个弹出式菜单创建一个弹出式菜单,并且指定一个当菜单项被选中时调用的过程并且指定一个当菜单项被选中时调用的过程glutAddMenuEntry/指定一个显示在菜单上的选项指定一个显示在菜单上的选项glutAttachMenu/指定
114、一个用于选择菜单项的鼠标按指定一个用于选择菜单项的鼠标按键键glutDetachMenu/取消一个指定鼠标键与当前菜单的关联取消一个指定鼠标键与当前菜单的关联glutSetMenu/指定当前窗口的当前菜单指定当前窗口的当前菜单glutDestroyMenu/清除指定菜单标识符对应的菜单清除指定菜单标识符对应的菜单glutGetMenu/返回当前窗口的当前菜单的标识符返回当前窗口的当前菜单的标识符glutAddSubMenu/将一个指定菜单作为子菜单添加到菜单列表中将一个指定菜单作为子菜单添加到菜单列表中,其中指定菜单已经由其中指定菜单已经由glutCreateMenu创建创建glutRemov
115、eMenuItem/从当前菜单中删除一个指定选项从当前菜单中删除一个指定选项132OpenGL动画子程序动画子程序glutInitDisplayMode(GLUT_DOUBLE)/激活双缓存,产生两个交替刷新屏幕的缓存激活双缓存,产生两个交替刷新屏幕的缓存(frontbuffer,backbuffer)glutS()/互换两个缓存的角色互换两个缓存的角色glutIdleFunc(animationFcn)/产生连续的动画,参数产生连续的动画,参数animationFcn为执行增量动画参为执行增量动画参数操作的子程序的名称数操作的子程序的名称133基于基于OpenGL的的C图形程序框架结构图形程
116、序框架结构l预处理(各类包含,宏定义等,如:)预处理(各类包含,宏定义等,如:)#ifdef_#endif#define#include;#includeglut.h”.l装载外部文件装载外部文件l程序初始化程序初始化l窗口初始化窗口初始化l场景中图形对象的绘制场景中图形对象的绘制l场景渲染场景渲染l图形变换(几何变换,观察变换)的实现图形变换(几何变换,观察变换)的实现l设计动态(动画)效果设计动态(动画)效果l设计键盘、鼠标等用户接口交互设计键盘、鼠标等用户接口交互l设计菜单、图标等用户交互设计菜单、图标等用户交互ll主程序(实现对函数、子程序或过程的调用)主程序(实现对函数、子程序或过程的调用)