http://blog.csdn.net/loveclover

第二步:设置材质和灯光

要在Direct3D中使用灯光,你必须创建一个或多个光源。为了决定一个几何物体反射哪种颜色,则需要创建一种材质,用它来渲染几何物体。在渲染场景之前,Lights示例工程调用自定义函数SetupLights建立一种材质和一个方向(directional)光源。

创建一种材质

材质定义了当灯光照射到几何物体表面时,应该反射出的颜色。下面的代码段使用D3DMATERIAL9结构来创建一个黄色的材质。

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 );

漫反射光颜色和环境光颜色被设为黄色。调用IDirect3DDevice9::SetMaterial方法将材质应用到Direct3D设备,用来渲染场景。该方法接受的唯一参数则是需要设置的材质结构的地址。在调用完成之后,每当图元(primitive)需要渲染时,都会使用这个材质,直到用户使用IDirect3DDevice9::SetMaterial方法指定另一材质为止。

将材质应用到场景之后,下一步则是要创建一个光源。

创建一个光源

在Direct3D中,可选的光源有三种类型:点光源,方向光源,聚光灯。示例中创建了一个方向光源,这种光源沿一个方向传播,并且方向可以随意。

下面的代码段使用D3DLIGHT9结构来创建一个方向光源:

D3DXVECTOR3 vecDir;
D3DLIGHT9 light;
ZeroMemory( 
&light, sizeof(light) );
light.Type 
= D3DLIGHT_DIRECTIONAL;

下面的代码段将光源的漫反射光设置为白色

light.Diffuse.r = 1.0f;
light.Diffuse.g 
= 1.0f;
light.Diffuse.b 
= 1.0f;

下面的代码段使方向光沿着一个圆周旋转。

vecDir = D3DXVECTOR3(cosf(timeGetTime()/360.0f),
                     
0.0f,
                     sinf(timeGetTime()
/360.0f) );
D3DXVec3Normalize( (D3DXVECTOR3
*)&light.Direction, &vecDir );

D3DXVec3Normalize函数用来将方向矢量规范化,这个矢量决定了光源的照射方向。

可以告诉Direct3D一个指定的范围,即光源在多远的距离内有效。这个成员对方向光源无效。下面的代码段将1000单位的范围赋给光源。

light.Range = 1000.0f;

下面的代码段将灯光选入Direct3D设备中。

g_pd3dDevice->SetLight( 0&light );

第一个参数是一个索引,标识被指定的光源。这里需要注意,如果某个光源已经占用该索引,使用同样索引将会造成旧光源被新光源覆盖。第二个参数是一个指向光源结构的指针。Lights示例工程将此光源放置在索引0处。

下面的代码段通过调用IDirect3DDevice9::LightEnable来使灯光有效。

g_pd3dDevice->LightEnable( 0, TRUE);

第一个参数是需要启用的光源的索引。第二个参数是一个布尔值,通过这个值可以开启或关闭光源。在上面的代码中,将索引为0的光源开启。

下面的代码片段通过调用IDirect3DDevice9::SetRenderState来通知Direct3D渲染光源。

g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );

两个参数指定了要修改何种渲染状态,以及修改的数值。代码示例中将D3DRS_LIGHTING设备变量设置为TRUE,如此一来就启用了灯光渲染。

最后一步则是要打开环境光,此处同样是调用IDirect3DDevice9::SetRenderState方法。

g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0x00202020 );

前面的代码段将D3DRS_AMBIENT设备变量设置为灰色。环境光将会把所有物体照亮,当然,它使用的此处给定的颜色。

本指南向你展示了如何使用灯光和材质。指南5:使用纹理映射 将向你展示如何在表面上添加纹理。

posted on 2008-03-18 20:44 Sure 阅读(532) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

导航

统计

常用链接

留言簿(5)

随笔分类

随笔档案

相册

搜索

最新评论

阅读排行榜

评论排行榜