D3D 材质和灯光

我们在生活中看到的光有环境光, 漫反射光以及璄面反射光还有物体本身发射的光. 因此我们在定义材质时就要描述对这些光反应.

看看材质结构体的定义:

 

typedef struct _D3DMATERIAL9 {
    D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */
    D3DCOLORVALUE   Ambient;        /* Ambient color RGB */
    D3DCOLORVALUE   Specular;       /* Specular ‘shininess’ */
    D3DCOLORVALUE   Emissive;       /* Emissive color RGB */
    float           Power;          /* Sharpness if specular highlight */
} D3DMATERIAL9;

 

typedef struct _D3DCOLORVALUE {     float r;     float g;     float b;     float a;
} D3DCOLORVALUE;

 

Diffuse: 指定表面反射的漫射光数量.

Ambient: 指定表面反射的环境光数量.

Specular: 指定表面发射的境面光数量.

Emissive: 这个用来给表面添加颜色, 用来指定物体本身发出光的颜色.

 

材质中每个值都是D3DCOLORVALUE 结构, 这个结构其实反映了, 这个材质对某种光的那些颜色反射多少.

D3DMATERIAL9 matrl;

matrl.Diffuse.r = 0.5f;

matrl.Diffuse.b = 1.0f;

matrl.Diffuse.g = 0.0f;

那么其结果就是对漫反射光,这个材质将一半的红色光反射, 全部的蓝色光反射, 全部的绿色光吸收.

 

 

还有一点非常重要, 在渲染一个模型时你可以打开光源, 而渲染另外一个时你可以关闭光源. 以前我的理解是在场景中选择了一个光源后那么所有在这个场景中的模型都是一直受影响的. 原来可以随时打开光源, 关闭光源. 可以随时设置另外一种光源.

 

 

 

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:
This entry was posted in DirectX3D and tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*