Direct3D中的光照

一、概述


         为了增强所绘制场景的真实感,我们可以为场景增加光照。光照也有助于描述实体形状和立体感。使用光照时,我们无需自行指定顶点的颜色值:Direct3D会将顶点送入光照计算引擎,依据光源类型、材质以及物体表面相对于光源的朝向,计算出每个顶点的颜色值。基于某种光照模型计算出各顶点的颜色,会使绘制结果更加逼真。

二、光照的组成


          在Direct3D的光照模型中,光源发出的光由以下3个分量或3种类型的光组成

          ●环境光(Ambient Light)这种类型的光经其他表面反射到达物体表面,并照亮整个场景。物体之所以会被照亮,是由于其他物体对光的反射。要想以较低代价粗略地模拟这类反射光,环境光是一个很好的选择。

          ●漫射光(Diffuse Light)这种类型的光沿着特定的方向传播。当它到达某一表面时,将沿着各个方向均匀反射。由于漫射光沿所有点的方向均匀反射,无论从哪个方位观察,表面亮度均相同,所以采用该模型时,无需考虑观察者的位置。

          ●镜面光(Specular Light)这种类型的光沿特定的方向传播。当此类光到达一个表面时,将严格地沿着另一个方向反射,从而形成只能在一定角度范围内才能观察到的高亮度照射。镜面光与其他类型的光相比,计算量要大很多。默认状态下,Direct3D不进行镜面反射计算:如果想启用镜面光,必须将绘制状态D3DRS_SPECULARENABLE设为TRUE。

         每种类型的光都可用结构D3DCOLORVALUE或D3DXCOLOR来表示,这些类型描述了光线的颜色。描述光线颜色时,D3DXCOLOR类中的Alpha值都将被忽略。

三、材质


          在显示世界中,我们所观察到的物体的颜色是由该物体所反射的光的颜色决定的。例如一个纯红色的球体反射了全部的红色入射光,并吸收了所有非红色的光,所以该球体呈现为红色。Direct3D通过定义物体的材质来模拟同样的现象。材质允许我们定义物体表面对各种颜色光的反射比例

         材质的定义如下:

         typedef struct D3DMATERIAL9{
                D3DCOLORVALUE  Diffuse;
                D3DCOLORVALUE  Ambient;
                D3DCOLORVALUE  Specular;
                D3DCOLORVALUE  Emissive;
                float          Power;
         }D3DMATERIAL9, *LPD3DMATERIAL9;

        ●Diffuse 指定材质对漫射光的反射率。
        ●Ambient 指定材质对环境光的反射率。
        ●Specular 指定材质对镜面光的反射率。
        ●Emissive 该分量用于增强物体的亮度,使之看起来好像可以自己发光。
        ●Power 指定镜面高光点的锐度,该值越大,高光点的锐度越大。

       顶点结构中不含有材质属性,但我们必须对当前材质进行设定
        如下函数用来对当前材质进行设定:

你可能感兴趣的:(图形图像,DirectX9,3D,光照)