本节,我们介绍打光处理;
其实,这个功能在阴影的部分已经不常被使用,
但只要能善加应用的话,也是可以用在其它各种特效上面的。
多边形的面的显示什么颜色,是由组成它的顶点的
defuse色(基本色)和
specular色(镜面反射色)决定的。
关于打光处理部分,DirectXGraphics提供了两种模式:
No lighting mode 和
lighting mode前者,需要我们手动指定每个顶点的基本色和镜面反射色;
后者,DirectXGraphics会根据设定的
光线(Light) 材质(material) 法线(normal) 以及摄像机的设定
等资讯,模拟出光线反射的情况,来自动计算出
基本色和
镜面反射色。
下面,我们主要介绍lighting mode模式。
首先,
光;
什么是
光?
DirectXGraphics中的
光[light],指的是为了模拟太阳或电灯泡等光源时使用的
参数的集合。
在directxGraphics中,有三种常用光源:
directional light[平行光源],
point light[点光源] ,
spot light[聚光光源]
在DirectxGraphics中,要设定光源的话,必须依照如下的程序:
1,移至lightling mode;
2,宣告结构;
3,制作光源以及将其设为有效;
1 //将Rendering pipeline移动至Lighting模式
2 pD3DDevice->SetRenderState(D3DRS_LIGHTING,TRUE);
3
4 //声明light的结构
5 D3DLIGHT9 m_light;
6 //清空结构
7 ::ZeroMemory(&m_light,sizeof(D3DLIGHT9));
8 //光源类型设定:设定为平行光源
9 m_light.Type = D3DLIGHT_DIRECTIONAL;
10 //光源颜色设置
11 m_light.Diffuse.r = 1.0f;
12 m_light.Diffuse.g = 1.0f;
13 m_light.Diffuse.g = 1.0f;
14
15 //
16 //m_light.Specular.r(g,b)//光的镜面反射色
17 //m_light.Ambient.r(g,b)//环境光
18
19 //光源方向的设置
20 D3DXVECTOR3 mVecDir;
21 mVecDir = D3DXVECTOR3(-5.0f,-5.0f,10.0f);
22 D3DXVec3Normalize((D3DXVECTOR3*)&m_light.Direction,&mVecDir);
23
24 //设置为有效
25 pD3DDevice->SetLight(0,TRUE);
26
下一节,我们介绍
材质;