OpenGL光照 学习笔记(转)

原创 2007年10月08日 11:56:00

我的毕业设计要用到OpenGL,时间不多了,估计学习的时间也就一两个月吧。没办法,只好硬着头皮学了,不知道这一两个月能学多少。

  光照

光照是非常重要的一部分,对光照的设置分为三个部分:

1,创建光源

光源有几个特征参数,如颜色、位置和方向。用于指定光源属性参数的函数是glLight*(),它有三个参数,分别标识需要指定属性的光源、光源属性和属性值。

              void glLight{if}[v](GLenum light,GLenum pname,TYPE param);

创建由light指定的光源,它可以是GL_LIGHT0,GL_LIGHT1,。。。。或GL_LIGHT7。光源的属性由pname定义,常用的参数有GL_AMBIENT(设置光源的环境光亮度),GL_DIFFUSE(散射光亮度),GL_SPECULAR(镜面反射光亮度)和GL_POSITION,param参数为pname指定了光源的属性值。例如为光源LIGHT0指定环境光为(0.0,0.0,0.0,1.0),则语句为:glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 其中light_ambient为值为上述四值的数组。

2,选择光照模型

每一个光源都将给场景带来一定的环境光。另外,还可能存在与任何光源都无关的环境光。这就要设置全局的环境光,函数是: glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); lmodel_ambient为全局环境光的强度值。此外还要设置视点的远近,glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); 该函数将视点设于(0,0,0)点如果要将视点重新置于无穷远,以GL_FALSE作为参量调用此函数即可。再有就是是否是双面光照,函数是glLightModeli(LIGHT_MODEL_TWO_SIDE, GL_TRUE);最后就是激活光照。glEnable(GL_LIGHTINT);用于激活光照。glEnable(GL_LIGHTx);用于激活光照LIGHTx。

3,材料属性的定义

在这里主要是定义场景中物体的材料属性;环境颜色、散射颜色、镜面反射颜色、亮度和发射光的颜色。与创建光源非常类似。所用的函数是glMaterial*().

void glMaterial{if}[v](GLenum face, GLenum pname, TYPE param);

参数face分别可以取GL_FRONT, GL_BACK或GL_FRONT_AND_BACK,表示材料属性应用于物体的哪个表面。所设置的材料属性由pname标识,属性值由param给出。

 

要真正掌握光照效果可不是件容易的事,不光要理解光照的数学计算理论,还得有长时间的编程实践和试验。唉,看来是路漫漫兮其修远。我只好慢慢求索了。

若光源未被激活,则顶点的颜色就是当前颜色;如果激活了光源,则为计算了光照后的颜色。

照亮一个顶点产生的颜色按下式计算:

顶点颜色=该顶点发射光的颜色+由材质环境光属性放大的全局环境光颜色+从各个光源发出,经过衰减的环境光、散射光和镜面反射不颜色

光照计算完成以后,颜色值(RGBA模式下)将被截取在区间[0 , 1]之内。

1,材质的发射光

材质的发射光最简单。它就是分配给GL_EMMISION参数的RGB值。

2,放大的全局环境光

这是由全局环境光(由参数GL_LIGHT_MODEL_AMBIENT进行定义)与材质的环境光属性相乘得到。

3,光源的贡献

每个光源对顶点颜色均有贡献,这些贡献是叠加在一起的。计算每个光源的贡献可以按照下面的方程:

整个光源的效果=衰减系数*聚光灯效果*(环境光项+散射光项+镜面反射光项)

4,聚光灯效果

如果光源不是聚光灯,则取值为1。

5,环境光项

环境光项就是光线中的环境光颜色和材质的环境光属性简单相乘的结果。

6,散射光项

散射光项需要考虑光线是否照在该顶点上、入射光的散射光颜色、以及材质的散射光属性。

OpenGL学习脚印: 光照基础(basic lighting)

写在前面 上一节坐标变换过程,总结了OpenGL中顶点的处理过程。有了前面的基础,从本节开始,我们可以开始学习OpenGL中包括光照、模型加载等主题。光照是一个复杂的主题,本节学习简单的Phon...
  • ziyuanxiazai123
  • ziyuanxiazai123
  • 2016年06月12日 23:39
  • 5313

OpenGL的基础光照和计算

本文主要介绍了OpenGL中的光照以及固定管线光照的计算(在Coreprofile中的计算)...
  • csxiaoshui
  • csxiaoshui
  • 2016年11月30日 11:48
  • 2265

OpenGL(七) 光照模型及设置

OpenGL把现实世界中的光照系统近似归为三部分,分别是光源、材质和光照环境。 光源就是光的来源,是“光”这种物质的提供者; 材质是指被光源照射的物体的表面的反射、漫反射(OpenGL不考虑...
  • dcrmg
  • dcrmg
  • 2016年11月10日 23:42
  • 7136

浅析OpenGL光照

浅谈OpenGL的光照          之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是...
  • jiangcaiyang123
  • jiangcaiyang123
  • 2013年08月07日 13:21
  • 4269

OpenGL3.0教程 第十五课:光照贴图

作者:  时间: April 10, 2014  分类: OpenGL ES OpenGL3.0教程 原文链接:http://www.opengl-tutorial.org/i...
  • hi_zhengjian
  • hi_zhengjian
  • 2015年09月28日 09:43
  • 1045

【OpenGL】nehe教程第一课学习笔记

nehe教程的第一课主要讲了OpenGL程序的创建。 它引用了最基本的gl.h、glu.h、glaux.h三个头文件。 包含了五个函数,分别是InitGL、ResizeGLScene、DrawGLSc...
  • lzh1590
  • lzh1590
  • 2017年03月22日 16:22
  • 210

初识openGL---openGL学习笔记(一)

openGL: openGL是用C语言实现的,而我们作为安卓开发者,严格来讲,我们使用的是es,也就是openGL es,原因无非就像数据库一样,安卓上使用的数据库永远不可能是Mysql之类的,因为终...
  • a358333644
  • a358333644
  • 2016年02月24日 17:04
  • 469

OpenGL之路(八)添加光照效果和键盘控制

在opengl中添加光照的效果,可用键盘控制放大缩小 w键放大 s键缩小 d键开关灯 预览效果如下: 源码如下: #include #include #include #pragma co...
  • xianyun2009
  • xianyun2009
  • 2014年09月19日 09:39
  • 1751

OpenGL光照设置问题

OpenGL在处理光照时把光照系统分为三部分,分别是光源、材质和光照模型。 光源、材质和光照模式都有各自的属性,尽管属性种类繁多,但这些属性都只用很少的几个函数来设置。 使用glLight...
  • Nice_punch
  • Nice_punch
  • 2016年12月28日 15:38
  • 1415

OpenGL ES 光照效果

一个立方体 光照模型 环境光 散射光 镜面光为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年10月24日 22:54
  • 1795
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL光照 学习笔记(转)
举报原因:
原因补充:

(最多只允许输入30个字)