资源描述:
《OpenGL中的光照模型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、OpenGL中的光照模型一、OpenGL的光照模型在OpenGL的简单光照模型中反射光可以分成三个分量,环境反射光(AmbientLight)、漫反射光(DiffuseLight)和镜面反射光(SpecularLight):a、环境光Ambient,是由光源发出经环境多次散射而无法确定其入射方向的光,即似乎来自所有方向。当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。特征:入射方向和出射方向均为任意方向。b、漫射光Diffuse,来自特定方向,它垂直于物体时比倾斜时更明亮。一旦它照
2、射到物体上,则在各个方向上均匀地发散出去,效果为无论视点在哪里它都一样亮。特征:入射方向唯一、出射方向为任意方向。c、镜面光Specular,来自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。特征:入射方向和出射方向均唯一。二、创建光源定义光源特性的函数:glLight*(light,pname,param)其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7;第二个参数pname指定光源特性,这个参数
3、的辅助信息见表1所示;最后一个参数设置相应的光源特性值。pname参数名缺省值说明GL_AMBIENT(0.0,0.0,0.0,1.0)RGBA模式下环境光GL_DIFFUSE(1.0,1.0,1.0,1.0)RGBA模式下漫反射光GL_SPECULAR(1.0,1.0,1.0,1.0)RGBA模式下镜面光GL_POSITION(0.0,0.0,1.0,0.0)光源位置齐次坐标(x,y,z,w)GL_SPOT_DIRECTION(0.0,0.0,-1.0)点光源聚光方向矢量(x,y,z)GL_SPO
4、T_EXPONENT0.0点光源聚光指数GL_SPOT_CUTOFF180.0点光源聚光截止角GL_CONSTANT_ATTENUATION1.0常数衰减因子GL_LINER_ATTENUATION0.0线性衰减因子GL_QUADRATIC_ATTENUATION0.0平方衰减因子表1函数glLight*()参数pname说明注意:以上列出的GL_DIFFUSE和GL_SPECULAR的缺省值只能用于GL_LIGHT0,其他几个光源的GL_DIFFUSE和GL_SPECULAR缺省值为(0.0,0.
5、0,0.0,1.0)。三、启用光源和明暗处理如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源、材质等复杂计算。要启用光照或关闭光照,调用函数:glEnable(GL_LIGHTING)或glDisable(GL_LIGHTING)。启用光照后必须调用函数glEnable(GL_LIGHT0),使所定义的光源有效。其它光源类似,只是光源号不同而已。在OpenGL中,用单一颜色处理的称为平面明暗处理(FlatShading),用许多不同颜色处理的称为光滑明暗处理(SmoothSh
6、ading),也称为Gourand明暗处理(GourandShading)。设置明暗处理模式的函数为:glShadeModel(mode)函数参数mode为GL_FLAT或GL_SMOOTH,分别表示平面明暗处理和光滑明暗处理。四、光源的颜色、位置与衰减光源的颜色由AMBIENT、DIFFUSE、SPECULAR决定。其中DIFFUSE(漫反射光)与光源的颜色最紧密;要实现真实感,应将属性SPECULAR的值设置成与DIFFUSE相同。光源位置坐标采用齐次坐标(x,y,z,w)设置。w为0.0,相应
7、的光源是定向光,(x,y,z)描述光源的方向,该方向将根据模型视点矩阵进行变换;w为1.0,光源为定位光源。(x,y,z,w)指定光源在齐次坐标系下的具体位置,该位置根据模型视点矩阵进行变换,保存为视点坐标系下的坐标。离光源越远则光强越弱。由于定向光源是无穷远光源,根据距离衰减光强无意义,因此对于定向光源将禁用衰减;对于定位光源有衰减,OpenGL的光衰减是通过光源的发光量乘以衰减因子以实现衰减。衰减系数=1/(K0+K1*D+K2*D2)其中:D=光源位置与顶点之间的距离K0=GL_CONSTAN
8、T_ATTENUATIONK1=GL_LINER_ATTENUATIONK1=GL_QUADRATIC_ATTENUATION环境光、漫反射光和镜面光的强度都衰减,只有辐射光和全局环境光的强度不会衰减。由于每次计算颜色时,使用衰减的光源会增加额外的计算而可能降低应用程序的性能。五、聚光灯定位光源可以进一步定义成聚光灯形式,即将光的形状限制在一个圆锥内。(1)、定义聚光截止角:参数GL_SPOT_CUTOFF给定光锥的轴与中心线的夹角,也可说成是光锥顶角的一半。缺省时,