• 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);
    • 参数
      image.png
    • 光源属性
    • 函数原型
      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属性将要设置的值。
      image.png
      image.png
    • 物体材质
    • 函数
      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:材质属性的值。它可以是指向数组的指针(在矢量形式下),也可以是属性值本身(在非矢量形式下)。
      image.png
    • 函数 颜色材质模式
      glColorMaterial(GL_FRONT,GL_DIFFUSE);
      glEnable(GL_COLOR_MATERIAL);
      glColor3f(0.3,0.5,0.7);

    OpenGL解析
    光照模型