第13讲 OpenGL 光照_第1页
第13讲 OpenGL 光照_第2页
第13讲 OpenGL 光照_第3页
第13讲 OpenGL 光照_第4页
第13讲 OpenGL 光照_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、3.6 OpenGL光照光照 v 光照概述光照概述 v 创建光源 v 选择光照模型 v 指定材质属性 光照概述光照概述 v 现实世界中,如果没有光,我们几乎看不到任何东西现实世界中,如果没有光,我们几乎看不到任何东西 v 在在OpenGL中,大多数物体在没有光照的情况下,看起中,大多数物体在没有光照的情况下,看起 来甚至是二维的来甚至是二维的 有光照有光照没有光照没有光照 光照概述光照概述 v 光照通常是在纹理映射之前进行的光照通常是在纹理映射之前进行的 v 光照效果:光照效果: n 可以可以看到纹理看到纹理(贴图)(贴图) n 光照可以大幅增加场景的光照可以大幅增加场景的真实感真实感 n 启

2、用光照,将看不到物体表面的颜色信息启用光照,将看不到物体表面的颜色信息 n 启用光照,可以看到物体表面的材质信息启用光照,可以看到物体表面的材质信息 n 物体表面的法线,将决定光的反射方向物体表面的法线,将决定光的反射方向 光照概述光照概述 v 光照的类型光照的类型 n 环境光环境光 n 散射光(漫反射光)散射光(漫反射光) n 镜面反射光镜面反射光 n 材质发射光材质发射光 光照概述光照概述 v 环境光环境光 n 经过环境多次经过环境多次 散射,无法确定其散射,无法确定其 方向的光。方向的光。 光照概述光照概述 v 散射光(漫反射光)散射光(漫反射光) n 反射方向是均匀分布在各个方向上的反

3、射方向是均匀分布在各个方向上的 n 从任何角度看上去,光照效果都是一样的从任何角度看上去,光照效果都是一样的 光照概述光照概述 v 镜面反射光镜面反射光 n 反射方向是几乎一致的反射方向是几乎一致的 n 镜面反射可以使物体看起来闪闪发光镜面反射可以使物体看起来闪闪发光 n 不同的角度,镜面反射的效果是不一样的不同的角度,镜面反射的效果是不一样的 光照概述光照概述 v 发射光发射光 n 材质发出的发射光材质发出的发射光 n 用于模拟物体发出的光用于模拟物体发出的光 n 表面的发射光增加了物体的亮度,它不受光源的影响表面的发射光增加了物体的亮度,它不受光源的影响 n 发射光不会给整个场景增加光线发

4、射光不会给整个场景增加光线 8/38 改变环境光改变环境光 改变散射光改变散射光 改变镜面反射光改变镜面反射光 改变发射光改变发射光 光照概述光照概述 v 光源类型光源类型 n 平行光平行光 n 点光点光 n 聚光聚光 光照概述光照概述 内容进度内容进度 v 光照概述 v 创建光源创建光源 v 选择光照模型 v 指定材质属性 创建光源创建光源 v 光源的属性光源的属性 n 颜色颜色 n 位置位置 n 衰减衰减 n 聚光灯聚光灯 n 多光源多光源 v 设置光源属性的函数设置光源属性的函数 n glLightfv() n glLightf() 设置光源属性设置光源属性 v void glLight

5、fv(GLenum light, GLint pname, GLfloat* param); v 功能:功能: n 设置光源属性设置光源属性 v 参数:参数: n light: 指定光源(第几盏灯)指定光源(第几盏灯) n pname: 设置光源的属性设置光源的属性 n param: pname的值,是一个数组指针的值,是一个数组指针 v 返回值:无返回值:无 设置光源属性设置光源属性 v 备注:备注: n light可取下列值:可取下列值: uGL_LIGHT0, GL_LIGHT1, GL_LIGHT7 n pname可取下列值:可取下列值: uGL_AMBIENT/环境光的颜色(默认黑色

6、)环境光的颜色(默认黑色) uGL_DIFFUSE/散射光的颜色(默认白色或黑色)散射光的颜色(默认白色或黑色) uGL_SPECULAR/镜面反射光(默认白色或黑色)镜面反射光(默认白色或黑色) uGL_POSITION/光源的位置(默认(光源的位置(默认(0,0,1) uGL_SPOT_DIRECTION/聚光灯的方向(默认(聚光灯的方向(默认(0,0,-1) 设置光源属性设置光源属性 v void glLightf(GLenum light, GLint pname, GLfloat param); v 功能:功能: n 设置光源属性设置光源属性 v 参数:参数: n light: 指定

7、光源(第几盏灯)指定光源(第几盏灯) n pname:设置光源的属性设置光源的属性 n param: pname的值,是一个浮点数的值,是一个浮点数 v 返回值:无返回值:无 设置光源属性设置光源属性 v 备注:备注: n light可取下列值:可取下列值: uGL_LIGHT0, GL_LIGHT1, GL_LIGHT7 n pname可取下列值:可取下列值: uGL_SPOT_EXPONENT/聚光指数(默认聚光指数(默认0.0) uGL_SPOT_CUTOFF/聚光截止角(默认聚光截止角(默认180.0) uGL_CONSTANT_ATTENUATION/固定衰减因子(默认固定衰减因子(

8、默认1.0) uGL_LINEAR_ATTENUATION/线性衰减因子(默认线性衰减因子(默认0.0) uGL_QUADRATIC_ATTENUATION/二次衰减因子(默认二次衰减因子(默认0.0) glLightfv举例举例 GLfloat LightAmbient=0.5f,0.5f,0.5f,1.0f;/Ambient light GLfloat LightDiffuse=1.0f,1.0f,1.0f,1.0f;/Diffuse light GLfloat LightSpecular=0.5f,0.5f,0.5f,1.0f;/Light Specular GLfloat LightP

9、osition=0.0f,0.0f,30.0f,1.0f;/Light Position glLightfv(GL_LIGHT0,GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT0,GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT0,GL_SPECULAR, LightSpecular); glLightfv(GL_LIGHT0,GL_POSITION, LightPosition); glLightf举例举例 GLfloat LightSpotExponent = 10.0f; /聚光指数聚光指数 GLflo

10、at LightSpotCutoff = 20.0f; /聚光角度聚光角度 glLightf( GL_LIGHT1,GL_SPOT_EXPONENT, LightSpotExponent ); glLightf( GL_LIGHT1, GL_SPOT_CUTOFF, LightSpotCutoff ); 光源的属性光源的属性 v 颜色颜色 n 环境光颜色环境光颜色 n 散射光颜色散射光颜色 n 镜面反射光颜色镜面反射光颜色 v 例:例: GLfloat LightAmbient=0.5f,0.5f,0.5f,1.0f;/Ambient light GLfloat LightDiffuse=1.

11、0f,1.0f,1.0f,1.0f;/Diffuse light GLfloat LightSpecular=0.5f,0.5f,0.5f,1.0f;/Light Specular glLightfv(GL_LIGHT0,GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT0,GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT0,GL_SPECULAR, LightSpecular); 光源的属性光源的属性 v 位置位置 n 定向(定向(directional)光源,如太阳)光源,如太阳 u位置(位置(x, y, z

12、, w)中)中w为为0,则光源为定向光源,则光源为定向光源 n 定位定位(positional)光源,如台灯光源,如台灯 u位置(位置(x, y, z, w)中)中w不为不为0,则光源为定位光源,则光源为定位光源 光源的属性光源的属性 v 例:例: /定向光源定向光源 GLfloat LightPosition= 0.0, 0.0, 30.0, 0.0f ; glLightfv(GL_LIGHT0,GL_POSITION,LightPosition); /定位光源定位光源 GLfloat LightPosition= 0.0, 0.0, 30.0, 10.0f ; glLightfv(GL_L

13、IGHT0,GL_POSITION,LightPosition); 光源的属性光源的属性 v 衰减衰减 n 定向光源没有衰减定向光源没有衰减 n 定位光源,对其发射光进行衰减定位光源,对其发射光进行衰减 1 衰减系数衰减系数 ukc = GL_CONSTANT_ATTENUATION ukl = GL_LINEAR_ATTENUATION ukq = GL_QUADRATIC_ATTENUATION ud为光源位置与顶点之间的距离为光源位置与顶点之间的距离 v 例:例: glLightf(GL_LIGHT5, GL_CONSTANT_ATTENUATION, 2.0); glLightf(GL

14、_LIGHT5, GL_LINEAR_ATTENUATION, 1.0); glLightf(GL_LIGHT5, GL_QUADRATIC_ATTENUATION, 0.5); kc+kld+kqd2 光源的属性光源的属性 v 聚光灯聚光灯 n 聚光灯是一种定位光源,需要指定其位置聚光灯是一种定位光源,需要指定其位置 n 截止角,截止角,GL_SPOT_CUTOFF uGL_SPOT_CUTOFF默认值默认值180,聚光灯特性被禁用,聚光灯特性被禁用 u除默认值外,它的取值范围除默认值外,它的取值范围0.0, 90.0 u例:例:glLightf(GL_LIGHT0, GL_SPOT_CUT

15、OFF, 45.0); 光源的属性光源的属性 n 聚光灯方向,聚光灯方向, GL_SPOT_DIRECTION (轴线方向)(轴线方向) u默认方向(默认方向(0.0, 0.0, -1.0) u例:例: GLfloat spot_direction = -1.0, -1.0, 0.0; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction); n 聚光指数,聚光指数, GL_SPOT_EXPONENT u默认为默认为0.0,轴线处光强最大,轴线处光强最大 u聚光指数越大,光源的聚焦效果越高聚光指数越大,光源的聚焦效果越高 u例:例: ug

16、lLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 5.0) 光源的属性光源的属性 v 多光源多光源 n OpenGL至少允许在场景中使用至少允许在场景中使用8个光源(甚至更多,这取决于个光源(甚至更多,这取决于opengl 实现)实现) n GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, ,GL_LIGHT7 n 使用多个光源将会降低性能使用多个光源将会降低性能 启用光源启用光源 v 要在要在OpenGL环境中使用光照,需要告诉环境中使用光照,需要告诉OpenGL系统系统 启用光源启用光源 v 启用光源分为两步启用光源分为两步 n 开启光源开启光源1,

17、开启光源,开启光源2, n 开启光照渲染开启光照渲染 v 开启光源开启光源i n glEnable(GL_LIGHTi);/i是从是从0到到7之间的整数之间的整数 v 开启光照渲染开启光照渲染 n glEnable(GL_LIGHTING); 禁用光源禁用光源 v 禁用光源分为两种情况禁用光源分为两种情况 n 禁用指定光源禁用指定光源 n 禁用光照渲染(禁用所有光源)禁用光照渲染(禁用所有光源) v 禁用光源禁用光源 n glDisable(GL_LIGHTi);/i是从是从0到到7之间的整数之间的整数 v 禁用光照渲染禁用光照渲染 n glDisable(GL_LIGHTING); 内容进度

18、内容进度 v 光照概述 v 创建光源 v 选择光照模型选择光照模型 v 指定材质属性 选择光照模型选择光照模型 v OpenGL光照模型包括光照模型包括4项内容项内容 n 全局环境光强度全局环境光强度 n 观察点靠近场景还是位于无穷远处观察点靠近场景还是位于无穷远处 n 单面光照或双面光照单面光照或双面光照 n 镜面反射颜色是否独立于环境颜色、散射颜色(镜面反射颜色是否独立于环境颜色、散射颜色(OpenGL 1.4) v 选择光照模型的函数选择光照模型的函数 n glLightModelfv(); n glLightModeli(); 选择光照模型选择光照模型 v void glLightMo

19、delfv(GLenum pname, GLfloat* param); v 功能:功能: n 选择光照模型选择光照模型 v 参数:参数: n pname: 光照模型的类型光照模型的类型 n param: 该类型值的数组地址该类型值的数组地址 v 返回值:无返回值:无 v 备注:备注: n pname可以取值为:可以取值为: uGL_LIGHT_MODEL_AMBIENT 整个场景的整个场景的RGBA强度强度(0.2, 0.2, 0.2, 1.0) 选择光照模型选择光照模型 v 全局环境光全局环境光 n 即使没有其他光源,也可以看到场景中的物体即使没有其他光源,也可以看到场景中的物体 v 例例

20、:设置全局环境光颜色:设置全局环境光颜色 GLfloat lmodel_ambient = 0.2, 0.2, 0.2, 1.0 ; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); 选择光照模型选择光照模型 v void glLightModeli(GLenum pname, GLint param); v 功能:功能: n 选择光照模型选择光照模型 v 参数:参数: n pname: 光照模型的类型光照模型的类型 n param: 该类型的值该类型的值 v 返回值:无返回值:无 v 备注:备注: n pname可以取值为:可以取

21、值为: uGL_LIGHT_MODEL_LOCAL_VIEWER /观察点是否无穷远观察点是否无穷远(GL_FALSE) uGL_LIGHT_MODEL_TWO_SIDE /单面还是双面光照单面还是双面光照(GL_FALSE ) 选择光照模型选择光照模型 v 观察点靠近物体还是无穷远观察点靠近物体还是无穷远 n 在视点无穷远的情况下,场景中任何顶点到视点的方向都是同一常数。在视点无穷远的情况下,场景中任何顶点到视点的方向都是同一常数。 n 否则,则不然,但效果会更加真实否则,则不然,但效果会更加真实 v 例:指定观察点无穷远例:指定观察点无穷远 glLightModeli(GL_LIGHT_M

22、ODEL_LOCAL_VIEWER, GL_TRUE); 选择光照模型选择光照模型 v 单面光照或双面光照单面光照或双面光照 n 多边形的正面和背面是否都需要光照多边形的正面和背面是否都需要光照 v 例:指定双面光照例:指定双面光照 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); 内容进度内容进度 v 光照概述 v 创建光源 v 选择光照模型 v 指定材质属性指定材质属性 指定材质属性指定材质属性 v 启用光照时,物体顶点的颜色信息将被忽略启用光照时,物体顶点的颜色信息将被忽略 v 启用光照时,物体顶点的颜色取决于光源的颜色和物启用光照时,物体

23、顶点的颜色取决于光源的颜色和物 体材质的颜色体材质的颜色 指定材质属性指定材质属性 v 材质的属性材质的属性 n 环境颜色环境颜色 n 散射颜色散射颜色 n 镜面反射颜色镜面反射颜色 n 光洁度光洁度 n 发射光颜色发射光颜色 v 决定物体表面颜色的因素决定物体表面颜色的因素 n 材质的属性材质的属性 n 光源的属性光源的属性 n 光照模型光照模型 指定材质属性指定材质属性 v 指定材质属性的函数指定材质属性的函数 n glMaterialfv() 指定材质属性指定材质属性 v void glMaterialfv(GLenum face, GLenum pname, GLfloat* param); v 功能:功能: n 指定材质属性指定材质属性 v 参数:参数: n face: 指定正面或背面的材质指定正面或背面的材质 n pname: 指定要设置哪种材质属性指定要设置哪种材质属性 n param: 属性值的数组地址属性值的数组地址 v 返回值:无返回值:无 指定材质属性指定材质属性 v 备注:备注: n face可取如下值:可取如下值: uGL_FRONT uGL_BACK uGL_FRONT_

温馨提示

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

评论

0/150

提交评论