光照概念
OpenGL中的光分为四类:
- Anbient 环境光,可以当成没有固定光源,即从各个方向射向物体的光
- Diffuse 漫反射,来自固定光源的光,但是向各个方向均匀反射,各个方向观察到的亮度相同
- Specular 镜面反射,来自固定光源的光,向各个方向不均匀反射,在正对的方向可以看到高光
- Emission 发射光,模拟物体自身发光
使用
光源
光源使用函数glLightfv(light, property, value)
设置参数,可设置的属性有
- anbient
- diffuse
- specular
- position
物体
物体使用函数glMaterialfv(face, property, value)
设置参数,可设置的属性有
- anbient
- diffuse
- specular & shininess
- emission
为了模拟现实中的情况,一般将anbient与diffuse设置为相同颜色,specular设置为white,shininess取值(0-128)
如果使用自定义的物体,还需要计算并指定各个顶点的法向量
// to be continued
函数手册
参考代码 solar.c
glLightfv (GL_LIGHTi, GL_POSITION, position)
设置光源的位置,其中position[4] = {x, y, z, w}
if (w == 0) { 方向光源,可视为平行光; }
else (w > 0) { 点光源 }
参考资料