根据《real-time shadow》这本书第二章中的推导,实现了最简单的阴影技术。
planar shadow经过一个投影矩阵将被灯光照射的物体的顶点沿着光线方向投影到接受阴影的平面。
关键的问题是这个投影矩阵怎么获得。
阴影所在平面用下式表示:其中n是法线,d是常量,x是平面上的点。
灯光和被投影的顶点所在的直线用下式来表示:,其中l是光源的位置,v是被投影的顶点,t是系数。
推导过程:
因此最终获得投影到平面上的顶点坐标写成齐次坐标的形式为:
写成矩阵的形式就是
为了在代码中实现,我新加了两个类,分别是Mesh和Program,由于在析构时涉及到删除OpenGL内部的资源的问题,因此若是不处理好拷贝构造和拷贝赋值就会出现问题,因此在没想过好的处理方案以前把他俩都实现成了没法复制的类。
代码已经更新http://www.eyesourcecode.com/t/58005/1/1code