灯光分为:
环境光,漫反射,镜面反射。
在用到镜面光时,必须打开,默认状态为关闭:
Device->SetRenderState( D3DRS_SPECULARENABLE, true)
材质:
Diffuse: 指定此表面反射的漫射光数量。
Ambient : 指定此表面反射的环境光数量
Specular : 指定此表面反射的镜面光数量
Emissive : 这个是被用来给表面添加颜色,它使得物体看起来就象是它自己发出来的一样
Power : 指定锐利的镜面高光,它的值是高光的锐利值。
D3DMATERIAL9 red
ZeroMemorey( &red, sizeof(red));
red.Diffuse = D3DXCOLOR( 1.0F, 0.0F, 0.0F, 1.0F) //RED
red.Ambient = D3DXCOLOR( 1.0F, 0.0F, 0.0F, 1.0F) //RED
red.Specular = D3DXCOLOR( 1.0f, 0.0f, 0.0f, 1.0f) //red
red.Emissive = D3DXCOLOR( 0.0f, 0.0f, 0.0f, 1.0f) //no emission
red.Power = 5.0;
设置材质: 一个通用的材质必须被设置
Device->SetMaterial( &red);
光源: 点光源, 方向光源, 聚光灯。
Type : 定义灯光类型, D3DLIGHT_POINT, D3DLIGHT_SPOT, D3DLIGHT_DIRECTIONAL
Diffuse : 此光源发出的漫射光颜色
Specular : 此光源发出的镜面光颜色
Ambient : 此光源发出的环境光颜色
Position : 用一个向量来描述的光源世界坐标位置, 这个值对于灯光的方向是无意义的。
Dirction : 用一个向量来描述的光源世界坐标照射方向。这个值不能用在点光源上。
Range : 灯光能够传播的最大范围。不能用于方向光源。
Falloff : 这个值只能用在聚光灯上。强度衰减,它的值通常设置为1.0f。
Attenuation0 、1、2 :这些衰减变量被用来定义灯光强度的衰减。只能用在点光源和聚光灯上。Attenuation0定义恒定衰减, Attenuation1 定义线性衰减,Attenuation2 定义二次衰减
Theta : 只用于聚光灯: 指定内圆锥的角度,单位是弧度。
Phi : 只用于聚我灯: 指定外圆锥的角度, 单位是弧度。
D3DLIGHT9 light;
ZeroMemory( &light, sizeof( light));
light.Type = D3DLIGHT_DIRECTIONAL;
light.Ambient.x = 1.0;
.......
light.specular.............
初始化好后,我们需要用Direct3D内在支持的灯光来注册
Device->SetLight( 0, &light);
一旦灯光注册了,要打开或关灯光
Device->LightEnable( 0, true); //true是打开灯光