WebGL-光照
光源类型与反射光
平行光:光线是相互平行的,平行光具有方向。平行光可以看作是无限远处的光源发出的光,可以用一个方向和一个颜色来定义。
点光源光:从一个点向周围的所有的方向发出的光。光线的方向将根据点光源的位置和被照射之处的位置计算出来。
环境光:指那些经光源(点光源或者平行光源)发出后,被墙壁等物体多次反射,然后照射到物体表面上的光。环境光从各个角度照射物体,其强度都是一致的。环境光不需要指定位置和方向,只需要指定颜色即可。
物体反射光取决于两个因素:入射光和物体表面的类型,入射光包括光的方向和颜色,物体表面的信息包括表面的固有颜色和反射特性。
物体表面反射光线的方式有两种:漫反射(diffuse reflection)、环境反射(environemnt reflection)。
在漫反射中,反射光的颜色取决于入射光的颜色、表面的基底色、入射光与表面形成的入射角。入射角是入射光与表面的法线形成的夹角,用θ表示。漫反射的光颜色通过下列公式计算得到:
漫反射光颜色 = 入射光颜色 * 表面基底色 * cosθ
在环境反射中,反射光的方向可以认为就是入射光的反方向。由于环境光照射物体的方式就是各方向均匀、强度相等的,所以反射光也是均匀的:
环境反射光颜色 = 入射光颜色 * 表面基底色
当漫反射与环境反射同时存在时,物体最终的反射光颜色是两者之和:
表面的反射光颜色 = 漫反射光颜色 + 环境反射光颜色
平行光下的漫反射
入射角的余弦值可以通过下列公式计算出来:
cosθ = 光线方向 * 法线方向
光线方向其实是入射方向的反方向,即从入射点指向光源方向。光线方向矢量和法线方向矢量的长度必须为1。将一个矢量的长度调整为1,可以使用GLSL ES内置的归一化函数。从而漫反射光的颜色计算式子变为:
漫反射光颜色 = 入射光颜色 * 表面基底色 * (光线方向 * 法线方向)
法线,即物体表面的朝向,即垂直于表面的方向。物体表面的正面和背面取决于绘制表面时的顶点顺序。正表面的绘制顶点顺序是顺时针的。一个平面只有一个法向量。
- 本文链接:https://archer-lan.github.io/2023/11/20/WebGL-%E5%85%89%E7%85%A7/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。