狂想的天空

狂想,只要你想!

C++博客 首页 新随笔 联系 聚合 管理
  21 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks
本节,我们介绍打光处理;

其实,这个功能在阴影的部分已经不常被使用,
但只要能善加应用的话,也是可以用在其它各种特效上面的。 

多边形的面的显示什么颜色,是由组成它的顶点的defuse色(基本色)和specular色(镜面反射色)决定的。

关于打光处理部分,DirectXGraphics提供了两种模式:No lighting modelighting 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 

下一节,我们介绍材质



posted on 2009-01-07 20:33 狂之想 阅读(393) 评论(0)  编辑 收藏 引用 所属分类: C++2D,3D

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


//