发信人: rhine (有雨无风), 信区: BorlandDev
标 题: OpenGL在C++Builder中的应用(7)
发信站: 哈工大紫丁香 (Sun Aug 27 06:43:46 2000), 转信
发信人: jinchao (Sonic), 信区: BCB
发信站: BBS 水木清华站 (Fri Jul 30 09:12:51 1999) WWW-POST
(七)灯光
在现实世界中,光与物体的作用是十分复杂的,OpenGL作为实视绘图工具不可能作到
非常准确的模拟,而是在效果与速度之间采用一种折中的办法,仅在物体的几何顶点处进
行光照计算。
OpenGL中的光源有许多特性,主要有:
1. 环境光颜色 光源的光经环境的多次反射,弥散在整个空间,没有确定的方向
,它照射在物体表面时在所有方向上等量反射。
2. 散射光颜色 散射光有方向,受它直接照射的表面比受它扫射的面亮,而且从任
何方向上看,受它照射的面都是一样亮。
3. 反射光,反射光是来自某个特定方向,并在另一个方向上反射的光线,例如高质
量的平镜会产生百分之百的反射光
4. 另外还有光源的位置坐标,衰减指数以及专门针对于聚光灯的照射方向,聚光角
度,聚光常数等
这些特性都是用函数glLight*()定义的,原型如下:
void glLight{if}(GLenum light,GLenum pname,TYPE parqm);
void glLight{if}(GLenum light,GLenum pname,TYPE *parqm);
其中light为光源的编号,在OpenGL中一个场景最多可定义八个光源,编号分别为
GL_LIGHT0,GL_LIGHT1, ... ,GL_LIGHT7。pname为特性名称,parqm为特性值,如下:
特性名称 意义 默认值
—————————————————————————————
GL_AMBIENT 环境光RGBA值 (0.0, 0.0, 0.0, 1.0)
GL_DIFFUSE 散射光RGBA值 (1.0 ,1.0,1.0,1.0)
GL_SPECULAR 反射光RGBA值 (1.0, 1.0, 1.0 ,1.0)
GL_POSITION 位置坐标(x,y,z,w) (0.0, 0.0 ,1.0, 0.0)
GL_SPOT_DIRECTION 聚光灯方向(x,y,z) (0.0,0.0,-1.0)
GL_SPOT_EXPONENT 聚光指数 0.0
GL_SPOT_CUTOFF 聚光角度 180.0
GL_CONSTANT_ATTENUATION 常数衰减因子 1.0
GL_LINEAR_ATTENUATION 线形衰减因子 0.0
GL_QUADRATIC_ATTENUATION 二次衰减因子 0.0
具体方法请参看下节的例子,除定义光源外,还要定义场景的光照模式,一般要定义
以下三个部分:
1.全局环境光 除光源发出环境光外,还可以为场景指定无源环境光,这样即使没
定义光源也不至于看不见物体,可以用下面的语句定义:
GLfloat lmodel_ambient[]={0.2 ,0.2 ,0.2 ,1.0}
glLightModelv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
2. 观察点的位置 对于无穷远处的观察点,观察线与任意顶点之间的方向不变,这
样会减少运算量,但会使图象的质量下降,缺省观察点在无穷远处,定义观察点性质的语
句为:
void glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEW,GLbooloan param);
当param为true时观察点为本地观察点,为false时为无穷远观察点
3.光照面 有时场景中的物体的背面不会受到光照,例如空心球的内表面,当球被切
开时才会被照到,可用下面的函数控制是否对内表面进行运算
void glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GLbooloan param);
当param为true时两个面均被计算,为false是关闭双面光照模式
当定义好一个光源后,应用glEnable(GL_LIGHTING);使该光源生效,还要用
glEnable(GL_LIGHT*)使具体某光源生效,其中参数可取GL_LIGHT0,GL_LIGHT1,...GL_LIG
HT7.也可用glDisable(GL_LIGHT*);使该光源失效。
光源的内容先讲到这儿,下节继续介绍OpenGL中的重头戏——材质。光源的例子与
材质一起给出。
--
念天地之悠悠,
独沧然而泪下,
知我者谓我心忧,
不知我者谓我何求......
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: rhine.bbs@smth.org]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.908毫秒