首页 > 【Direct3D研究院之PC网游开发】 > Direct3D研究院之光照、材质(七)
2012
08-25

Direct3D研究院之光照、材质(七)

谈到光照,涉及到的内容就包括光照模型和光源类型。

一、首先说一下光照模型。

由于现在的计算机的计算能力有限,无法真正实时实现现实中复杂的光照效果,所以在模拟现实光照时,我们不得不简化光照计算,经过对现实光照进行分类,最终抽象出4个光照模型,分别是:环境光、漫反射、镜面反射、自发光。

1、环境光

环境光就是场景中物体表面产生的反射光的统一光照,环境光没有位置和方向,并且值为常量。

在D3D中设置环境光的方式如下:

2、漫反射

漫反射是自然界中最普遍的光照现象,它由光照方向以及顶点法向量计算得到,每个顶点的漫反射光颜色都要单独计算,所以漫反射计算比较耗时,但是这种牺牲时值得的,这能体现物体的三维深度。

3、镜面反射

顾名思义,就是发生在镜面上的光反射现象,这里的镜面就是光滑的物体表面,镜面反射的计算量比漫反射计算量还要大得多,所以在D3D中镜面反射是默认关闭的,设置它的开关状态的方法如下:

4、自发光

自发光就是物体自己发出的光,这是通过对物体材质Emissive属性设置来实现的,自发光不会影响到其他物体。

二、光源

光源类型包括:方向光、点光源、聚光灯。

这些光源类型被定义在枚举类型D3DLIGHTTYPE中,定义如下:

1、点光源

点光源具有颜色与位置属性,没有方向。光照强度会随着距光源中心的距离变大衰减。在具体应用中,可以利用点光源来模拟电灯或精灵。在D3D中设置点光源的方式如下:

2、聚光灯

聚光灯具有颜色、方向和位置。聚光灯由内锥与外锥组成,光照强度由内锥到外锥逐渐衰减。在应用中可以模拟探照灯。由于聚光灯计算量比较大,所以尽量少使用。D3D中设置光源方式如下:

3、方向光

方向光具有颜色、方向属性,没有位置。方向光不存在范围,所以,计算量在所以光源中最小。在应用中可以模拟太阳光。在D3D中设置光源的方式如下:

 这些就是光照的内容,下面来说一下材质。

        在光照的计算中,光照和材质是必需的,缺一不可。那什么是材质呢?

材质就是物体的质地,在D3D中的就是物体对光的吸收与反射特性。

在D3D中结构体D3DMATERIAL9表示材质信息,其定义如下:

 

其中的成员变量Diffuse、Ambient、Specular分别表示物体表面的漫反射光、环境光、镜面反射光的反射系数,Emissive表示物体的自身发光度,Power表示镜面反射指数。

如果用Id、Ia、Is、Ie分别表示漫反射光、环境光、镜面反射光和自发光的亮度,那么物体顶点最终的颜色亮度为:

It = Id + Ia + Is + Ie;

函数用来设置当前材质。

下面举例来说明物体材质的设置:

 

好,这一讲就到这里,回头看一下,离上次更新已经快一个世纪了(汗颜,不过确实最近忙得要死),不过同样还是希望大家,编程愉快。ZXGoto与大家一起学习进步。

下面的例子是在上一篇中的太阳系项目基础上改的,运行效果如图:

Direct3D研究院之光照、材质(七) - 雨松MOMO程序研究院 - 1

源码下载地址:https://skydrive.live.com/redir?resid=7BABF310621296C8!422&authkey=!ABzYQT7jeobhRZw

最后编辑:
作者:ZXGoto
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您愿意花20块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

Direct3D研究院之光照、材质(七)》有 3 条评论

  1. 晓哥多注意下身体,小伙子,你要考虑下一代!哈哈…

  2. 路过,希望博客也回访

留下一个回复

你的email不会被公开。