计算机图形学-光照模型与面绘制算法_第1页
计算机图形学-光照模型与面绘制算法_第2页
计算机图形学-光照模型与面绘制算法_第3页
计算机图形学-光照模型与面绘制算法_第4页
计算机图形学-光照模型与面绘制算法_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、12第8章 光照模型与面绘制算法 光源 表面光照效果 基本光照模型 多边形绘制算法 光线跟踪方法 辐射度光照模型 添加表面细节纹理映射3几个基本概念 光照模型主要用于对象表面某光照位置的颜色计算表面绘制算法使用光照模型为对象所有投影位置确定像素颜色真实感成像包括:表面特性的精确表示场景中光照效果的物理描述4光源任一发出辐射能量的对象称为一个光源,它对场景中其他对象的光照效果有贡献点光源无穷远光源辐射度衰减方向光源和投射效果角强度衰减扩展光源和Warn模型5点光源使用三个RGB分量指定的单个颜色的点光源是发光体的最简单的模型一个场景的点光源通过给出其位置和发射光颜色来定义6无穷远光源离场景非常远

2、的大型光源(如太阳)也可用一个点发光体逼近,但是在方向效果上有所不同。远距离光源仅在一个方向照明场景,从远距离光源到场景中任意位置的光线路径接近不变。7辐射强度衰减辐射光线从一点光源出发并在空间中传播,离光源距离为dl时,它的振幅将按因子1/d2l进行衰减。即接近光源的表面将得到较高的入射光强度,而较远的表面则强度较小。生成真实感图形时,采用如下衰减因子:22101)(lllredattendadaadf8强度衰减函数考虑到无穷远点光源照射下,到光源的距离是不确定的,强度衰减函数可表达成:2210,10 . 1llradattenldadaaf;如果光源在无穷远处;如果光源是局部光源9方向光源

3、和投射效果一个局部光源稍加修改就可产生方向光束或投影光束如果一个对象位于光源的方向范围之外,则它得不到该光源的光照10角强度衰减对于一个方向光源,可按照从点光源位置出发的光强度角计算衰减常用的方向光源角强度衰减函数为:laangattenfcos)(011角强度衰减的一般公式lalightobjangattenlVVf)(0 . 00 . 1,llightobjVVcoscos,如果光源不是一个投影光源,其他12OpenGL光照函数OpenGL点光源函数指定一个OpenGL光源位置和类型指定OpenGL光源颜色指定OpenGL光源的光线强度衰减系数13OpenGL点光源函数OpenGL场景描述

4、中可包括多个点光源,而各种特性如位置、类型、颜色、衰减和投射效果等与每个点光源结合在一起glLight*(lightName,lightProperty,propertyValue);glEnable(lightName);glEnagle(GL_LIGHTING);14指定一个OpenGL光源位置和类型用于指定光源位置的符号常量是GL_POSITION光源类型和光源位置坐标值用一个四元素浮点数向量来指定GLfloat light1PosType =2.0,0.0,3.0,1.0glLightfv(GL_LIGHT1,GL_POSITION,light1PosType);glEnable(GL

5、_LIGHT1);15指定OpenGL光源的光线强度衰减系数光线强度衰减的三个OpenGL特性常量是:GL_CONSTANT_ATTENUATIONGL_LINEAR_ATTENUATIONGL_QUADRATIC_ATTENUATION每个衰减系数用正整数或正浮点数来设定glLight(GL_LIGHT0,GL_CONSTAN_ATTENUATION,2.0);glLight(GL_LIGHT0,GL_LINEAR_ATTENUATION,1.0);glLight(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.5);16OpenGL方向光源(投射光源)OpenGL

6、方向效果的特性常量有三个:GL_SPOT_DIRECTIONGL_SPOT_CUTOFFGL_SPOT_EXPONENT分别表示方向光源的方向、圆锥角以及强度衰减17表面光照效果光照模型使用为表面设定的各种光学特性来计算表面的光照效果这些特性包括透明度、颜色反射系数及各种表面纹理参数漫反射:反射光沿各个方向发散出去镜面反射:反射光集中成明亮的一个点环境光:场景各表面的反射光生成的光照效果18基本光照模型-环境光在基本光照模型中,可通过设定场景一般亮度级来引入背景光。这样可以生成对所有对象都相同的环境光,且近似的给出了各个照明表面的全局漫反射环境光光强度用Ia表示19基本光照模型-漫反射在建立表

7、面的漫反射模型时,假设入射光在各个方向以相同强度发散而与观察位置无关理想漫反射体 朗伯余弦定律:在与对象表面法向量夹角方向上,每个平面单位所发散的光线与夹角余弦成正比;该方向的光强度可用单位时间辐射能总量除以表面积在辐射方向的投影来计算20基本光照模型-漫反射21基本光照模型-漫反射假设每一表面都按理想漫反射体对待,则可为确定将要按漫反射发散的入射光部分的每一个表面设定一个参数kd(漫反射系数)这样,任何方向的漫反射是一个常数,它等于入射光强度乘以漫反射系数。因此,环境光对每一表面上各点的漫反射贡献可表示为:adambdiffIkI22基本光照模型-漫反射当强度为Il的光源照明一个表面时,从该

8、光源来的入射光总量以来于表面与光源的相对方向。23基本光照模型-漫反射一个强度为Il的光源的入射光总量为cos,lincidentlII强度为Il的光源的漫反射为incidentlddifflIkI,cosldIk24基本光照模型-漫反射一个表面位置的全部漫反射表达式为:00LNLNaaldaadiffIkLNIkIkI)(25镜面反射和Phong模型在光滑表面上看到的高光或镜面反射是由接近镜面反射角的一个会聚区域内入射光的全部或绝大部分成为反射光所导致。Phong曾提出一个计算镜面范围的经验公式,称为Phong镜面反射模型26镜面反射和Phong模型nlspeclIWIcos)(,镜面反射的

9、光强度主要由对象表面材质属性、光线入射角以及一些其他因素(如极性、入射光线的颜色等)所决定27镜面反射和Phong模型0 . 0)(,snlsspeclRVIkI对象表面上某点处由点光源生成的镜面反射为:00RVRV28漫反射和镜面反射的合并对于单个点光源,可以将光照表面上某点处的漫反射和镜面反射表示为:specdiffIIIsnlsldaaHNIkLNIkIk)()(29多光源的漫反射和镜面反射对于多个点光源的情况,可以在任意一个表面点上叠加各个光源所产生的光照效果nlspecldifflambdiffIIII1,nlnsdlaasHNkLNkIIk)()(30表面的光反射除了从光源反射光之

10、外,场景中某些表面还会发射光。我们可以在光照模型中简单的加入发射项来模拟表面发射光然后将这一表面发射项加到由光源导致的表面反射及背景光照明上31考虑强度衰减和高光的基本光照模型包含多光源、衰减因子、方向光效果、无穷远光源和发光表面的表面反射的通用、单色光照模型为:nlspecldifflangattenlradattenlambdiffonsurfemissiIIffIII)(,32RGB颜色考虑对于RGB颜色描述,光照模型中的每一强度描述是一个指定该强度的红、绿和蓝分量的三元素向量。类似的,反射系数也用RGB分量指定然后使用分开的表达式计算表面颜色的各个分量33亮度亮度是颜色的另一特征,有时

11、也称为光能量亮度给出了颜色亮或暗的程度信息,是我们在观察光照时感知亮度变化的心理上的度量亮度值计算如下:visiblefdffIfpancelu)()(min34透明表面对于如玻璃一类的对象,我们可以看到其后面的东西,称该对象为透明的如果不能看到一对象后面的东西,则称该对象为不透明的通常一个透明的对象表面上会同时产生反射光和折射光。折射光的相关作用取决于表面的透明程度以及是否有光源或光照表面位于透明表面之后35半透明材料当表示半透明对象时,漫反射效果很重要。经过一个半透明材料后,背景对象变成模糊影像。可以通过将背景对象均匀分布在一个有限范围或使用光线跟踪方法来模拟半透明性36光折射通过考虑光折

12、射,可以模拟真实透明效果当光线入射到一个透明对象表面时,一部分光线被反射,另一部分被折射由于不同对象中光线的速度不同,因此折射光线的路径与入射光线也不同折射光线的方向用折射角指定,是关于各材质的折射率及入射方向的函数irirsinsin37基本的透明模型一个简单的表示透明对象的方法是不考虑折射导致的路径平移在实际操作中,该方法假设各对象间的折射率不变,这样折射角总是与入射角相同。该方法加速了光强度计算,并且对于较薄的多边形表面,可是生成合理的透明效果38雾气效果对象颜色上的雾气效果是光照模型中有时会考虑的另一因素雾气使颜色变淡、使对象变模糊可以按照模拟空气的灰尘、烟或雾的多少来指定一个函数修改

13、表面颜色雾气效果常用下列衰减函数来模拟:2)()()(datmodatmoedfedf39阴影可以使用隐藏面算法确定光源不能照明的区域将视点置于光源位置,可以确定哪些表面是不可见的,这些就是阴影区域一旦对所有光源确定出阴影区域,这些阴影可以看做是表面图案而保存于图案数组中40光强度显示由光照模型计算出来的光强度可以是0.0到1.0之间的任意值,但计算机图形系统只能显示一个有限强度集因此,计算出的强度值必须转换为特定图形系统中的一个系统允许值才能进行显示另外,系统强度等级的允许数目必须按其对应到我们的眼睛能感受到强度值差别的程度来分布41分配系统强度等级对于任何系统,强度等级的允许数量可分布到从

14、0.0到1.0的范围内,以使该分布对应于我们对不同等级之间有相同光强度间隔的感觉人们对光强度的感觉是按对数等级变化nknkII/ )(042指定OpenGL光源颜色OpenGL中使用符号颜色特性常量GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR来设定颜色其中每一个通过指定一个四元素浮点值来赋值光源0的默认颜色是环境光为黑色而漫反射和镜面反射为白色,其他光源的环境光、漫反射及镜面反射颜色特性均为黑色43多边形绘制算法光照模型中的强度计算可以通过多种方法应用于表面绘制。可将光照模型用于确定每一投影像素位置的表面强度,或将光照模型用于少量选定点且在其他表面位置近似计算强度图形软件

15、包一般使用扫描线算法实现表面绘制更精确的多边形扫描方法为光线跟踪算法44恒定强度的明暗处理最简单的绘制多边形面的方法是为其所有的投影点赋以相同的颜色该方法称为恒定强度表面绘制或平面绘制,为显示对象上的多边形面片提供了快速而简单的方法,可应用于快速生成一般曲面的大致外观平面显示对希望快速标识模拟曲面的单个多边形面片的设计或其他应用也很有用45恒定强度的明暗处理通常,如果下列假设成立,则多边形表面的平面明暗处理可以准确地绘制一个对象:该多边形是一个多面体的一个面且不是一个近似表示曲面的多边形网格的一部分所有照明该多边形的光源离对象表面足够远,以使NL与衰减函数对于对象表面是一个常数视点离该多边形足

16、够远,以至于VR对于多边形区域是一个常数46Gouraud明暗处理强度插值该方法通过在照明对象的表面上将光强度值进行线性插值来绘制多边形表面能使强度值沿相邻多边形的公共边均匀过度,消除了在平面绘制中存在的光强度不连续的现象使用Gouraud表面绘制方法需要计算确定每个多边形顶点处的平均单位法向量对于每个顶点根据光照模型来计算其光强度在多边形投影区域对顶点强度进行线性插值47Phong明暗处理该方法对法向量进行差值取代对强度插值其结果是强度值的更精确计算,更真实的表面高光显示Phong方法需要更多的计算确定每个多边形顶点处的平均单位法向量在多边形投影区域上顶点法向量进行线性插值根据光照模型,使用

17、差值的法向量,沿每条扫描线计算投影像素的光强度48光线跟踪方法光线跟踪是光线投射思想的延伸,它不仅仅为每个像素寻找可见面,该方法还跟踪光线在场景中的反射和折射,并计算它们对总的光强度的作用光线跟踪技术虽然能够生成高度真实感的图形,特别是对于表面光滑的对象,但它所需的计算量却非常大49基本光线跟踪算法建立一个投影参考点在z周,像素位置在xy平面的坐标系统在该坐标系统中描述场景的几何数据并生成像素光线对于场景的透视投影视图,每一光线从投影参考点出发,穿过每个像素中心进入场景并沿反射和透射路径形成各种光线分支在该表面交点计算像素强度的贡献50基本光线跟踪算法51基本光线跟踪算法生成每个像素光线后,需

18、测试场景中的所有场景表面以确定是否与该光线相交如果相交,则计算出交点离像素的距离在计算出所有表面和该光线的交点后,具有最小距离的交点即可代表该像素所对应的表面然后,将该光线在该可见面上沿镜面反射路径反射,若表面透明,需考察折射52基本光线跟踪算法反射和折射光线统称为从属光线对每条从属光线重复这个光线处理过程当从每个像素出发的光线在场景中被反射和折射时,逐个将相交表面加入到一个二叉光线跟踪树中树的左分支表示反射光线,右分支表示透射光线53基本光线跟踪算法54基本光线跟踪算法光线跟踪的最大深度可由用户选定,或由存储容量决定当下面任一条件满足时,就停止跟踪该光线不和任一表面相交该光线与一个光源相交且

19、该光源不是一个反射面该树到达最大允许深度55辐射度光照模型辐射度模型考察辐射能在对象表面之间的转移和能量守恒定律,从而准确的建立对象表面的漫反射模型56OpenGL光照和表面绘制函数OpenGL方向光源OpenGL全局光照参数OpenGL表面特性函数OpenGL光照模型OpenGL雾气效果OpenGL透明性函数OpenGL表面绘制函数57OpenGL表面特性函数表面的反射系数和其他可选特性用下列函数设定glMaterial*(surfFace,surProperty,propertyValue);参数surfFace赋以符号常量GL_FRONT,GL_BACK或GL_FRONT_AND_BAC

20、K之一surfProperty用来标识表面参数propertyValue用相应的值来设定58OpenGL雾气效果在使用OpenGL光照模型计算出表面颜色后,可设定场景中空气的颜色并将表面颜色和雾气颜色混合然后可使用雾气强度衰减函数来模拟透过模糊或烟雾的雾气对场景的观察glEnable(GL_FOG);glFog*(atmoParameter,paramValue);59OpenGL表面绘制函数OpenGl子程序可用常数强度表面绘制或Gouraud表面绘制方法来显示表面没有使用Phong表面绘制、光线跟踪法或辐射度方法的OpenGL子程序绘制方法用下列函数来选定glShadeModel(surf

21、RenderingMethod);60添加表面细节前面讨论过光滑对象表面的绘制技术,但是大多数对象表面并不光滑,需要在对象表面添加纹理以准确模拟可使用多种方法添加表面细节,例如:在较大的表面上粘贴蓓蕾、花朵或荆棘等小东西用小的多边形区域建立表面图案的模型将纹理数组或强度修改过程映射到表面通过修改表面法向量来生成局部凹凸通过同时修改表面法向量和表面切向量来显示木头和其他材料上的有向图案61纹理映射对于简单光照模型,需要了解当物体上的什么属性被改变时,可产生纹理的效果。snlsldaaHNIkLNIkIkI)()(改变漫反射系数来改变物体的颜色改变物体表面的法向量62纹理映射在真实感图形学中,可用

22、如下两种方法定义纹理图像纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上的一点时,采用相应的纹理图案中的相应点的颜色值函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯;或用数学函数定义随机高度场,成生表面粗糙纹理即几何纹理63纹理映射线性纹理图案表面纹理图案体纹理图案纹理缩减图案过程式纹理映射方法64线性纹理图案一维纹理图案可以用颜色值的单足码数来指定,用来定义线性纹理空间的一系列颜色对于一个线性图案,纹理空间用单个s坐标值表示要将一个线性纹理图案影射到场景中,需要将一个s坐标值赋以一个空间位置而将另一个s坐标值赋以另一个空间位置65表面纹理图案用于表面区域的纹理通常用矩形颜色图案

23、定义,而在这一纹理空间的位置用二维(s,t)坐标值来指定纹理图案中每一颜色的描述可存储在一个三足码数组中66表面纹理图案67表面纹理图案vvvuuuctbsatsvvctbsatsuu),(),(68体纹理图案还可以为空间三维区域的位置指定一组颜色,这些纹理通常称为体纹理图案或实体图案实体纹理通过三维纹理空间(s,t,r)来指定一个体纹理图案可用一个四足码数组来存储,其中最前面三个足码给出行位置、列位置和深度位置。第四个足码用来指向图案中的特定颜色69纹理缩减图案在动画和其他应用中,对象大小经常改变对于用纹理图案显示的对象,在其尺寸改变时要重新应用纹理映射。当一个有纹理的对象缩小时,原纹理图案

24、应用于较小的区域会导致纹理变形为避免变形,可创建一系列纹理缩减图案在对象显示尺寸缩小时使用70纹理缩减图案一般,每一缩减图案是前一图案的一半例如,如果已有一个1616的图案,则可建立尺寸为88、44、22和11这样四个另外的图案对于一个对象的任一视图,就可以应用合适的缩减图案使其变形最小这些缩减图案常称为MIP图71过程式纹理映射方法过程式纹理映射是将过程式定义应用于场景中对象的颜色变量。该方法避免了将二维纹理图案映射到对象表面所需的变换计算。过程式纹理映射消除了对存储容量的需求例:可以通过计算表示一个对象的材质或特征的变量来生成一个过程纹理72纹理映射的步骤创建纹理对象并为其指定纹理指出如何

25、将纹理应用于每个像素启用纹理映射使用纹理坐标和几何坐标来绘制场景73OpenGL线纹理函数glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA,nTexColors,0,dataFormat,dataType,lineTexArray)glEnable ( GL_TEXTURE_1D )74OpenGL表面纹理函数glTexImage2D ( GL_TEXTURE_2D,0,GL_RGBA,texWidth,texHeight,0,dataFormat,dataType,surfTexArray )glEnable ( GL_TEXTURE_2D )75OpenGL体纹理函

26、数glTexImage3D ( GL_TEXTURE_3D,0,GL_RGBA,texWidth,texHeight,texDepth,0,dataFormat,dataType,volTexArray )glEnable ( GL_TEXTURE_3D )76OpenGL纹理映射选项glTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE ,applicationMethod )GL_REPLACEGL_MODULATEGL_DECALGL_BLEND77OpenGL纹理坐标数组glEnableClientState ( GL_TEXTURE_COORD

27、_ARRAY )glTexCoordPointer ( nCoords, dataType, offset, texCoordArray ) 78线纹理Glintk ;GLubyte texLine 16for ( k = 0 ; k = 2 ; k += 2)texLine 4*k = 0 ;texLine 4*k +1 = 255 ;texLine 4*k +2 = 0 ;texLine 4*k +3 = 255 ;for ( k = 1 ; k = 3 ; k += 2)texLine 4*k = 255 ;texLine 4*k +1 = 0 ;texLine 4*k +2 = 0 ;texLine 4*k +3 = 255 ;79线纹理glTexParameteri ( GL_TEXTURE_1D, GL_TEXTURE_M

温馨提示

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

评论

0/150

提交评论