本文介绍Direct3D里的光照与物体材质以及顶点法向量
光照:
组成:
1.环境光(Ambient),基于自然界环境的整体亮度,周围物体的反射、折射
2.漫反射光(Diffuse),沿着特定方向传播,但到达物体表面后沿着各个方向均匀反射,所以在各个方向都能看到
3.镜面反射光(Specular),沿着特定方向传播,到达物体表面后会沿着另外一个特定的方向反射出去,只有在该方向观察,才可看见,不同于漫反射
类型:
1.点光源(Point),从一个中心位置向空间中各个方向发射强度相同的光线
2.方向光(Directional),从一个方向平行、均匀的传播到另一个方向,没有位置属性
3.聚光灯(Spot),从特定的位置,在特定的锥体范围内传播
Direct3D中表示光源的结构体:D3DLIGHT9
typedef struct D3DLIGHT9 {
D3DLIGHTTYPE Type;
D3DCOLORVALUE Diffuse;
D3DCOLORVALUE Specular;
D3DCOLORVALUE Ambient;
D3DVECTOR Position;
D3DVECTOR Direction;
float Range;
float Falloff;
float Attenuation0;
float Attenuation1;
float Attenuation2;
float Theta;
float Phi;
} D3DLIGHT9, *LPD3DLIGHT;
成员介绍:
Type为光源类型,有D3DLIGHT_POINT点光源,D3DLIGHT_DIRECTIONAL平行光,D3DLIGHT_SPOT聚光灯
Diffuse、Specular、Ambient指定光源的光照类型
Position为光源位置,仅对平行光无效
Direction为光的传播方向,对点光源无效
Range为光照范围,对平行光无效
Falloff为聚光灯从内到外的衰减系数,一般取1.0
Attenuation0[1,2]为光沿着传播方向的衰减系数
Theta为聚光灯内锥体的弧度
Phi为聚光灯外锥体的弧度
说明:
程序中要使用光源,必须注册光源,并且打开光照,开启光源才会有效
打开光照用:
pd3dDevice->SetRenderState(D3DRS_LIGHTING,true);//开启光照
注册并打开光源用:pd3dDevice->SetLight(nType-1,&light);//注册光源
pd3dDevice->LightEnable(nType-1,true);//开启注册的光
如果要使用镜面反射,必须自行打开(默认是关闭的):
pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE,true);//开启镜面发射
以下为设置光源的函数(SetLight),根据类型设置默认属性的光源:
/****************************************************************
*函数名 : SetLig