Direct3D基础-灯光D3DLIGHT9

在D3D中有3种类型的灯光,用它们可以让3D世界显得真实 。

一、灯光类型

1、点光(Point Light)
  从一个点向周围均匀发射的光,有最大的照明范围,亮度随距离衰减,最明显的一个例子就是我们家里用的灯泡。

2、方向光(Directional Light)
  方向光是一组没有衰减的平行光,类似太阳光的效果。 

3、聚光灯(Spot Light)
  最复杂的一种灯,有光源点位置、有方向、有范围、有发光的内径和外径,光照强度还会随距离衰减。类似的例子是电筒。

二、灯光结构

D3D中灯光通过D3DLIGHT9结构来表示:

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;
  • Type-灯光类型,共3种:D3DLIGHT_POINT、D3DLIGHT_SPOT、D3DLIGHT_DIRECTIONAL。
  • Diffuse-光源发出的漫反射光颜色。
  • Specular-光源发出的镜面光颜色。
  • Ambient-光源发出的环境光颜色。
  • Position-用向量表示的光源世界坐标位置(对方向光无效)。
  • Direction-用向量表示的光源世界坐标照射方向(对点光源无效)。
  • Range-灯光能够传播的最大范围(对方向光无效),该值不能应小于
  • Falloff-灯光从内圆锥到外圆锥之间的强度衰减(仅对聚光灯有效),该值通常设为1.0f。
  • Attenuation0、Attenuation1、Attenuation2-灯光衰减变量,用来定义灯光强度的传播距离衰减(对方向光无效)。Attenuation0定义恒定衰减,Attenuation1定义线性衰减,Attenuation2定义二次衰减。Attenuation0通常为0.0f,Attenuation1通常为1.0f,Attenuation2通常为0.0f。适当的使用如下公式,D代表到光源的距离,A0、A1、A2分别与Attenuation0、Attenuation1、Attenuation2相匹配。
  • Theta-指定灯光内圆锥的角度(仅对聚光灯有效),单位是弧度。
  • Phi-指定外圆锥的角度(仅对聚光灯有效),单位是弧度。

三、灯光的设置

灯光的属性设置好后,需要把这个灯光加入到场景中:

//  要让渲染的时候灯光起作用,运行这条命令
g_pd3dDevice -> SetRenderState( D3DRS_LIGHTING, TRUE );

//  设置0号灯为我们设置的灯
g_pd3dDevice -> SetLight(  0 & light );

//  打开0号灯光
g_pd3dDevice -> LightEnable(  0 , TRUE );

在使用灯光的时候需要注意的一点是,要为每个顶点设定法线,只有设置了法线,灯光才会起作用。什么是法线?其实就是一个和该点所在面垂直的向量。

参考文献:
Frank D. Luna:Introduction to 3D Game Programming with DirectX 9.0
翁云兵:3D游戏程序设计入门(DirectX9.0)
金点时空soft:3D游戏从头编

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值