30 WebGL光照的概念

2018-03-04 03:02:55 人阅读

案例查看有问题?
全屏试试!

案例解析

 光照原理:

现实世界中的物体呗光纤照射时,会反射一部分光。只有当反射光纤进入你的眼睛时,你才能够看到物体并辨认出它的颜色。比如,白色的盒子会反射白光,当白光进入你的眼睛时,你才能看到盒子是白色的。

在现实世界中,当光线照射到物体上时,发生了两个重要的现象:

~根据光源和光线方向,物体不同表面的明暗程度变得不一致。在三维图形学中还原这种效果,就叫着色(shading)。

~根据光源和光线方向,物体向地面投下了影子。被称为阴影(shadowing)。(以后再接触阴影)

 

我们在讨论着色的过程之前,考虑两件事:

~发出光线的光源的类型。

(1)平行光:类似自然中的太阳光,光线是相互平行的,平行光具有方向性。可以用一个方向和一个颜色来定义。

(2)点光源光:从一个点向周围所有方向发出的光。需要制定点光源的位置和颜色。光线的方向将根据点光源的位置和被照射之处的位置计算出来。

(3)环境光:环境光(间接光)是指那些经光源(点光源或平行光源)发出后,被墙壁等物体多长反射,然后照到物体表面上的光。只需要指定颜色即可。

~物体表面如何反射光线。

物体向哪个方向反射光,反射的光是什么颜色,取决于以下两个因素:入射光和物体表面的类型。入射光的信息包括入射光的方向和颜色,而物体表面的信息包括表面的股友颜色(也称基底色)和反射特性。

(1)漫反射:针对平行光或点光源而言的。

在漫反射中,反射光的颜色取决于入射光的颜色、表面的基底色、入射光与表面形成的入射角。我们将入射角定义为入射光与表面的法线形成的夹角,并用θ表示,那么漫反射光的颜色可以根据下面的式子计算得到:

<漫反射光颜色>=<入射光颜色>x<表面基底色>xcos θ

式子中,<入射光颜色>指的是点光源或平行光的颜色,乘法操作是在颜色矢量上逐分量(R、G、B)进行的。因为漫反射光在各个方向上都是“均匀的”,所以从任何角度看上去其强度都相等。

(2)环境反射:

环境反射是针对环境光而言的。在环境反射中,反射光的方向可以认为就是入射光的反方向。有余环境光照射物体的方式就是各方面均匀、强度相等的,所以反射光也是各向均匀的,我们可以这样描述:

<环境发射光颜色>=<入射光颜色>x<表面基底色>

这里的<入射光颜色>实际上也就是环境光的颜色。

当漫反射和环境反射同时存在时,将两者加起来,就会得到物体最终被观察到的颜色:

<表面的反射光颜色>=<漫反射光颜色>+<环境反射光颜色>

注意,两种反射光并不一定总是存在,也并不一定要完全按照上述公式来计算。渲染三维模型时,你可以修改这些公式以达到想要的效果。

案例源代码


                                            
展开内容

联系我们

一个人的力量不如两个人的,两个人的力量不如一群人的。欢迎加入大家庭一起共同学习,共同进步。

查看更多