OpenGL中的光照相关

光照概念

OpenGL中的光分为四类:

  1. Anbient 环境光,可以当成没有固定光源,即从各个方向射向物体的光
  2. Diffuse 漫反射,来自固定光源的光,但是向各个方向均匀反射,各个方向观察到的亮度相同
  3. Specular 镜面反射,来自固定光源的光,向各个方向不均匀反射,在正对的方向可以看到高光
  4. 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) { 点光源 }


参考资料

RGBA HSB opengl光照模型 - szllq2000 - 博客园