DirectX 中灯光的使用

在DirectX中使用灯光是一件比较方便的事情,(比OpenGL中方便多了...)大体可分为一下几步:

1,设置场景中物体的几何关系:主要就是定义好物体的坐标和法线等量...

struct CUSTOMVERTEX
{
    D3DXVECTOR3 position; // The 3D position for the vertex.
    D3DXVECTOR3 normal;   // The surface normal for the vertex.
};
// Custom flexible vertex format (FVF).
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)

以上是最简单的一种使用用户自定义顶点格式来处理灯光的方法.之后在是为场景中点分别赋值,确定正确的法线方向.然后就是简单的将这些定点数据Copy到定点缓冲区去.

2.设置材质

材质就是物体受到光的照射后应该反色的颜色,一个简单的设置过程是:

D3DMATERIAL9 mtrl;
ZeroMemory( &mtrl, sizeof(mtrl) );
mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
mtrl.Diffuse.b = mtrl.Ambient.b = 0.0f;
mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;//定义一个材质的颜色
g_pd3dDevice->SetMaterial( &mtrl );设置当前将要使用的材质.如果步设置材质,物体就没有反射光,也就应该是黑色

3.显示的启动灯光.

D3DXVECTOR3 vecDir;
D3DLight9 light;
ZeroMemory( &light, sizeof(light) );
light.Type = D3DLIGHT_DIRECTIONAL;//光的种类,一共有D3DLIGHT_POINT,D3DLIGHT_SPOT ,D3DLIGHT_DIRECTIONAL 可供选用

    light.Diffuse.r  = 1.0f;
    light.Diffuse.g  = 1.0f;
    light.Diffuse.b  = 1.0f;//设置灯光的颜色

    light.Range       = 1000.0f;//光能照到的范围
    g_pd3dDevice->SetLight( 0, &light );  //设置这个灯光,它的编号是0
    g_pd3dDevice->LightEnable( 0, TRUE );//启动这个灯源,如果为FALSE则禁用这个灯源
    g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );//从宏观上启动灯光的炫染

 

最终显示的物体颜色应该是材质和灯光共同作用的结果


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值