Direct3D学习手记四:光照、材质与顶点法向量

本文介绍Direct3D里的光照与物体材质以及顶点法向量

光照:

组成:

1.环境光(Ambient),基于自然界环境的整体亮度,周围物体的反射、折射

2.漫反射光(Diffuse),沿着特定方向传播,但到达物体表面后沿着各个方向均匀反射,所以在各个方向都能看到

3.镜面反射光(Specular),沿着特定方向传播,到达物体表面后会沿着另外一个特定的方向反射出去,只有在该方向观察,才可看见,不同于漫反射


类型:

1.点光源(Point),从一个中心位置向空间中各个方向发射强度相同的光线

Direct3D学习手记四:光照、材质与顶点法向量_第1张图片

2.方向光(Directional),从一个方向平行、均匀的传播到另一个方向,没有位置属性

Direct3D学习手记四:光照、材质与顶点法向量_第2张图片

3.聚光灯(Spot),从特定的位置,在特定的锥体范围内传播

Direct3D学习手记四:光照、材质与顶点法向量_第3张图片

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),根据类型设置默认属性的光源:

/****************************************************************
*函数名	:	SetL

你可能感兴趣的:(Direct3D【C++】)