阴影
先看一下wikipedia中的解释[1],如下:
A shadow is an area where direct light from a light source cannot reach due to obstruction by an object.
It occupies all of the spacebehind an opaque object with light in front of it.
简单点说,阴影是由于光源产生的光线被不透明物体遮挡,而产生的黑暗范围。该范围构成二维轮廓,并且该轮廓的大小,形状,位置等会随光源相关属性的改变而改变。
当然,在场景中添加阴影会让场景更加逼真。下面阐述三种阴影生成方法。
物体压平到阴影平面:flatten object
简单的将场景中的物体压平在阴影平面上,来产生阴影。当然这里需要矩阵的相关操作来实现将物体压平到其他平面上。具体的技术实现可以参考[2],文中给出了详细的介绍和代码实现。
如上图所示,我有另外一种理解方式。可以将光线照射到物体的方向视为施加给该物体固定方向的力,使物体产生形变,坍塌到新的平面上而产生的新的二维轮廓即为阴影。当然,这样的解释或许有些牵强。另外,若采用几何作图的方式,这样是很好实现的。
同时需要注意,当前考虑的场景仅仅只有一个阴影平面,试想一下,如果将立方体放置到墙角的位置并加以光照,可就不像之前那样简单了。在实现中,我们需要指定不同的矩阵来将物体投影到阴影平面上,这样造成了这种方法的局限性。
反向光线追踪:Inverse Ray Tracing