欢迎来到天天文库
浏览记录
ID:36737311
大小:159.00 KB
页数:36页
时间:2019-05-14
《OpenGL点光源》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OpenGL点光源 在OpenGL场景描述中可以包含多个点光源,光源的各种属性设置使用函数: voidglLight{if}(GLenumlight,GLenumpname,TYPEparam); voidglLight{if}v(GLenumlight,GLenumpname,TYPE*param);指定。其中,参数light指定进行参数设置的光源,其取值可以是符号常量GL_LIGHT0,GL_LIGHT1,…,GL_LIGHT7;参数pname指定对光源设置何种属性,其取值参见表10-1;参数
2、param指定对于光源light的pname属性设置何值,非矢量版本中,它是一个数值,矢量版本中,它是一个指针,指向一个保存了属性值的数组。表10-1参数pname的取值及其含义 (1)点光源的颜色 点光源的颜色由环境光、漫反射光和镜面光分量组合而成,在OpenGL中分别使用GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR指定。其中,漫反射光成分对物体的影响最大。 (2)点光源的位置和类型 点光源的位置使用属性GL_POSITION指定,该属性的值是一个由4个值组成的矢量(x,y,z,w)。其
3、中,如果w值为0,表示指定的是一个离场景无穷远的光源,(x,y,z)指定了光源的方向,这种光源被称为方向光源,发出的是平行光;如果w值为1,表示指定的是一个离场景较近的光源,(x,y,z)指定了光源的位置,这种光源称为定位光源。 (3)聚光灯 当点光源定义为定位光源时,默认情况下,光源向所有的方向发光。但通过将发射光限定在圆锥体内,可以使定位光源变成聚光灯。属性GL_SPOT_CUTOFF用于定义聚光截止角,即光锥体轴线与母线之间的夹角,它的值只有锥体顶角值的1/2。聚光截止角的默认值为180.0,意味着沿所有方向发射
4、光线。除默认值外,聚光截止角的取值范围为[0.0,90.0]。GL_SPOT_DIRECTION属性指定聚光灯光锥轴线的方向,其默认值是(0.0,0.0,-1.0),即光线指向z轴负向。而GL_SPOT_EXPONENT属性可以指定聚光灯光锥体内的光线聚集程度,其默认值为0。在光锥的轴线处,光强最大,从轴线向母线移动时,光强会不断衰减,衰减的系数是:轴线与照射到顶点的光线之间夹角余弦值的聚光指数次方。 (4)光强度衰减 属性GL_CONSTANT_ATTENUATION、GL_LINEAR_ATTENUATION、GL
5、_QUADRATIC_ATTENUATION分别指定了衰减系数c0,c1和c2,用于指定光强度的衰减。 在OpenGL中,必须明确启用或禁用光照。默认情况下,不启用光照,此时使用当前颜色绘制图形,不进行法线矢量、光源、光照模型、材质属性的相关的计算。要启用光照,可以使用函数: glEnable(GL_LIGHTING);指定了光源的参数后,需要使用函数: glEnable(light);启用light指定的光源。当然也可以用light参数调用glDisable函数,禁用light指定的光源。需要特别
6、说明的是,点光源的位置和方向是定义在场景中的,与景物一起通过几何变换和观察变换变换到观察坐标系中,因此光源既可以与场景中对象的相对位置保持不变,也可以使光源随观察点一起移动。 OpenGL全局光照 在OpenGL中,还需要设定全局光照(相当于背景光)。OpenGL提供了下面的函数对全局光照的属性进行定义。 voidglLightMode{if}(GLenumpname,TYPEparam); voidglLightMode{if}v(GLenumpname,TYPE*param);其中,参数pna
7、me指定全局光照的属性,其取值参见表10-2;参数param指定进行设置的属性的值。表10-2参数pname的取值及含义 属性GL_LIGHT_MODEL_AMBIENT指定OpenGL场景中的背景光,如果不指定,系统使用低强度的白色(0.2,0.2,0.2,1.0)光。 镜面反射时需要几个矢量参数,包括从物体表面到观察位置的矢量V,它指出表面位置与观察位置的关系。矢量V的默认方向为正z方向(0.0,0.0,1.0),如果不希望用默认值而使用位于观察坐标原点的实际观察位置来计算V,则将GL_LIGHT_MODEL_LO
8、CAL_VIEWER属性值指定为GL_TRUE。 在有些应用中,需要看到物体的后向面,例如实体的内部剖视图。此时需要打开双面光照,即对物体的前向面和后向面都进行光照计算。 在光照计算中,通常是分别计算环境光、表面散射光、漫反射光和镜面反射光的贡献,然后将其叠加。默认情
此文档下载收益归作者所有