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学习笔记——光照

1、隐藏表面消除 隐藏表面消除就是消除实心物体被其他物体所遮挡住的部分,最简单的方法就是使用深度缓冲区。深度缓冲区的原理是把一个距离观察平面(通常是近侧裁剪平面)的深度值与窗口中的每一个像素相关联。...
  • John_cdy
  • John_cdy
  • 2015-08-31 09:51:26
  • 1794

OpenGL光照模型--四种光照效果

OpenGL光照模型           为了能看出3D效果,给场景中添加光源。如果没有光照,绘出的球看上去和一个二维平面上圆没什么差别,如下图,左边为有光照效果的球体,右边为同一个球体但没有设置光...
  • langzi007008
  • langzi007008
  • 2016-04-16 20:37:01
  • 2823

OpenGL纹理映射和光照效果

在前面我们已经可以绘制出一个带有颜色的立方体了,但是这些颜色是系统自带的黄色,绿色等,有时候这并不能满足我们的要求,这时候就需要将纹理映射到立方体上去了。       为使用纹理,我们需要打开Ope...
  • wangkuifeng0118
  • wangkuifeng0118
  • 2012-04-05 14:29:31
  • 7726

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

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

用opengl做的光照阴影效果完整源码

  • 2009年07月18日 08:32
  • 257KB
  • 下载

OpenGL的基础光照和计算

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

浅析OpenGL光照

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

OpenGL光照的计算模型

diffuse specular, phong, bllin
  • huangzhipeng
  • huangzhipeng
  • 2010-09-24 19:40:00
  • 8253

OpenGL光照测试(源代码+演示程序)

  • 2013年08月07日 22:24
  • 13.36MB
  • 下载

OpenGL(七) 光照模型及设置

OpenGL把现实世界中的光照系统近似归为三部分,分别是光源、材质和光照环境。 光源就是光的来源,是“光”这种物质的提供者; 材质是指被光源照射的物体的表面的反射、漫反射(OpenGL不考虑...
  • dcrmg
  • dcrmg
  • 2016-11-10 23:42:53
  • 8830
收藏助手
不良信息举报
您举报文章:OpenGL光照 学习笔记(转)
举报原因:
原因补充:

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