第13讲 OpenGL 光照.pptVIP

  • 5
  • 0
  • 约6.16千字
  • 约 43页
  • 2017-06-08 发布于湖北
  • 举报
第13讲 OpenGL 光照

选择光照模型 全局环境光 即使没有其他光源,也可以看到场景中的物体 例:设置全局环境光颜色 GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); 选择光照模型 void glLightModeli(GLenum pname, GLint param); 功能: 选择光照模型 参数: pname: 光照模型的类型 param: 该类型的值 返回值:无 备注: pname可以取值为: GL_LIGHT_MODEL_LOCAL_VIEWER //观察点是否无穷远(GL_FALSE) GL_LIGHT_MODEL_TWO_SIDE //单面还是双面光照(GL_FALSE ) 选择光照模型 观察点靠近物体还是无穷远 在视点无穷远的情况下,场景中任何顶点到视点的方向都是同一常数。 否则,则不然,但效果会更加真实 例:指定观察点无穷远 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); 选择光照模型 单面光照或双面光照 多边形的正面和背面是否都需要光照 例:指定双面光照 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); 内容进度 光照概述 创建光源 选择光照模型 指定材质属性 指定材质属性 启用光照时,物体顶点的颜色信息将被忽略 启用光照时,物体顶点的颜色取决于光源的颜色和物体材质的颜色 指定材质属性 材质的属性 环境颜色 散射颜色 镜面反射颜色 光洁度 发射光颜色 决定物体表面颜色的因素 材质的属性 光源的属性 光照模型 指定材质属性 指定材质属性的函数 glMaterialfv(…) 指定材质属性 void glMaterialfv(GLenum face, GLenum pname, GLfloat* param); 功能: 指定材质属性 参数: face: 指定正面或背面的材质 pname: 指定要设置哪种材质属性 param: 属性值的数组地址 返回值:无 指定材质属性 备注: face可取如下值: GL_FRONT GL_BACK GL_FRONT_AND_BACK 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_SHININESS (0.0) GL_EMISSION (0.0, 0.0, 0.1, 1.0) 指定材质属性 例:散射和环境光反射 GLfloat mat_amb_diff[] = { 0.1, 0.5, 0.8, 1.0 }; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff); 例:镜面反射材质 GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat low_shininess[] = { 5.0 }; glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); 指定材质属性 例:发射光颜色 GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); 发射光材质使物体看起来发出微光,而并不是光源 要模拟光源,必须创建一个光源,并将其放在物体所在位置 例:Material 定向光源:将光源位置设置为离场景不穷远 定位光源: * 现实世界中,离光源越远,光强越弱。红皮书P129 * 3.6 OpenGL光照 光照概述 创建光源 选择光照模型 指定材质属性 光照概述 现实世界中,如果没有光,我们几乎看不到任何东西 在OpenGL中,大多数物体在没有光照的情况下,看起来甚至是二维的 有光照 没有光照 光照概述 光照通常是在纹理映射之前进行的 光照效果: 可以看到纹理(贴图) 光照可以大幅增加场景的真实感 启用光照,将看不到物体表面的颜色信息 启用光照,可以看到物

文档评论(0)

1亿VIP精品文档

相关文档