《计算机图形学10陈永强.ppt》由会员分享,可在线阅读,更多相关《计算机图形学10陈永强.ppt(61页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1p基本概念基本概念p简单光照模型简单光照模型p基于简单光照模型的多边形绘制基于简单光照模型的多边形绘制第十章第十章 真实感图形绘制真实感图形绘制 2p真实感图形绘制:通过综合利用数学、物理学、真实感图形绘制:通过综合利用数学、物理学、计算机以及心理学等知识在计算机图形输出设计算机以及心理学等知识在计算机图形输出设备上绘制出能够以假乱真的美丽景象。备上绘制出能够以假乱真的美丽景象。p光强(度):描述物体表面朝某方向辐射光的光强(度):描述物体表面朝某方向辐射光的颜色,它既能表示光能大小又能表示其色彩组颜色,它既能表示光能大小又能表示其色彩组成的物理量。成的物理量。基本概念基本概念3p光照模型(
2、光照模型(Illumination model),),也称明暗模型,也称明暗模型,主要用于物体表面某点处的光强度计算。主要用于物体表面某点处的光强度计算。n简单的光照模型简单的光照模型n复杂的光照模型复杂的光照模型基本概念基本概念4p真实感图形绘制过程真实感图形绘制过程 根据假定的光照条件和景物外观因素,依根据假定的光照条件和景物外观因素,依据一定的光照模型,计算可见面投射到观察者据一定的光照模型,计算可见面投射到观察者眼中的光强度大小,并将它转换成适合图形设眼中的光强度大小,并将它转换成适合图形设备的颜色值,生成投影画面上每一个象素的光备的颜色值,生成投影画面上每一个象素的光强度,使观察者产
3、生身临其境的感觉。强度,使观察者产生身临其境的感觉。基本概念基本概念5p真实感图形绘制步骤真实感图形绘制步骤n在计算机中进行场景造型;在计算机中进行场景造型;n进行取景变换和透视变换;进行取景变换和透视变换;n进行消隐处理;进行消隐处理;n进行真实感图形绘制。进行真实感图形绘制。基本概念基本概念6p简单光照模型简单光照模型p环境光环境光p漫反射光漫反射光p镜面反射光镜面反射光p光强衰减光强衰减p颜色处理颜色处理10.1 简单光照模型简单光照模型7p简单光照模型中只考虑反射光的作用。简单光照模型中只考虑反射光的作用。p反射光由环境光、漫反射光和镜面反射光三部反射光由环境光、漫反射光和镜面反射光三
4、部分组成。分组成。简单光照模型简单光照模型8p特点:照射在物体上的光来自周围各个方向,特点:照射在物体上的光来自周围各个方向,又均匀地向各个方向反射。又均匀地向各个方向反射。pP点对环境光的反射强度为点对环境光的反射强度为环境光环境光(Background Light)图图1 环境光的反射环境光的反射9p一个粗糙的、无光泽的表面呈现为漫反射。一个粗糙的、无光泽的表面呈现为漫反射。p特点:光源来自一个方向,反射光均匀地射向特点:光源来自一个方向,反射光均匀地射向各个方向。各个方向。p由由Lambert余弦定理可余弦定理可得点得点P处漫反射光的强度为:处漫反射光的强度为:漫反射光(漫反射光(Dif
5、fuse Reflection)图图2 漫反射漫反射10p若若L和和N都已规格化为单位矢量,则有都已规格化为单位矢量,则有漫反射光(漫反射光(Diffuse Reflection)图图2 漫反射漫反射11p对于彩色对于彩色漫反射光(漫反射光(Diffuse Reflection)p对于多个漫反射光源对于多个漫反射光源12p镜面反射遵循反射定律,入射光和反射光分别镜面反射遵循反射定律,入射光和反射光分别位于表面法矢的两侧。位于表面法矢的两侧。p如果观察者正好处在如果观察者正好处在P点的镜面反射方向上,就点的镜面反射方向上,就会看到一个比周围会看到一个比周围亮得多的高光点亮得多的高光点。镜面反射光
6、镜面反射光图图3 镜面反射镜面反射13p镜面反射情况由镜面反射情况由Phong模型给出:模型给出:镜面反射光镜面反射光图图3 镜面反射镜面反射p若若R和和V已规格化为单已规格化为单位矢量,则:位矢量,则:14p从视点观察到物体上任一点从视点观察到物体上任一点P处的光强度处的光强度I应为应为环境光反射光强度环境光反射光强度Ie、漫反射光强度漫反射光强度Id以及镜面以及镜面反射光的光强度反射光的光强度Is的总和:的总和:物体表面光强计算物体表面光强计算15p光在传播的过程中,其能量会发生衰减。光照光在传播的过程中,其能量会发生衰减。光照模型中必须考虑光强衰减,否则会影响生成图模型中必须考虑光强衰减
7、,否则会影响生成图形的真实效果。形的真实效果。p光强的衰减可以采用常数衰减、一次函数衰减光强的衰减可以采用常数衰减、一次函数衰减和二次函数衰减等。和二次函数衰减等。光强衰减光强衰减16p常用的二次衰减函数常用的二次衰减函数光强衰减光强衰减17p选择颜色模型选择颜色模型(color model)n面向硬件的颜色模型:面向硬件的颜色模型:RGB、CYMn面向视觉感知的颜色模型:面向视觉感知的颜色模型:HSIp为颜色分量指定光照模型为颜色分量指定光照模型颜色颜色18p以以RGB颜色模型为例颜色模型为例n环境光强度:环境光强度:n入射光强度:入射光强度:n环境光反射系数:环境光反射系数:n漫反射系数:
8、漫反射系数:n镜面反射系数:镜面反射系数:颜色颜色19p光强计算公式:光强计算公式:颜色颜色20p恒定光强恒定光强pGouraud明暗处理明暗处理pPhong明暗处理明暗处理10.2 基于简单光照模型的多边形绘制基于简单光照模型的多边形绘制21p只用一种颜色绘制整个多边形只用一种颜色绘制整个多边形n光源在无穷远处,则多边形上所有点的光源在无穷远处,则多边形上所有点的LN为常数,衰减函数也是一个常数。为常数,衰减函数也是一个常数。n视点在无穷远处,则多边形上所有点的视点在无穷远处,则多边形上所有点的VR为常数。为常数。n多边形是景物表面的精确表示,即不是一个多边形是景物表面的精确表示,即不是一个
9、含曲线面景物的近似表示。含曲线面景物的近似表示。恒定光强恒定光强22pGouraud明暗处理方法,又称为亮度插值明暗明暗处理方法,又称为亮度插值明暗处理,它通过对多边形顶点颜色进行线性插值来处理,它通过对多边形顶点颜色进行线性插值来绘制其内部各点,其步骤为:绘制其内部各点,其步骤为:n计算每个多边形顶点处的平均单位法矢量;计算每个多边形顶点处的平均单位法矢量;n对每个顶点根据简单光照模型来计算其光强;对每个顶点根据简单光照模型来计算其光强;n在多边形表面上将顶点光强度进行线性插值。在多边形表面上将顶点光强度进行线性插值。Gouraud明暗处理明暗处理23p双线性插值方法双线性插值方法Goura
10、ud明暗处理明暗处理图图4 Gouraud 明暗处理的双线性插值明暗处理的双线性插值24pPhong明暗处理方法,又称为法矢量插值明暗明暗处理方法,又称为法矢量插值明暗处理,它对多边形顶点的法矢量进行插值以产生处理,它对多边形顶点的法矢量进行插值以产生中间各点的法矢量,其步骤为:中间各点的法矢量,其步骤为:n计算每个多边形顶点处的平均单位法矢量;计算每个多边形顶点处的平均单位法矢量;n用双线性插值方法求得多边形内部各点的法用双线性插值方法求得多边形内部各点的法矢量。矢量。n最后按光照模型确定多边形内部各点的光强。最后按光照模型确定多边形内部各点的光强。Phong明暗处理明暗处理25p矢量双线性
11、插值方法矢量双线性插值方法Phong明暗处理明暗处理图图5 Phong明暗处理的矢量双线性插值明暗处理的矢量双线性插值2610.3 透明处理透明处理图图6 透明表面的光强包括反射光和折射光透明表面的光强包括反射光和折射光27透明处理透明处理图图7 简单的透明处理简单的透明处理28透明处理透明处理图图8 光的折射光的折射2910.4 产生阴影产生阴影p阴影是由于物体截断了光线而产生的,所以如果阴影是由于物体截断了光线而产生的,所以如果光源位于物体一侧的话,阴影总是位于物体的另光源位于物体一侧的话,阴影总是位于物体的另一侧,也就是与光源相反的一侧。一侧,也就是与光源相反的一侧。p从理论上来说,从视
12、点以及从光源看过去都是可从理论上来说,从视点以及从光源看过去都是可见的面不会落在阴影中,只有那些从视点看过去见的面不会落在阴影中,只有那些从视点看过去是可见的,而从光源看过去是不可见的面,肯定是可见的,而从光源看过去是不可见的面,肯定落在阴影之内。落在阴影之内。30产生阴影产生阴影p产生具有阴影的图形绘制算法产生具有阴影的图形绘制算法n将视点移到光源位置,用多边形区域排序消将视点移到光源位置,用多边形区域排序消隐算法,将多边形分成两大类:向光多边形隐算法,将多边形分成两大类:向光多边形和背光多边形。和背光多边形。n将视点移到原来的观察位置,对向光多边形将视点移到原来的观察位置,对向光多边形和背
13、光多边形进行消隐,并选用一种光照模和背光多边形进行消隐,并选用一种光照模型计算多边形的亮度,就可得到有阴影效果型计算多边形的亮度,就可得到有阴影效果的图形。的图形。3110.5 模拟景物表面细节模拟景物表面细节p颜色纹理:通过颜色色彩或明暗度的变化体现出颜色纹理:通过颜色色彩或明暗度的变化体现出来的表面细节。来的表面细节。p几何纹理:由于不规则的细小凹凸造成的。几何纹理:由于不规则的细小凹凸造成的。p颜色纹理取决于物体表面的光学属性,而几何纹颜色纹理取决于物体表面的光学属性,而几何纹理由物体表面的微观几何形状决定。理由物体表面的微观几何形状决定。32模拟景物表面细节模拟景物表面细节p用多边形模
14、拟表面细节用多边形模拟表面细节p纹理的定义和映射纹理的定义和映射p凹凸映射凹凸映射33多边形模拟表面细节多边形模拟表面细节p简单地模拟景物表面细节的方法是用多边形,称简单地模拟景物表面细节的方法是用多边形,称为表面图案多边形,来模拟纹理的结构和模式。为表面图案多边形,来模拟纹理的结构和模式。p处理时,首先根据待生成的颜色纹理构造表面图处理时,首先根据待生成的颜色纹理构造表面图案多边形,然后将表面图案多边形覆盖到物体的案多边形,然后将表面图案多边形覆盖到物体的表面上。表面上。34纹理映射和定义纹理映射和定义p生成颜色纹理的一般方法,是预先定义纹理模式,生成颜色纹理的一般方法,是预先定义纹理模式,
15、然后建立物体表面的点与纹理模式的点之间的对然后建立物体表面的点与纹理模式的点之间的对应。当物体表面的可见点确定之后,以纹理模式应。当物体表面的可见点确定之后,以纹理模式的对应点参与光照模型进行计算,就可把纹理模的对应点参与光照模型进行计算,就可把纹理模式附到物体表面上。这种方法称为纹理映射式附到物体表面上。这种方法称为纹理映射(Texture Mapping)。)。35纹理映射和定义纹理映射和定义图图9 纹理映射中纹理空间、物体空间和像素空间的变换纹理映射中纹理空间、物体空间和像素空间的变换36纹理映射和定义纹理映射和定义图图10 由像素空间向纹理空间的映射由像素空间向纹理空间的映射37凹凸映
16、射凹凸映射p1978年,年,Blinn提出了一种无需修改表面几何提出了一种无需修改表面几何模型,即能模拟表面凹凸不平效果的有效方法模型,即能模拟表面凹凸不平效果的有效方法凹凸映射技术(凹凸映射技术(Bump Mapping)。)。3810.6 整体光照模型与光线跟踪整体光照模型与光线跟踪p整体光照模型整体光照模型pWhitted光照模型光照模型p光线跟踪算法光线跟踪算法39整体光照模型整体光照模型p一个完整的光照明模型应该包括由光源和环境引一个完整的光照明模型应该包括由光源和环境引起的漫反射分量、镜面反射分量、规则透射分量起的漫反射分量、镜面反射分量、规则透射分量以及漫透射分量等。以及漫透射分
17、量等。n仅考虑由光源引起的漫反射分量和镜面反射仅考虑由光源引起的漫反射分量和镜面反射分量,而环境反射分量则简单地用一常数来分量,而环境反射分量则简单地用一常数来代替,这类光照模型称为局部光照模型。代替,这类光照模型称为局部光照模型。n能同时模拟光源和环境照明效果的光照模型能同时模拟光源和环境照明效果的光照模型称为整体光照模型。称为整体光照模型。40Whitted光照模型光照模型pWhitted在简单光照模型中增加了环境镜面反在简单光照模型中增加了环境镜面反射光和环境规则透射光,以模拟周围环境的光投射光和环境规则透射光,以模拟周围环境的光投射在景物表面上产生的理想镜面反射和规则透射射在景物表面上
18、产生的理想镜面反射和规则透射现象。现象。图图11 物体表面的镜面反射和透射物体表面的镜面反射和透射41光线跟踪算法光线跟踪算法p光线跟踪(光线跟踪(Ray Tracing)方法基于几何光学)方法基于几何光学的原理,通过模拟光的传播路径来确定反射、折的原理,通过模拟光的传播路径来确定反射、折射和阴影等。射和阴影等。图图12 光线跟踪算法光线跟踪算法42光线跟踪算法步骤光线跟踪算法步骤p从视点出发,确定穿过每个像素中心的光线路径,从视点出发,确定穿过每个像素中心的光线路径,然后,沿这束光线累计光强,并将最终值赋给相然后,沿这束光线累计光强,并将最终值赋给相应像素。应像素。p对于每一像素光线,对场景
19、中的所有物体表面进对于每一像素光线,对场景中的所有物体表面进行测试以确定其是否与该光线相交,并计算出交行测试以确定其是否与该光线相交,并计算出交点的深度,深度最大(点的深度,深度最大(z值)的交点即为该像素值)的交点即为该像素对应的可见点。然后,继续考察通过该可见点的对应的可见点。然后,继续考察通过该可见点的从属光线(从属光线(Secondary Rays)。)。43光线跟踪算法步骤光线跟踪算法步骤p对每条从属光线重复过程:与场景中的所有物体对每条从属光线重复过程:与场景中的所有物体求交。然后递归地在沿从属光线方向最近的物体求交。然后递归地在沿从属光线方向最近的物体表面上生成下一折射和反射光线
20、。当由每个像素表面上生成下一折射和反射光线。当由每个像素出发的光线在场景中被反射和折射时,逐个将相出发的光线在场景中被反射和折射时,逐个将相交物体表面加入到一个二叉光线跟踪树中。当树交物体表面加入到一个二叉光线跟踪树中。当树中的一束光线到达预定的最大深度或到达某光源中的一束光线到达预定的最大深度或到达某光源时,就停止跟踪。时,就停止跟踪。44光线跟踪算法步骤光线跟踪算法步骤图图13 光线跟踪及光线跟踪树光线跟踪及光线跟踪树45光线跟踪算法步骤光线跟踪算法步骤p可以从光线跟踪树的叶结点开始,累计光强贡献可以从光线跟踪树的叶结点开始,累计光强贡献以确定某像素处的光强大小。树中每个结点的光以确定某像
21、素处的光强大小。树中每个结点的光强由树中的子结点处继承而来,但光强大小随距强由树中的子结点处继承而来,但光强大小随距离而衰减。像素光强是光线树根结点处的衰减光离而衰减。像素光强是光线树根结点处的衰减光强的总和。强的总和。46光线跟踪反走样光线跟踪反走样p将光线跟踪算法与过采样方式结合起来,可归纳将光线跟踪算法与过采样方式结合起来,可归纳如下:如下:(1)对每一像素的角点计算光线跟踪的光强。)对每一像素的角点计算光线跟踪的光强。(2)比较像素)比较像素4个角点的光强,确定要进行细分的个角点的光强,确定要进行细分的像素。像素。(3)对细分后新增的角点计算光线跟踪的光强。)对细分后新增的角点计算光线
22、跟踪的光强。然后,重复(然后,重复(2)和()和(3),直到各角点的光强比较),直到各角点的光强比较接近为止。接近为止。(4)加权平均求出投影平面上各像素点的光强。)加权平均求出投影平面上各像素点的光强。4710.710.7 OpenGL中的光照处理中的光照处理p点光源点光源p全局光照全局光照p表面材质表面材质p透明处理透明处理48点光源点光源p在在OpenGL场景描述中可以包含多个点光源,场景描述中可以包含多个点光源,光源的各种属性设置使用下面的函数指定。光源的各种属性设置使用下面的函数指定。void glLightif(GLenum light,GLenum pname,TYPE para
23、m);void glLightifv(GLenum light,GLenum pname,TYPE*param);49点光源点光源pname取值取值默认值默认值含义含义GL_AMBIENT(0.0,0.0,0.0,1.0)光源中环境光分量GL_DIFFUSE(1.0,1.0,1.0,1.0)或(0.0,0.0,0.0,1.0)光源中漫反射光分量GL_SPECULAR(1.0,1.0,1.0,1.0)或(0.0,0.0,0.0,1.0)光源中镜面光分量GL_POSITION(0.0,0.0,1.0,0.0)光源的坐标位置GL_SPOT_DIRECTION(0.0,0.0,-1.0)光源聚光灯方向
24、矢量GL_SPOT_EXPONENT(0.0)聚光指数GL_SPOT_CUTOFF180.0聚光截止角GL_CONSTANT_ATTENUATION1.0固定衰减因子GL_LINEAR_ATTENUATION0.0线性衰减因子GL_QUADRATIC_ATTENUATION0.0二次衰减因子50点光源点光源p点光源的颜色点光源的颜色p点光源的位置和类型点光源的位置和类型p聚光灯聚光灯p光强度衰减光强度衰减51点光源点光源p在在OpenGL中,必须明确启用或禁用光照。默中,必须明确启用或禁用光照。默认情况下,不启用光照,此时使用当前颜色绘制认情况下,不启用光照,此时使用当前颜色绘制图形,不进行法
25、线矢量、光源、光照模型、材质图形,不进行法线矢量、光源、光照模型、材质属性的相关的计算。要启用光照,可以使用函数:属性的相关的计算。要启用光照,可以使用函数:glEnable(GL_LIGHTING);p指定了光源的参数后,需要使用函数启用指定了光源的参数后,需要使用函数启用light指定的光源:指定的光源:glEnable(light);52OpenGL全局光照全局光照p在在OpenGL中,下面的函数用于指定全局光照中,下面的函数用于指定全局光照 void glLightModeif(GLenum pname,TYPE param);void glLightModeifv(GLenum pn
26、ame,TYPE*param);pname取值取值默认值默认值含义含义GL_LIGHT_MODEL_AMBIENT(0.2,0.2,0.2,1.0)整个场景的环境光成分GL_LIGHT_MODEL_LOCAL_VIEWERGL_FALSE如何计算镜面反射角GL_LIGHT_MODEL_TWO_SIDEGL_FALSE单面光照还是双面光照GL_LIGHT_MODEL_COLOR_CONTROLGL_SINGLE_COLOR镜面反射颜色是否独立于环境颜色、散射颜色53OpenGL材质属性材质属性p在在OpenGL中,下面的函数用于指定材质属性中,下面的函数用于指定材质属性 void glMater
27、ialif(GLenum face,GLenum pname,TYPE param);void glMaterialifv(GLenum face,GLenum pname,TYPE*param);pname取值取值默认值默认值含义含义GL_AMBIENT(0.2,0.2,0.2,1.0)材质对环境光的反射系数GL_DIFFUSE(0.8,0.8,0.8,1.0)材质对漫射光的反射系数GL_AMBIENT_AND_DIFFUSE材质对环境光和漫射光的反射系数GL_SPECULAR(0.0,0.0,0.0,1.0)材质对镜面光的反射系统GL_SHININESS0.0镜面反射指数GL_EMISSI
28、ON(0.0,0.0,0.1,1.0)材质的发射光颜色GL_COLOR_INDEXS(0,1,1)环境颜色索引、漫反射颜色索引和镜面反射颜色索引54OpenGL材质属性材质属性pOpenGL提供颜色材质模式:提供颜色材质模式:glEnable(GL_COLOR_MATERIAL);void glColorMaterial(GLenum face,GLenum mode);p 颜色材质模式中,可以通过颜色材质模式中,可以通过glColor函数来指定函数来指定物体表面的颜色,而相应的材质属性将通过颜色值物体表面的颜色,而相应的材质属性将通过颜色值和光源的和光源的RGB值计算出来。值计算出来。55透
29、明处理透明处理pOpenGL中使用混合实现透明处理。中使用混合实现透明处理。p混合操作是指将输入对象(源)的颜色值与当前混合操作是指将输入对象(源)的颜色值与当前存储在帧缓存中的像素(目标)颜色值合并的过存储在帧缓存中的像素(目标)颜色值合并的过程。程。56透明处理透明处理p开启混合操作开启混合操作glEnable(GL_BLEND);p指定计算源因子和目标因子的计算方式指定计算源因子和目标因子的计算方式 void glBlendFunc(GLenum srcfactor,GLenum destfactor);57透明处理透明处理常量常量RGB混合因子混合因子alpha混合因子混合因子GL _
30、ZERO(0,0,0)0GL_ONE(1,1,1)1GL_SRC_COLOR(Rs,Gs,Bs)AsGL_ONE_MINUS_SRC_COLOR(1,1,1)-(Rs,Gs,Bs)1-AsGL_DST_COLOR(Rd,Gd,Bd)AdGL_ONE_MINUS_DST_COLOR(1,1,1)-(Rd,Gd,Bd)1-AdGL _SRC_ALPHA(As,As,As)AsGL_ONE_MINUS_SRC_ALPHA(1,1,1)-(As,As,As)1-AsGL_DST_ALPHA(Ad,Ad,Ad)AdGL_ONE_MINUS_DST_ALPHA(1,1,1)-(Ad,Ad,Ad)1-AdG
31、L_CONSTANT_COLOR(Rc,Gc,Bc)AcGL_ONE_MINUS_CONSTANT_COLOR(1,1,1)-(Rc,Gc,Bc)1-AcGL_CONSTANT_ALPHA(Ac,Ac,Ac)AcGL_ONE_MINUS_CONSTANT_ALPHA(1,1,1)-(Ac,Ac,Ac)1-AcGL_SRC_ALPHA_SATURATE(f,f,f);f=min(As,1-Ad)158透明处理透明处理p进行混合计算进行混合计算p假定计算出的源和目标混合因子分别为(假定计算出的源和目标混合因子分别为(Sr,Sg,Sb,Sa)和()和(Dr,Dg,Db,Da),并且分),并且分别使用
32、下标别使用下标s和和d区分表示源和目标的区分表示源和目标的RGBA值,值,则混合后的则混合后的RGBA值如下:值如下:(RsSr+RdDr,GsSg+Gd Dg,BsSb+BdDb,AsSa+AdDa)5910.810.8 OpenGL中的纹理映射中的纹理映射void glTexImage1D(GLenum target,GLint level,GLint components,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid*texels);void glTexImage2D(GLenum target,GLi
33、nt level,GLint components,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid*texels);void glTexImage3D(GLenum target,GLint level,GLint components,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid*texels);60纹理映射纹理映射p启用纹理启用纹理glEnable(GL_TEXTURE_1D);glEnable(GL_TEXTURE_2D);glEnable(GL_TEXTURE_3D);61纹理映射纹理映射p在启用纹理之后,需要建立物体表面上的点与纹在启用纹理之后,需要建立物体表面上的点与纹理空间的对应关系。理空间的对应关系。n在绘制基本图元时,在在绘制基本图元时,在glVertex函数调用之函数调用之间调用间调用glTexCoord函数明确指定当前顶点函数明确指定当前顶点所对应的纹理坐标。所对应的纹理坐标。n让让OpenGL自动生成纹理坐标。自动生成纹理坐标。
限制150内