CH12-2、OpenGL编程入门-2.pdf

上传人:qwe****56 文档编号:70020731 上传时间:2023-01-14 格式:PDF 页数:50 大小:755.53KB
返回 下载 相关 举报
CH12-2、OpenGL编程入门-2.pdf_第1页
第1页 / 共50页
CH12-2、OpenGL编程入门-2.pdf_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《CH12-2、OpenGL编程入门-2.pdf》由会员分享,可在线阅读,更多相关《CH12-2、OpenGL编程入门-2.pdf(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、湖南科技大学课程教案(章节章节章节章节、专题首页专题首页专题首页专题首页)授课教师授课教师授课教师授课教师:王志喜王志喜王志喜王志喜 职称职称职称职称:副教授副教授副教授副教授 单位单位单位单位:计算机学院计算机学院计算机学院计算机学院 课程名称课程名称课程名称课程名称 计算机图形学计算机图形学计算机图形学计算机图形学 章节章节章节章节、专题专题专题专题 OpenGL 编程入门编程入门编程入门编程入门(二二二二)教学目标及教学目标及教学目标及教学目标及 基本要求基本要求基本要求基本要求 掌握掌握掌握掌握 OpenGL 的基本光照处理的基本光照处理的基本光照处理的基本光照处理 教学教学教学教学

2、重点重点重点重点 OpenGL 的基本光照处理的基本光照处理的基本光照处理的基本光照处理 -1-教学教学教学教学 难点难点难点难点 教学内容与教学内容与教学内容与教学内容与 时间分配时间分配时间分配时间分配 OpenGL 的基本光照处理的基本光照处理的基本光照处理的基本光照处理(1 课时课时课时课时)习题习题习题习题 见自编习题集见自编习题集见自编习题集见自编习题集 -2-OpenGL 编程入门编程入门编程入门编程入门(二二二二)王志喜王志喜王志喜王志喜 编写编写编写编写 湖南科技大学计算机科学与工程学院湖南科技大学计算机科学与工程学院湖南科技大学计算机科学与工程学院湖南科技大学计算机科学与工

3、程学院 1 目目目目 录录录录 五五五五、光照处理光照处理光照处理光照处理.1 1、OpenGL 光照基本概念光照基本概念光照基本概念光照基本概念.2 2、光源的定义光源的定义光源的定义光源的定义.6 3、光照模式光照模式光照模式光照模式.13 4、材质属性材质属性材质属性材质属性.19 5、举例举例举例举例.24 1 五五五五、光照处理光照处理光照处理光照处理 要绘制逼真的三维物体要绘制逼真的三维物体要绘制逼真的三维物体要绘制逼真的三维物体,必须进行光照处理必须进行光照处理必须进行光照处理必须进行光照处理。没有光照没有光照没有光照没有光照的三维物体模型与二维物体没有的三维物体模型与二维物体没

4、有的三维物体模型与二维物体没有的三维物体模型与二维物体没有任何差别任何差别任何差别任何差别,只有具有光照的只有具有光照的只有具有光照的只有具有光照的物体才是真正的三维物体物体才是真正的三维物体物体才是真正的三维物体物体才是真正的三维物体。OpenGL 可以控制光照与物体的可以控制光照与物体的可以控制光照与物体的可以控制光照与物体的关系关系关系关系,产生多种不同的视觉效果产生多种不同的视觉效果产生多种不同的视觉效果产生多种不同的视觉效果。下面分几部分叙述下面分几部分叙述下面分几部分叙述下面分几部分叙述 OpenGL的光照的光照的光照的光照。2 1、OpenGL 光照基本概念光照基本概念光照基本概

5、念光照基本概念 在屏幕上最终显示的象素颜色在屏幕上最终显示的象素颜色在屏幕上最终显示的象素颜色在屏幕上最终显示的象素颜色,受受受受 glColor 命令指定的颜命令指定的颜命令指定的颜命令指定的颜色影响色影响色影响色影响,同时也反映出在场景中使用光照的特性同时也反映出在场景中使用光照的特性同时也反映出在场景中使用光照的特性同时也反映出在场景中使用光照的特性,以及物体以及物体以及物体以及物体反射和吸收光的属性反射和吸收光的属性反射和吸收光的属性反射和吸收光的属性。OpenGL 的光是由红的光是由红的光是由红的光是由红、绿绿绿绿、蓝组成的蓝组成的蓝组成的蓝组成的,光源的颜色由其所发出的红绿蓝颜色的

6、数量决定光源的颜色由其所发出的红绿蓝颜色的数量决定光源的颜色由其所发出的红绿蓝颜色的数量决定光源的颜色由其所发出的红绿蓝颜色的数量决定,材料的属材料的属材料的属材料的属性是由在不同方向反射性是由在不同方向反射性是由在不同方向反射性是由在不同方向反射、入射的红绿蓝颜色的百分数表示的入射的红绿蓝颜色的百分数表示的入射的红绿蓝颜色的百分数表示的入射的红绿蓝颜色的百分数表示的。3 OpenGL 的光可来自多个光源的光可来自多个光源的光可来自多个光源的光可来自多个光源,每个光源可以单独控制每个光源可以单独控制每个光源可以单独控制每个光源可以单独控制开关开关开关开关,有的光源来自某个特定的方向有的光源来自

7、某个特定的方向有的光源来自某个特定的方向有的光源来自某个特定的方向、位置位置位置位置,也有的光源分也有的光源分也有的光源分也有的光源分散在整个场景散在整个场景散在整个场景散在整个场景,如墙壁的泛光如墙壁的泛光如墙壁的泛光如墙壁的泛光,经过来自光源的光线多次反经过来自光源的光线多次反经过来自光源的光线多次反经过来自光源的光线多次反射射射射,无法确定其光线的方向无法确定其光线的方向无法确定其光线的方向无法确定其光线的方向。要绘制真实的三维物体要绘制真实的三维物体要绘制真实的三维物体要绘制真实的三维物体,仅有光源是不够的仅有光源是不够的仅有光源是不够的仅有光源是不够的,只有物体只有物体只有物体只有物

8、体表面吸收表面吸收表面吸收表面吸收、反射光线时反射光线时反射光线时反射光线时,光源才起作用光源才起作用光源才起作用光源才起作用,而材料本身也可能而材料本身也可能而材料本身也可能而材料本身也可能发光发光发光发光,也可能漫反射光线也可能漫反射光线也可能漫反射光线也可能漫反射光线,或在特定方向反射光线或在特定方向反射光线或在特定方向反射光线或在特定方向反射光线,光照只光照只光照只光照只对上述属性的材料起作用对上述属性的材料起作用对上述属性的材料起作用对上述属性的材料起作用。4(1)光线的构成光线的构成光线的构成光线的构成 光线由四个部分构成光线由四个部分构成光线由四个部分构成光线由四个部分构成:发射

9、发射发射发射、泛光泛光泛光泛光、漫反射和镜面反射漫反射和镜面反射漫反射和镜面反射漫反射和镜面反射,这四个成分单独计算这四个成分单独计算这四个成分单独计算这四个成分单独计算,然后再累加起来然后再累加起来然后再累加起来然后再累加起来。?发射光发射光发射光发射光(emission):来自物体来自物体来自物体来自物体,不受光源的影响不受光源的影响不受光源的影响不受光源的影响。?泛光泛光泛光泛光(ambient):来自环境的泛光光源来自环境的泛光光源来自环境的泛光光源来自环境的泛光光源,在各方向均匀散在各方向均匀散在各方向均匀散在各方向均匀散布布布布。?漫反射光漫反射光漫反射光漫反射光(diffuse)

10、:来自一个特定方向来自一个特定方向来自一个特定方向来自一个特定方向,一旦照射到表面一旦照射到表面一旦照射到表面一旦照射到表面上上上上,无论在何处观察无论在何处观察无论在何处观察无论在何处观察,亮度相同亮度相同亮度相同亮度相同。?镜面反射光镜面反射光镜面反射光镜面反射光(specular):来自一个特定方向来自一个特定方向来自一个特定方向来自一个特定方向,以一个特定以一个特定以一个特定以一个特定方向离开方向离开方向离开方向离开,可以把这个成分看成是材料的光洁度可以把这个成分看成是材料的光洁度可以把这个成分看成是材料的光洁度可以把这个成分看成是材料的光洁度。镜面镜面镜面镜面反射与反射物体的材料属性

11、关系很大反射与反射物体的材料属性关系很大反射与反射物体的材料属性关系很大反射与反射物体的材料属性关系很大,光泽金属能产生光泽金属能产生光泽金属能产生光泽金属能产生很高的镜面反射很高的镜面反射很高的镜面反射很高的镜面反射,而地毯几乎没有镜面反射而地毯几乎没有镜面反射而地毯几乎没有镜面反射而地毯几乎没有镜面反射,在在在在 OpenGL中中中中,这个属性是用光泽度这个属性是用光泽度这个属性是用光泽度这个属性是用光泽度(shininess,又称为镜面反射指又称为镜面反射指又称为镜面反射指又称为镜面反射指数数数数)来表示的来表示的来表示的来表示的。5(2)材料颜色材料颜色材料颜色材料颜色 取决于反射的红

12、绿蓝光的百分数取决于反射的红绿蓝光的百分数取决于反射的红绿蓝光的百分数取决于反射的红绿蓝光的百分数。与光源的特性相似与光源的特性相似与光源的特性相似与光源的特性相似,材料也有泛光材料也有泛光材料也有泛光材料也有泛光、扩散扩散扩散扩散、反射颜色反射颜色反射颜色反射颜色。材料的泛光与每个入材料的泛光与每个入材料的泛光与每个入材料的泛光与每个入射光射光射光射光源的泛光成分相对应源的泛光成分相对应源的泛光成分相对应源的泛光成分相对应,漫反射与光源的漫反射相对应漫反射与光源的漫反射相对应漫反射与光源的漫反射相对应漫反射与光源的漫反射相对应,镜面镜面镜面镜面反射与光源镜面反射相对应反射与光源镜面反射相对应

13、反射与光源镜面反射相对应反射与光源镜面反射相对应。泛光和漫反射定义材料的颜色泛光和漫反射定义材料的颜色泛光和漫反射定义材料的颜色泛光和漫反射定义材料的颜色,两者通常是相似的两者通常是相似的两者通常是相似的两者通常是相似的,镜面反射通常是白或灰镜面反射通常是白或灰镜面反射通常是白或灰镜面反射通常是白或灰。6 2、光源的定义光源的定义光源的定义光源的定义 光源有许多特性光源有许多特性光源有许多特性光源有许多特性,如颜色如颜色如颜色如颜色、位置位置位置位置、方向等方向等方向等方向等。不同特性的不同特性的不同特性的不同特性的光源光源光源光源,作用在物体上的效果是不一样的作用在物体上的效果是不一样的作用

14、在物体上的效果是不一样的作用在物体上的效果是不一样的。定义一个光源的主定义一个光源的主定义一个光源的主定义一个光源的主要工作就是定义它的各种特性要工作就是定义它的各种特性要工作就是定义它的各种特性要工作就是定义它的各种特性。定义光源特性的函数定义光源特性的函数定义光源特性的函数定义光源特性的函数是是是是glLight()。?void glLightifv(GLenum light,GLenum pname,TYPE param);该函数设置光源参数该函数设置光源参数该函数设置光源参数该函数设置光源参数 light:建立建立建立建立 light 指定指定指定指定的光源的光源的光源的光源。ligh

15、t 用形式为用形式为用形式为用形式为 GL_LIGHTi的符号常数表示的符号常数表示的符号常数表示的符号常数表示,08i。pname:设置光源的特性设置光源的特性设置光源的特性设置光源的特性。param:设置设置设置设置 pname 特性对应的值特性对应的值特性对应的值特性对应的值。下面按照光源的下面按照光源的下面按照光源的下面按照光源的特特特特性分类描述性分类描述性分类描述性分类描述 pname 和和和和 param 的取值的取值的取值的取值。7(1)颜色颜色颜色颜色?glLightifv(GLenum light,GL_AMBIENT,TYPE param)用于指定环境泛光的用于指定环境泛

16、光的用于指定环境泛光的用于指定环境泛光的 RGBA 强度强度强度强度,缺省缺省缺省缺省值为值为值为值为(0.0,0.0,0.0,1.0),表示没有环境泛光表示没有环境泛光表示没有环境泛光表示没有环境泛光。?glLightifv(GLenum light,GL_DIFFUSE,TYPE param)用于指定漫反射的用于指定漫反射的用于指定漫反射的用于指定漫反射的 RGBA 强度强度强度强度,对于对于对于对于 GL_LIGHT0,缺缺缺缺省值为省值为省值为省值为(1.0,1.0,1.0,1.0),对于其它编号的光源对于其它编号的光源对于其它编号的光源对于其它编号的光源,缺省值为缺省值为缺省值为缺省

17、值为(0.0,0.0,0.0,0.0)。?glLightifv(GLenum light,GL_SPECULAR,TYPE param)用于指定镜面反射光的用于指定镜面反射光的用于指定镜面反射光的用于指定镜面反射光的 RGBA 强度强度强度强度,对于对于对于对于 GL_LIGHT0,缺省值为缺省值为缺省值为缺省值为(1.0,1.0,1.0,1.0),对于其它光源对于其它光源对于其它光源对于其它光源,缺省值为缺省值为缺省值为缺省值为(0.0,0.0,0.0,0.0)。8(2)位置位置位置位置?glLightifv(GLenum light,GL_POSITION,TYPE param)定义光源位

18、置坐标定义光源位置坐标定义光源位置坐标定义光源位置坐标。根据需要根据需要根据需要根据需要,可以为场景定义一个距可以为场景定义一个距可以为场景定义一个距可以为场景定义一个距场景无限远的光源场景无限远的光源场景无限远的光源场景无限远的光源,或者定义一个离场景较近的光源或者定义一个离场景较近的光源或者定义一个离场景较近的光源或者定义一个离场景较近的光源,前者前者前者前者称为方向光源称为方向光源称为方向光源称为方向光源,后者称为位置光源后者称为位置光源后者称为位置光源后者称为位置光源。对于一个无限远的方向对于一个无限远的方向对于一个无限远的方向对于一个无限远的方向光源光源光源光源,光线在到达物体时可以

19、看成是平行的光线在到达物体时可以看成是平行的光线在到达物体时可以看成是平行的光线在到达物体时可以看成是平行的,太阳就是一个太阳就是一个太阳就是一个太阳就是一个典型的方向光源典型的方向光源典型的方向光源典型的方向光源。9 下面的语句定义的光源就是一个方向光源下面的语句定义的光源就是一个方向光源下面的语句定义的光源就是一个方向光源下面的语句定义的光源就是一个方向光源。GLfloat light_position=1.0,1.0,1.0,0.0;GLLightfv(GL_LIGHT0,GL_POSITION,light_position);上面的例子中上面的例子中上面的例子中上面的例子中,由于光源位

20、置的齐次坐标中的由于光源位置的齐次坐标中的由于光源位置的齐次坐标中的由于光源位置的齐次坐标中的 w 分量值分量值分量值分量值为为为为 0,所以该光源位于无穷远处所以该光源位于无穷远处所以该光源位于无穷远处所以该光源位于无穷远处,由由由由(1.0,1.0,1.0)到坐标原点到坐标原点到坐标原点到坐标原点的射线的方向为该光源的方向的射线的方向为该光源的方向的射线的方向为该光源的方向的射线的方向为该光源的方向。缺省情况下缺省情况下缺省情况下缺省情况下,光源的位置为光源的位置为光源的位置为光源的位置为(0.0,0.0,1.0,0.0),它定义一个指向它定义一个指向它定义一个指向它定义一个指向 z 轴负

21、方向的方向光源轴负方向的方向光源轴负方向的方向光源轴负方向的方向光源。如果如果如果如果 w 为非为非为非为非 0 值值值值,则光源是位置光源则光源是位置光源则光源是位置光源则光源是位置光源,(x,y,z)是该光源是该光源是该光源是该光源所在位置的坐标所在位置的坐标所在位置的坐标所在位置的坐标。10(3)衰减衰减衰减衰减 光线的强度随光源距离的增加而减少光线的强度随光源距离的增加而减少光线的强度随光源距离的增加而减少光线的强度随光源距离的增加而减少。对于方向光源对于方向光源对于方向光源对于方向光源,随距离的增加而衰减其光线强度是没有意随距离的增加而衰减其光线强度是没有意随距离的增加而衰减其光线强

22、度是没有意随距离的增加而衰减其光线强度是没有意义的义的义的义的,因此对方向因此对方向因此对方向因此对方向光源的光线不进行衰减处理光源的光线不进行衰减处理光源的光线不进行衰减处理光源的光线不进行衰减处理。对于位置光源对于位置光源对于位置光源对于位置光源,OpenGL 使用使用使用使用下面的衰减因子来衰减光线的强度下面的衰减因子来衰减光线的强度下面的衰减因子来衰减光线的强度下面的衰减因子来衰减光线的强度。衰减因子的计算公式为衰减因子的计算公式为衰减因子的计算公式为衰减因子的计算公式为:21ceqkk dk d+,其中其中其中其中:d为光源位置到物体顶点之间的距离为光源位置到物体顶点之间的距离为光源

23、位置到物体顶点之间的距离为光源位置到物体顶点之间的距离。ck为常数衰减因子为常数衰减因子为常数衰减因子为常数衰减因子,默认值为默认值为默认值为默认值为 1.0。ek为线性衰减因子为线性衰减因子为线性衰减因子为线性衰减因子,默认值为默认值为默认值为默认值为 0.0。qk为为为为二次衰减因子二次衰减因子二次衰减因子二次衰减因子,默认值为默认值为默认值为默认值为 0.0。11 OpenGL 只对泛光只对泛光只对泛光只对泛光、漫反射和镜面反射光线进行衰减漫反射和镜面反射光线进行衰减漫反射和镜面反射光线进行衰减漫反射和镜面反射光线进行衰减,下列三种调用分别用来设置相应光源的下列三种调用分别用来设置相应光

24、源的下列三种调用分别用来设置相应光源的下列三种调用分别用来设置相应光源的上述三个衰减因子上述三个衰减因子上述三个衰减因子上述三个衰减因子。?glLightifv(GLenum light,GL_CONSTANT_ATTENUATION,TYPE param)?glLightifv(GLenum light,GL_LINEAR_ATTENUATION,TYPE param)?glLightifv(GLenum light,GL_QUADRATIC_ATTENUATION,TYPE param)12(4)聚光聚光聚光聚光?glLightifv(GLenum light,GL_DOT_CUTOFF,

25、TYPE param)用于指定用于指定用于指定用于指定光源的最大散射角光源的最大散射角光源的最大散射角光源的最大散射角。缺省情况下缺省情况下缺省情况下缺省情况下,光源的光线向四周发射光源的光线向四周发射光源的光线向四周发射光源的光线向四周发射。可以使用可以使用可以使用可以使用该该该该调用调用调用调用,将光线的发将光线的发将光线的发将光线的发射范围限制在一个圆锥体内射范围限制在一个圆锥体内射范围限制在一个圆锥体内射范围限制在一个圆锥体内,参数参数参数参数 param 是是是是该圆该圆该圆该圆锥顶角的半角锥顶角的半角锥顶角的半角锥顶角的半角,取值范围为取值范围为取值范围为取值范围为0,90,缺省时

26、为缺省时为缺省时为缺省时为 90。?glLightifv(GLenum light,GL_SPOT_DIRECTION,TYPE param)用于用于用于用于指定聚光灯的方向指定聚光灯的方向指定聚光灯的方向指定聚光灯的方向。即圆锥体的轴线矢量即圆锥体的轴线矢量即圆锥体的轴线矢量即圆锥体的轴线矢量,默认默认默认默认值值值值为为为为(0.0,0.0,-1.0),指向指向指向指向 Z轴负方向轴负方向轴负方向轴负方向。13?glLightifv(GLenum light,GL_SPOT_EXPONENT,TYPE param)用于用于用于用于指定聚光指数指定聚光指数指定聚光指数指定聚光指数。聚光灯的属

27、性还包括一个控制圆锥体内光强分布的指数聚光灯的属性还包括一个控制圆锥体内光强分布的指数聚光灯的属性还包括一个控制圆锥体内光强分布的指数聚光灯的属性还包括一个控制圆锥体内光强分布的指数因子因子因子因子,称为聚光指数称为聚光指数称为聚光指数称为聚光指数。在圆锥体轴线上的光强度最大在圆锥体轴线上的光强度最大在圆锥体轴线上的光强度最大在圆锥体轴线上的光强度最大,外沿外沿外沿外沿处强度最小处强度最小处强度最小处强度最小。这个因子越大这个因子越大这个因子越大这个因子越大,光束的强度越向轴线集中光束的强度越向轴线集中光束的强度越向轴线集中光束的强度越向轴线集中,缺缺缺缺省值为省值为省值为省值为 0.0。(5

28、)打开光源打开光源打开光源打开光源 光源定义完毕后光源定义完毕后光源定义完毕后光源定义完毕后,须调用须调用须调用须调用 glEnable()打开该光源打开该光源打开该光源打开该光源,否则该否则该否则该否则该光源对场景中的物体不起作用光源对场景中的物体不起作用光源对场景中的物体不起作用光源对场景中的物体不起作用。(6)例子例子例子例子 下面语句定义了一个编号为下面语句定义了一个编号为下面语句定义了一个编号为下面语句定义了一个编号为 GL_LIGHT0 的光源的光源的光源的光源。14 GLfloat light_ambient=0.0,0.0,0.0,1.0;/泛光的泛光的泛光的泛光的RGBA强度

29、强度强度强度 GLfloat light_diffuse=1.0,1.0,1.0,1.0;/漫反射的漫反射的漫反射的漫反射的RGBA强度强度强度强度 GLfloat light_specular=1.0,1.0,1.0,1.0;/镜面反射的镜面反射的镜面反射的镜面反射的RGBA强度强度强度强度 GLfloat light_position=1.0,1.0,1.0,1.0;/光源位置光源位置光源位置光源位置 glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);/泛光的泛光的泛光的泛光的RGBA强度强度强度强度 glLightfv(GL_LIGHT0,GL_

30、DIFFUSE,light_diffuse);/漫反射的漫反射的漫反射的漫反射的RGBA强度强度强度强度 glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);/镜面反射的镜面反射的镜面反射的镜面反射的RGBA强度强度强度强度 glLightfv(GL_LIGHT0,GL_POSITION,light_position);/光源位置光源位置光源位置光源位置 15 3、光照模光照模光照模光照模式式式式 除了定义光源外除了定义光源外除了定义光源外除了定义光源外,还需为场景定义光照模式还需为场景定义光照模式还需为场景定义光照模式还需为场景定义光照模式。定义光

31、照定义光照定义光照定义光照模式模式模式模式为为为为:void glLightModelifv(GLenum pname,TYPE param)OpenGL 的光照模式由三个部分组成的光照模式由三个部分组成的光照模式由三个部分组成的光照模式由三个部分组成:全局环境光的强全局环境光的强全局环境光的强全局环境光的强度度度度,观察点的性质观察点的性质观察点的性质观察点的性质,对物体的前对物体的前对物体的前对物体的前、背面的光照处理方式背面的光照处理方式背面的光照处理方式背面的光照处理方式。16(1)全局环境光全局环境光全局环境光全局环境光 场景中的每一个光源都可以向场景发射环境光场景中的每一个光源都可

32、以向场景发射环境光场景中的每一个光源都可以向场景发射环境光场景中的每一个光源都可以向场景发射环境光。除此以除此以除此以除此以外外外外,还可以为场景指定无源的全局环境光还可以为场景指定无源的全局环境光还可以为场景指定无源的全局环境光还可以为场景指定无源的全局环境光。可以使用下面的可以使用下面的可以使用下面的可以使用下面的调用调用调用调用形式形式形式形式指定这种全局环境光的强度指定这种全局环境光的强度指定这种全局环境光的强度指定这种全局环境光的强度。?glLightModelifv(GL_LIGHT_MODEL_AMBIENT,TYPE para);缺省情况下缺省情况下缺省情况下缺省情况下,全局环

33、境光的强度就是全局环境光的强度就是全局环境光的强度就是全局环境光的强度就是0.2,0.2,0.2,1.0。它的作用是产生少量的白色环境光它的作用是产生少量的白色环境光它的作用是产生少量的白色环境光它的作用是产生少量的白色环境光,因此即使不为场景定义因此即使不为场景定义因此即使不为场景定义因此即使不为场景定义光源光源光源光源,仍然能看见场景中的物体仍然能看见场景中的物体仍然能看见场景中的物体仍然能看见场景中的物体。17(2)观察点性质观察点性质观察点性质观察点性质 观察点的位置影响镜面反射产生的亮斑的计算观察点的位置影响镜面反射产生的亮斑的计算观察点的位置影响镜面反射产生的亮斑的计算观察点的位置

34、影响镜面反射产生的亮斑的计算。顶点上顶点上顶点上顶点上亮斑的亮度依赖于该处的法线亮斑的亮度依赖于该处的法线亮斑的亮度依赖于该处的法线亮斑的亮度依赖于该处的法线、顶点到光源的方向和顶点到顶点到光源的方向和顶点到顶点到光源的方向和顶点到顶点到光源的方向和顶点到观察点的方向观察点的方向观察点的方向观察点的方向。对于一个无穷远的观察点对于一个无穷远的观察点对于一个无穷远的观察点对于一个无穷远的观察点,它和任意顶点之间的方向保它和任意顶点之间的方向保它和任意顶点之间的方向保它和任意顶点之间的方向保持恒定持恒定持恒定持恒定。使用一个非无穷远的观察点能产生更加逼真的效果使用一个非无穷远的观察点能产生更加逼真

35、的效果使用一个非无穷远的观察点能产生更加逼真的效果使用一个非无穷远的观察点能产生更加逼真的效果,但由于要对每个顶点计算方向但由于要对每个顶点计算方向但由于要对每个顶点计算方向但由于要对每个顶点计算方向,因此会降低系统的性能因此会降低系统的性能因此会降低系统的性能因此会降低系统的性能。缺缺缺缺省时观察点为无穷远省时观察点为无穷远省时观察点为无穷远省时观察点为无穷远。定义观察点性质的定义观察点性质的定义观察点性质的定义观察点性质的调用形调用形调用形调用形式式式式是是是是:?glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GLboolean param);当当当当

36、 param=GL_TRUE 时时时时,观察点为本地观察点观察点为本地观察点观察点为本地观察点观察点为本地观察点;param=GL_FALSE 时时时时,观察点为无穷远观察点观察点为无穷远观察点观察点为无穷远观察点观察点为无穷远观察点。18(3)光照面光照面光照面光照面 缺省情况下缺省情况下缺省情况下缺省情况下,光照计算针对所有的多边形光照计算针对所有的多边形光照计算针对所有的多边形光照计算针对所有的多边形,无论是面朝无论是面朝无论是面朝无论是面朝前的多边形还是面朝后的多边形都受光照的影响前的多边形还是面朝后的多边形都受光照的影响前的多边形还是面朝后的多边形都受光照的影响前的多边形还是面朝后的

37、多边形都受光照的影响。如果只为如果只为如果只为如果只为面朝前的多边形设置光照面朝前的多边形设置光照面朝前的多边形设置光照面朝前的多边形设置光照,则面朝后的多边形不能被正确地则面朝后的多边形不能被正确地则面朝后的多边形不能被正确地则面朝后的多边形不能被正确地照亮照亮照亮照亮。例如例如例如例如,对于一个球体对于一个球体对于一个球体对于一个球体,只有向前的面可见只有向前的面可见只有向前的面可见只有向前的面可见,这是因为这是因为这是因为这是因为它们是球体外面的面它们是球体外面的面它们是球体外面的面它们是球体外面的面,而朝后的面看起来是什么样子是无而朝后的面看起来是什么样子是无而朝后的面看起来是什么样子

38、是无而朝后的面看起来是什么样子是无关关关关紧要的紧要的紧要的紧要的,因此不必为它进行光照计算因此不必为它进行光照计算因此不必为它进行光照计算因此不必为它进行光照计算。然而然而然而然而,如果将球体切如果将球体切如果将球体切如果将球体切开开开开,则它的内表面也是可见的则它的内表面也是可见的则它的内表面也是可见的则它的内表面也是可见的,这时就必须使内表面也能被这时就必须使内表面也能被这时就必须使内表面也能被这时就必须使内表面也能被正确地光照正确地光照正确地光照正确地光照。下面的语句设置了双面光照下面的语句设置了双面光照下面的语句设置了双面光照下面的语句设置了双面光照。glLightModeli(GL

39、_LIGHT_MODEL_TWO_SIDE,GL_TRUE);要关闭双面光照要关闭双面光照要关闭双面光照要关闭双面光照,在前面的调用中加入在前面的调用中加入在前面的调用中加入在前面的调用中加入 GL_FALSE 参参参参数数数数。19 4、材质属性材质属性材质属性材质属性 大多数的材质属性与光源的属性类似大多数的材质属性与光源的属性类似大多数的材质属性与光源的属性类似大多数的材质属性与光源的属性类似。设置材质属性的设置材质属性的设置材质属性的设置材质属性的函数是函数是函数是函数是:?void glMaterialifv(GLenum face,GLenum pname,TYPE param);

40、为物体指定为物体指定为物体指定为物体指定当前材质的某一属性当前材质的某一属性当前材质的某一属性当前材质的某一属性。参数参数参数参数 face 可以是可以是可以是可以是GL_FRONT、GL_BACK 或或或或 GL_FRONT_AND_BACK,指指指指定当前材质作用于物体的哪一个方面定当前材质作用于物体的哪一个方面定当前材质作用于物体的哪一个方面定当前材质作用于物体的哪一个方面。被设置的材质的属性被设置的材质的属性被设置的材质的属性被设置的材质的属性由由由由 pname 标识标识标识标识,对应于该属性的值由对应于该属性的值由对应于该属性的值由对应于该属性的值由 param 给出给出给出给出。

41、20(1)漫反射和泛射漫反射和泛射漫反射和泛射漫反射和泛射?glMaterialifv(GLenum face,GL_DIFFUSE,TYPE param)定义物体对漫反射光的反射率定义物体对漫反射光的反射率定义物体对漫反射光的反射率定义物体对漫反射光的反射率。漫反射的反射率对物体的颜色起着最重要的作用漫反射的反射率对物体的颜色起着最重要的作用漫反射的反射率对物体的颜色起着最重要的作用漫反射的反射率对物体的颜色起着最重要的作用,它受它受它受它受入射的漫反射光颜色以及入射光与法线的夹角的影响入射的漫反射光颜色以及入射光与法线的夹角的影响入射的漫反射光颜色以及入射光与法线的夹角的影响入射的漫反射光

42、颜色以及入射光与法线的夹角的影响,而不而不而不而不受观察点位置的影响受观察点位置的影响受观察点位置的影响受观察点位置的影响。默认值为默认值为默认值为默认值为(0.8,0.8,0.8,1.0)。?glMaterialifv(GLenum face,GL_AMBIENT,TYPE param)定义物体对泛射光的反射率定义物体对泛射光的反射率定义物体对泛射光的反射率定义物体对泛射光的反射率。泛射光的反射率影响物体的整体颜色泛射光的反射率影响物体的整体颜色泛射光的反射率影响物体的整体颜色泛射光的反射率影响物体的整体颜色,因为直射到物体因为直射到物体因为直射到物体因为直射到物体上的漫反射光最亮上的漫反射

43、光最亮上的漫反射光最亮上的漫反射光最亮,而没有被直射的物体的环境反射光最明而没有被直射的物体的环境反射光最明而没有被直射的物体的环境反射光最明而没有被直射的物体的环境反射光最明显显显显。一个物体的泛射光反射率受全局环境光和来自光源的环一个物体的泛射光反射率受全局环境光和来自光源的环一个物体的泛射光反射率受全局环境光和来自光源的环一个物体的泛射光反射率受全局环境光和来自光源的环境光的双重影响境光的双重影响境光的双重影响境光的双重影响。与漫反射一样与漫反射一样与漫反射一样与漫反射一样,泛射光的反射率不受视点泛射光的反射率不受视点泛射光的反射率不受视点泛射光的反射率不受视点位置的影响位置的影响位置的

44、影响位置的影响。默认值为默认值为默认值为默认值为(0.2,0.2,0.2,1.0)。21?glMaterialifv(GLenum face,GL_AMBIENT_AND_DIFFUSE,TYPE param)在现实世界中在现实世界中在现实世界中在现实世界中,漫反射和泛射光反射率通常是相同的漫反射和泛射光反射率通常是相同的漫反射和泛射光反射率通常是相同的漫反射和泛射光反射率通常是相同的,因此因此因此因此 OpenGL 提供一种简便的方法为它们赋相同的值提供一种简便的方法为它们赋相同的值提供一种简便的方法为它们赋相同的值提供一种简便的方法为它们赋相同的值。默认默认默认默认值为值为值为值为(0.8

45、,0.8,0.8,1.0)。22(2)镜面反射镜面反射镜面反射镜面反射 表面较为光洁的物体由于反射光线而会产生亮斑表面较为光洁的物体由于反射光线而会产生亮斑表面较为光洁的物体由于反射光线而会产生亮斑表面较为光洁的物体由于反射光线而会产生亮斑,这种这种这种这种亮斑称为镜面反射光亮斑称为镜面反射光亮斑称为镜面反射光亮斑称为镜面反射光。设置物体对光的镜面反射特性可以限设置物体对光的镜面反射特性可以限设置物体对光的镜面反射特性可以限设置物体对光的镜面反射特性可以限定亮斑的颜色定亮斑的颜色定亮斑的颜色定亮斑的颜色、大小和亮度大小和亮度大小和亮度大小和亮度。?glMaterialifv(GLenum fa

46、ce,GL_SPECULAR,TYPE param)定义物体对定义物体对定义物体对定义物体对镜面镜面镜面镜面反射光的反射率反射光的反射率反射光的反射率反射光的反射率,即即即即限限限限定亮斑的颜色定亮斑的颜色定亮斑的颜色定亮斑的颜色。默认值为默认值为默认值为默认值为(0.0,0.0,0.0,1.0)。?glMaterialifv(GLenum face,GL_DIFFUSE,TYPE param)控制亮斑大小和亮度控制亮斑大小和亮度控制亮斑大小和亮度控制亮斑大小和亮度,称为镜面反射指数称为镜面反射指数称为镜面反射指数称为镜面反射指数。param 的取值范围为的取值范围为的取值范围为的取值范围为0

47、.0,128.0,这个值越大这个值越大这个值越大这个值越大,亮斑的尺亮斑的尺亮斑的尺亮斑的尺寸越小且亮度越高寸越小且亮度越高寸越小且亮度越高寸越小且亮度越高。默认值为默认值为默认值为默认值为 0.0。镜面反射光的强度还取决于视点的位置镜面反射光的强度还取决于视点的位置镜面反射光的强度还取决于视点的位置镜面反射光的强度还取决于视点的位置。当视点处于直当视点处于直当视点处于直当视点处于直接反射的角度时接反射的角度时接反射的角度时接反射的角度时,亮斑的亮度到达最大值亮斑的亮度到达最大值亮斑的亮度到达最大值亮斑的亮度到达最大值。23(3)发射光发射光发射光发射光?glMaterialifv(GLenu

48、m face,GL_EMISSION,TYPE param)定义定义定义定义发光体的发光体的发光体的发光体的光线发射特性光线发射特性光线发射特性光线发射特性。某些物体某些物体某些物体某些物体(如灯泡如灯泡如灯泡如灯泡)本身能够发射出光线本身能够发射出光线本身能够发射出光线本身能够发射出光线。对于这类物体需对于这类物体需对于这类物体需对于这类物体需要定义其光线发射特性要定义其光线发射特性要定义其光线发射特性要定义其光线发射特性,可用上述调用形式其可用上述调用形式其可用上述调用形式其可用上述调用形式其光线发射特性光线发射特性光线发射特性光线发射特性,使得物体看起来像发出某种颜色的光使得物体看起来像

49、发出某种颜色的光使得物体看起来像发出某种颜色的光使得物体看起来像发出某种颜色的光。默认值为默认值为默认值为默认值为(0.0,0.0,0.0,1.0)。24 5、举例举例举例举例(1)关于光照模型的例子关于光照模型的例子关于光照模型的例子关于光照模型的例子 在这个例程中在这个例程中在这个例程中在这个例程中,定义了多个光源和多个定义了多个光源和多个定义了多个光源和多个定义了多个光源和多个物体物体物体物体,图中给出图中给出图中给出图中给出了最终的显示效果了最终的显示效果了最终的显示效果了最终的显示效果。1 2 3 4 1 漫漫漫漫 漫漫漫漫、低低低低 漫漫漫漫、高高高高 漫漫漫漫、发发发发 2 泛泛

50、泛泛、漫漫漫漫 泛泛泛泛、漫漫漫漫、低低低低 泛泛泛泛、漫漫漫漫、高高高高 泛泛泛泛、漫漫漫漫、发发发发 3 色色色色、漫漫漫漫 色色色色、漫漫漫漫、低低低低 色色色色、漫漫漫漫、高高高高 色色色色、漫漫漫漫、发发发发 漫漫漫漫:漫反漫反漫反漫反射射射射;低低低低:低指数镜面反射低指数镜面反射低指数镜面反射低指数镜面反射;高高高高:高指数镜面反射高指数镜面反射高指数镜面反射高指数镜面反射;泛泛泛泛:不反射不反射不反射不反射颜色的泛光反射颜色的泛光反射颜色的泛光反射颜色的泛光反射;色色色色:反射反射反射反射颜色的泛光反射颜色的泛光反射颜色的泛光反射颜色的泛光反射;发发发发:发光发光发光发光。25

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁