CR的代码文本

all for learning about the world
  订阅 订阅  :: 管理

光照

Posted on 2010-12-01 12:54  mumuliang  阅读(420)  评论(0编辑  收藏  举报

虚拟图形的真实感是通过其表面的颜色和明暗来表现的。

一个物体表面呈现的颜色,是由面向视线方向辐射的光能决定。

图形学中用一个同时包含光能大小和方向的物理量,即光亮度(luminance)光强(intensity of light),来描述物体表面的辐射光Emitted(max中的自发光),

最终呈现的颜色是使用该物理量在光照模型中经过计算得到的。

光照模型要考虑的问题包括:

    1)物体表面的反射光

    2)周围环境的光对物体表面的影响。例如:光滑物体反射出的环境光;透明物体透出其背后的物体。

除此外,体现材质可使用纹理贴图,即纹理映射(texture mapping)

    3)将纹理图案一并计算

 

光照到物体表面之后,会分成三部分1)反射;2)透射;3)被吸收为热。

反射光分为三个分量:1)环境反射Ambient 2)漫反射Diffuse 3)镜面反射Specular (涉及Highlight区域) 

加上辐射光Emitted构成了OpenGL 的简单光照模型。

辐射光:从物体发出,并且不受任何光源影响;

环境光:由光源发出经环境多次散射而无法确定方向的光。

漫射光:来自同一个方向,垂直于物体时更明亮。照射到物体后,从多个方向发散出去。无论视点在哪儿都一样亮。

镜面光:来自特定方向,并从另一方向发射。  

 

明暗处理

光滑曲面常用细分的多边形逼近,每个小多边形轮廓/内部用单一的颜色或许多不同的颜色来勾画。如果用单一颜色来勾画,就是平面明暗处理Flat shading;用许多颜色处理就称光滑明暗处理Smooth Shading,也称Gourand Shading。设置明暗模式的函数glShadeModel(GLenum mode)

 

材质 

OpenGL用材料对光的红、绿、蓝的反射率来定义近似材料颜色。和光源一样,材料颜色也分成环境、漫反射和镜面反射。也就是环境的红绿蓝反射率、漫反射的红绿蓝反射率和镜面的红绿蓝反射率。除了三种反射光外,材质还有一个GL_SHININESS属性,表示镜面反射的高光值。