OpenGL光源、材质和光照模型

好久没写博客了,从现在开始,养成一个好的习惯,不断的进行总结。

以前都是直接用,效果好就行,不管是具体怎么设置的。现在突然想想什么都学不到,于是就自己动手调试了一番,做了一下总结:

OpenGL在处理光照的过程中主要包含三项内容,光源、材质和光照模型。也就是我们在光照设置的代码中常看到的glLightfv、glMaterialfv和glLightModelfv。其中要注意的是,GL_AMBIENT(环境光)、GL_DIFFUSE(漫反射光)、GL_SPECULAR(镜面反射)这三种属性是光源和材质所共有的。光源和材质的相同属性共同影响,并作用最终的显示效果。

1.光源

光源的设置按照3+1的原则来进行设置,3代表的是GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR这三种属性,1代表的是光源的位置。光源的位置中又包含了两种模 式,一种是位置性光源,一种是方向性光源。具体的可参考OpenGL的API。

在这里不得不提的在整个环境中的光源个数问题。GL_LIGHT0代表第0号光源,依次类推。注意GL_LIGHT0与其他光源的默认属性是有区别的。GL_LIGHT0

GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0),而其他光源的默认值是(0.0,0.0,0.0,1.0)。这一点在光源属性的初始化过程中尤为重要。

2.材质

材质除了具有上面提到的那3个属性外,另外还增加了GL_SHININESS(镜面指数)和GL_EMISSION,这些属性的设置根据OpenGL的API可以完成设置。

但是,材质的颜色与光源的颜色有些不同。对于光源,R、G、B 值等于R、G、B 对其最大强度的百分比。若光源颜色的R、G、B 值都是1.0,则是最强的白光;若值变 为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B 值为材质对光的R、G、B 成分的反射率。比 如,一种材质的R=1.0、G=0.5、B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL 的光源颜色为(LR、LG、LB),材质颜 色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)。

3.光照模型

光照模型包含四部分,分别为:全局环境光,近视点或远视点,双面光照,镜面反射颜色是否和环境颜色、散射颜色分开。没什么特殊要求按照我提供的代码进行设置 即可。一般项目对这部分很少做细致的要求。

最后,别忘记先开光照,然后在打开设置好的灯。

附本人调试好的源代码,希望大家互相交流。


你可能感兴趣的:(VC++)