光照材质完整版.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光照材质 opengl 学习笔记之光照、材质 OpenGL 在处理光照时把光照系统分为三部分,分别是光源、材质和光照模型。 光源、材质和光照模式都有各自的属性,尽管属性种类繁多,但这些属性都只用很少的几个 函数来设置。 使用 glLight*函数可设置光源的属性, 使用 glMaterial*函数可设置材质的属性, 使用 glLightModel*函数可设置光照模式。 GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR 这三种属性是光源和材质所共有的,如果某光源发 出的光线照射到某材质的表面,则最终的漫反射强度由两个 GL_DIFFUSE 属性共同决定,最 终的镜面反射强度由两个 GL_SPECULAR 属性共同决定。 在 OpenGL 中,仅仅支持有限数量的光源。使用 GL_LIGHT0 表示第 0 号光源,GL_LIGHT1 表 示第 1 号光源,依次类推,OpenGL 至少会支持 8 个光源,即GL_LIGHT0 到 GL_LIGHT7。使用 glEnable 函数可以开启它们。例如,glEnable(GL_LIGHT0);可以开启第 0 号光源。使用 glDisable 函数则可以关闭光源。一些 OpenGL 实现可能支持更多数量的光源,但总的来说, 开启过多的光源将会导致程序运行速度的严重下降, 光源 GL_LIGHT0 与其他几个光源不同, GL_DIFFUSE,GL_SPECULAR 的默认值是(1.0,1.0,1.0,1.0) 而其他光源的默认值是 (0.0,0.0,0.0,1.0)。 使用 OpenGL 的光照模型包括以下几个步骤: 1 设置光源的种类、位置和方向(对于平行光源) 2 为每个图元的每个顶点指定它的法线向量 3 为各个图元指定它的材质 4 启用光照模型 1 光源设置 设置环境光 glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight); 设置漫射光成分 glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseLight) 设置镜面光成分 glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularLight); 光源的属性 GL_SPECULAR 影响镜面反射区域的颜色,一般物体的镜面反射区域的颜色为 入射光线的颜色,要实现真实感,应该将它的值设置成与 GL_DIFFUSE 相同。 设置光源的位置 glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position); GL_POSITION 属性。表示光源所在的位置。由四个值(X, Y, Z, W)表示。 第 1 页 光照材质 方向性光源 第四个值 W 为零,则表示该光源位于无限远处,前三个值表示了它所在 的方向。通常,太阳可以近似的被认为是方向性光源。 位置性光源 第四个值 W 不为零,则 X/W, Y/W, Z/W 表示了光源的位置。这种光源称 为位置性光源。 定位光源需要对其发射的光进行衰减,可以设置各种衰减因子。环境光,散射光和镜面反射 光的贡献都是衰减的,只有发射光和全局环境光不会衰减。 对于,设置其位置与设置多边形顶点的方式相似,各种矩阵变换函数例如:glTranslate*、 glRotate*等在这里也同样有效。方向性光源在计算时比位置性光源快了不少, 因此,在视觉效果允许的情况下,应该尽可能的使用 方向性 光源。 下面定义了一个位置在(1,1,1),没有环境光,镜面反射光和漫反射光都为白光的光源 GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat light_ambient [] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat light_diffuse [] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSI

文档评论(0)

小蜗牛 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档