原文:http://blog.youkuaiyun.com/sesshoumanru/archive/2009/01/16/3786617.aspx
光源用来照亮场景中的物体。顶光源生效时,D3D使用如下方法联合计算每个物体顶点的颜色:
* 当前材质颜色和纹理颜色;
* 顶点如果制定了,会具有漫反射和镜面反射颜色;
* 颜色和光的强度的点乘,使用场景中的光源或者环境光;
当使用了D3D光照和材质时,你已经将光照交给了D3D系统处理。高级用户就自己实现光照系统。光照和材质的不同使用,会得到很大的效果差别。材质定义表面怎样对光进行反射。方向光源和环境光决定反射光的级别。如果激活了光源,则必须要使用材质。渲染场景不是决定需要光,但没有光渲染出的东西将不可见。最好的情况下,渲染一个没有光照的场景,只能得到物体的轮廓,这是远远不够的。
方向光 VS 环境光:
虽然方向光和环境光都能照亮场景中的物体,但他们是彼此独立的,他们有不同的作用并且使用方式不同。方向光有方向和颜色,使用比如高氏着色逻辑的因子。不同的方向光类型产生不同的光,有不同的衰减因子。使用IDirect3DDevice9::SetLight 建立方向光。环境光则在整个场景中都是有效的。可以认为环境光分布于整个场景之中,不管物体的位置分布环境光没有位置和方向,只有颜色和强度。每个光源都要对环境光进行累加。IDirect3DDevice9::SetRenderState 中制定D3DRS_AMBIENT参数来设定环境光。使用RGBA值指定。RGBA每个都是
从0到255,这个不同于其他D3D的大多数颜色值。使用D3DCOLOR_RGBA宏来生成RGBA值.
D3D光照模型VS真实光照:
自然界光照,光线从光源发射以后,会经过很多次的反射,折射,吸收,最后竟如人眼。细节十分复杂。很显然,实时模拟这样的光照是不可能的。D3D使用了近似效果的方法。使用RGB描述颜色并合成最终值。D3D中,当一个物体反射光后,就直接决定了物体渲染的颜色。
光照和材质的颜色值:
D3D使用RGBA描述颜色值。一般都是使用0.0到1.0表示颜色,环境光却使用了0到255.光源的颜色表示发射出的颜色值,因为光不适用alpha值,只有RGB,111产生白色,000是黑色。也可以产生大于1.0的,用于产生高亮光。在材质中,颜色组件则表示反光强度了。1111表示他将把光源颜色全部反射。0101表示全部绿色部分会被反射。
光源类型:
1 电光源;
2 方向光;
3 聚光灯光;
光源属性:
1 颜色值;
2 位置;
3 衰减;
4 范围;
5 方向;
材质介绍:
漫反射:接受光源的光并根据材质的漫反射强度计算输入颜色RGBA;Diffuse反射计算需要使用顶点法线。环境光反射:接受环境光并根据材质计算输出值;最终输出颜色要进行 漫反射,环境反射,镜面反射,自发光的累加