OpenGL-光照模型

来源:互联网 发布:淘宝零食店加盟 编辑:程序博客网 时间:2024/03/29 20:58

1. 光的成分

 

(1)环境光:经过了充分散射,无法分辨其方向

(2)散射光:来自于某个方向,撞击表面时,均匀的向所有方向发散

(3)镜面光:来自于一个特定的方向,从特定方向反射,具有光泽的金属或塑料具有非常高的镜面成分

(4)发射光:模拟那些源自某个物体的光

 

  Opengl的光照模型根据所反射的红蓝绿光的比例来模拟颜色。

 

  对于光线而言,颜色成分的数量对应于某种颜色的完全强度的百分比,对于材料而言,它的RGB值和它对于这些颜色的反射比例相对应。

 

  如对于光线,RGB都等于0.5,这种光线应该是灰色的。对于材料,若R=1,G=0.5,B=0,则表示反射所有入社红光,一半绿光,不反射蓝光。

 

2. 创建光源

 

(1)颜色

GLfloat light_ambient[] = { 0.0, 0.0, 1.0, 1.0 };

glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);

glLgihtfv(GL_LIGHT0,GL_DIFFUSE,lgiht_diffuse);

...

 

(2)位置

光源根据其位置分为两类,第一类是方向性光源,光线到达表面时,所有的光线都是平行的;第二类是位置性光源,在场景中的位置决定了它对于场景的效果

 

GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

glLgihtfv(GL_LIGHT0, GL_POSITION, light_position);

light_position的4个值(x,y,z,w),若w为0.0, 则为方向性光源;若w为非0,则为位置性光源

对于位置性光源来说,存在着衰减因子。

 

(3)聚光灯

我们可以对位置性光源的形状加以限制,使它的发射范围限于一个锥体之内,就像聚光灯一样。

需要设置光锥的角度,聚光灯的方向,光锥的轴

光的强度在光锥的中心达到最高,靠近光锥的边缘,光的强度越弱

 

(4)多光源

我们至少可以指定8个光源

 

3. 材料属性

 

(1)散射和环境反射

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);

环境颜色影响物体的整体颜色,物体被直接照亮时,散射颜色占据主要地位

 

(2)镜面反射

 

GLfloat mat_specular[] = {};

GLfloat low_shininess[] = { 50.0 };

glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);

glMaterialfv(GL_FRONT,GL_SHININESS,low_shininess);

GL_SHINESS的值越大,亮点越小,更亮。

 

(3)发射光颜色

glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);

 

(4)颜色材料模式

 

glEnable(GL_COLOR_MATERIAL);

glColorMaterial(GL_FRONT, GL_DIFFUSE);

glColor3f(0.2, 0.5, 0.8 );

glDisable(GL_COLOR_MATERIAL);

 

 

4. 光照模型

 

(1)全局环境光

GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

 

(2)局部观察点或无限远的观察点

 

(3)双面光照

glLightModeli(GL_LIGHT_MODEL_TWO_SIZE, GL_TRUE);

会反转背面的法线方向。

 

(4)镜面辅助颜色

 

完整的光照计算公式:

 

顶点颜色 = emission(material) + ambient(light model) * ambient(material) +

           衰减因子 * [ ambient(light) * ambient( material) +

                        (L*n) * diffuse(light) * diffuse( material) +

                        pow( (s*n), shininess ) * specular(light) * specular( material) ]

原创粉丝点击