D3D光照

光照有助于描述实体形状和立体感。使用光照时,无需指定顶点的颜色值,D3D光照引擎会依据光源类型、材质和物体表面相对于光源的朝向,计算出每个顶点的颜色值。

1.光照类型

环境光、漫射光、镜面光。默认状态下,D3D不进行镜面反射计算,可通过Device->SetRenderState(D3DRS_SPECULARENABLE,true);启用。

2.材质

材质允许我们定义物体表面对各种颜色光的反射比例。通过如下结构体定义:

typedef struct D3DMATERIAL9 {
  D3DCOLORVALUE Diffuse;
  D3DCOLORVALUE Ambient;
  D3DCOLORVALUE Specular;
  D3DCOLORVALUE Emissive;
  float         Power;
} D3DMATERIAL9, *LPD3DMATERIAL9;


 

可以通过控制材质在各种类型光照下,哪种颜色的光将被反射。

3.法线

面法线是描述多边形朝向的向量。

顶点法线正是基于面法线的思路而产生的,顶点法线描述的是构成多边形的各个顶点的法线。D3D需要知道顶点的法线才能进行正确的光照计算。如果有多个三角面共享一个顶点,一般取这些三角面法线的平均值为顶点的法线。在变换过程中顶点的法线向量可能不再规范化,在最终渲染之前通过Device->SetRenderState(D3DRS_NORMALIZENORMALS,true);即可使法向量重新规范化。

4.光源

注意和光照概念的区别。D3D支持三种类型的光源:点光源、方向光和聚光灯。可通过如下结构体定义:

 
typedef struct D3DLIGHT9 {
  D3DLIGHTTYPE  Type;
  D3DCOLORVALUE Diffuse;
  D3DCOLORVALUE Specular;
  D3DCOLORVALUE Ambient;
  D3DVECTOR     Position;
  D3DVECTOR     Direction;
  float         Range;
  float         Falloff;
  float         Attenuation0;
  float         Attenuation1;
  float         Attenuation2;
  float         Theta;
  float         Phi;
} D3DLIGHT9, *LPD3DLIGHT;
  
 

在D3DLIGHT9初始化之后,需要对使用的光源进行设置和开关控制,如下:

Device->SetLight(0, &point);
Device->LightEnable(0, true);
 

5.添加光照步骤

a.为物体(含法线)创建材质,并在绘制对应物体前设置该材质;
b.创建,设置和启用光源;
c.启用其余光照状态;
d.启用光照。
 







                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值