- OpenGL把光照分成了四种成分表面颜色SurfaceColor=放射光emissive+环境光ambient+散射光diffuse+镜面反射光specular
- 环境光照(ambient)
光源:环境光是经过环境多次散射,无法确定其方向的光。材质:环境光照射到表面时,将沿各个方向均匀地散射。
- 漫反射光照(diffuse)
光源:散射光具有方向性,来自于一个特定的方向。材质:散射光到达表面后,将沿各个方向均匀地散射。
- 镜面反射光照(specular)
光源:来自于特定方向且被反射到特定方向的光。材质:只沿一个特定的方向反射。
- 放射光照(emission)
光源:物体自身发出的光。
材质:物体表面的发射光增加了物体的亮度,但是不会给整个场景增加光线。
- glEnable(GL_LIGHTING);//启用光照
- glEnable(GL_LIGHT*);//启用光源
- 光照模型属性
- 函数
void glLightModel{if}(GLenum pname, TYPE param);
void glLightModel{if}v(GLenum pname, TYPE *param); - 参数
- 光源属性
- 函数原型
void glLight{if}(GLenum light, GLenum pname, TYPE param);
void glLight{if}v(GLenum light, GLenum pname, TYPE* param); - 参数说明:
1) light: 创建由参数light指定的光源,它可以是GL_LIGHT0, GL_LIGHT1, …GL_LIGHT7。
2) pname: 光源属性名。
3) param:表示pname属性将要设置的值。 - 物体材质
- 函数
void glMaterial{if}(GLenum face, GLenum pname, TYPE param);
void glMaterial{if}v(GLenum face, GLenum pname, TYPE *param); - 参数说明:
face:可以取值:GL_FRONT、GL_BACK、GL_FRONT_AND_BACK。表示材料属性应用于物体的哪个表面。
pname:材质属性标识符。
param:材质属性的值。它可以是指向数组的指针(在矢量形式下),也可以是属性值本身(在非矢量形式下)。 - 函数 颜色材质模式
glColorMaterial(GL_FRONT,GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glColor3f(0.3,0.5,0.7);
OpenGL解析
光照模型