《WebGL 编程指南》笔记 —— 第八章 光照

2017-10-09  本文已影响54人  fehysunny
  1. 当光线照射到物体上时,发生了两个重要现象:
    (1)根据光源和光线方向,物体不同表面的明暗程度变得不一致。
    (2)根据光源和光线方向,物体向地面投下了影子
  1. 着色和阴影
    着色(shading):根据光照条件重建“物体各表面明暗不一的效果”的过程。
    阴影(shadowing):物体向地面投下影子的现象。

  2. 真实世界中的光的类型:
    (1)平行光(directional light),类似于自然中的太阳光。平行光线相互平行,具有方向,可以用一个方向和一个颜色来定义。
    (2)点光源光(point light),类似于人造灯泡的光。点光源光是从一个点向周围的所有方向发出的光,需要指定点光源的位置和颜色。光线的方向将根据点光源的位置和被照射之处的位置计算出来。
    (3)环境光(ambient light),模拟非直射光,也就是由光源发出后经过墙壁或其他物体反射后的光。环境光(间接光)是指那些经光源(点光源或平行光源)发出后,被墙壁等物体多次反射,然后照到物体表面上的光。环境光从各个角度照射物体,其强度都是一致的。环境光不用指定位置和方向,只需指定颜色即可。
    (4)聚光灯光(spot light),模拟电筒、车前灯等。

  1. 反射光的颜色,取决于:入射光(方向、颜色)和物体表面的类型。

  2. 物体表面反射光线的方式:

(1)漫反射(diffuse relection)
针对平行光或点光源,漫反射的反射光在各个方向上是均匀的。

漫反射光颜色 = 入射光颜色 × 表面基底色 × cosa
cosa = 光线方向 · 法线方向
漫反射光颜色 = 入射光颜色 × 表面基底色 × (光线方向 · 法线方向)

(2)环境反射(enviroment/ambient reflection)
针对环境光,环境反射的反射光的方向可以认为是入射光的反方向。在各个方向均匀。

环境反射光颜色 = 入射光颜色 × 表面基底色

注:表面基底色是物体本来的颜色,也就是物体在白光下的颜色
当漫反射和环境反射同时存在时,将两者加起来,就会得到物体最终被观察到的颜色

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

  1. 归一化(normalization):将一个矢量的长度调整为1,同时保持方向不变的过程。

  2. 平面的法向量唯一,即平面上的任意一点都具有相同的法向量。

  3. 逆转置矩阵(inverse transpose matrx)
    变换后的法向量 = 法向量 × 模型矩阵的逆转置矩阵

求逆转置矩阵的两个步骤:
(1)求原矩阵的逆矩阵 Matrix4.setInverseOf(m)
(2)将上一部求得的逆矩阵进行转置 Matrix4.transpose()

上一篇下一篇

猜你喜欢

热点阅读