Direct3D光与材质的颜色值

一直搞不清光如何作用于材质的,他们颜色又是如何结合的。今天看到一篇文章,终于弄懂啦:

http://www.cppblog.com/liangairan/articles/94103.html

 

主要部分复制到下面吧:

Microsoft® Direct3D®用四个成员——红、绿、蓝和阿尔法——描述颜色,并将它们合成,产生最终颜色。Direct3D为C++程序定义了D3DCOLORVALUE结构,该结构包含了所有成员,每个成员是一个浮点数,一般在0.0到1.0范围内,闭区间。虽然光照和材质使用相同的结构描述颜色,但对结构中的值的使用略有不同。

光源的颜色值表示它发出的某种光成分的数量。因为光不包含阿尔法成员,所以只有颜色的红、绿和蓝成员是有用的。可以把三种成员想象成投影电视的红、绿、蓝镜头。每个镜头可能被关掉(相应成员的值为0.0),或是位于范围内的某个值。镜头中照射出的颜色组合成光的最终颜色。如R: 1.0, G: 1.0, B: 1.0组合成白光,而R: 0.0, G: 0.0, B: 0.0则完全不发光。也可以产生只发出某个成员颜色的光,这样可以得到纯红、纯绿或纯蓝光,或者也可以将它们组合,得到黄色或紫色。甚至可以将颜色的成员设为负值,这样就产生了实际上将光从场景中移除的“暗光(dark light)”,得到场景变暗的效果。或者,也可以将成员设为大于1.0的值,产生特别亮的光。

另一方面,材质的颜色值表示用该材质渲染的表面对某种光成分的反射度。颜色成员为R: 1.0, G: 1.0, B: 1.0, A: 1.0的材质会反射所有的入射光。同样,成员为R: 0.0, G: 1.0, B: 0.0, A: 1.0的材质会反射所有入射的绿光。具有多重反射系数值(译注:漫反射、镜面反射、等等)的材质可以创建不同类型的效果,更多信息,请参阅材质属性

环境光的颜色值和用于直射光的光源及材质的颜色值是不一样的。更多信息,请参阅直射光与环境光的比较

posted @ 2018-05-06 17:25  泛未分晨  阅读(189)  评论(0编辑  收藏  举报