光照的两大要素是光源和物体的材质,物体表面材质属性决定了它能反射什么颜色的光线以及反射多少光线。
一、Direct3D中材质的定义
D3D中材质通过D3DMATERIAL9结构来表示:
typedef
struct
D3DMATERIAL9
...
{
D3DCOLORVALUE Diffuse;
D3DCOLORVALUE Ambient;
D3DCOLORVALUE Specular;
D3DCOLORVALUE Emissive;
float Power;
} D3DMATERIAL9, * LPD3DMATERIAL9;
D3DCOLORVALUE Diffuse;
D3DCOLORVALUE Ambient;
D3DCOLORVALUE Specular;
D3DCOLORVALUE Emissive;
float Power;
} D3DMATERIAL9, * LPD3DMATERIAL9;
- Diffuse-指定表面反射的漫反射光。
- Ambient-指定表面反射的环境光。
- Specular-指定表面反射的镜面光。
- Emissive-表面本身自发光。
- Power -镜面高光,它的值是高光的锐利值,该值越大表示高光强度与周围亮度相差越大。
表面顶点的颜色亮度总和为:
I表示物体的颜色值,上式表示物体的颜色总和=物体反射环境光+物体反射漫反射光+物体反射镜面反射光+自发光。
二、材质的应用
函数IDirect3DDevice9::SetMaterial()设置Direct3D当前的材质属性:
HRESULT SetMaterial(
CONST D3DMATERIAL9 * pMaterial
);
CONST D3DMATERIAL9 * pMaterial
);
参考文献:
Frank D. Luna:Introduction to 3D Game Programming with DirectX 9.0
翁云兵:3D游戏程序设计入门(DirectX9.0)
陈卡:DirectX9 3D 图形程序设计