OGRE的wiki上提供一个deep shadow mapping的实现,链接。
这里记录一下各个着色器作用和注意的地方。
casterVP,作用是把顶点坐标转换到纹理坐标和输出顶点深度值。传入的变换矩阵是worldviewproj_matrix,这应该是世界矩阵到正在投射阴影的灯光空间的变换矩阵,目前不知道如何获取灯光的viewproj矩阵,但肯定不是摄像机的viewproj矩阵。
casterFP,作用是输出阴影纹理每个texel的深度(以rgba形式输出,r,g和b相同)。
receiverVP,作用是顶点坐标转换,输出顶点颜色和阴影纹理坐标。中间法线乘以worldIT是将法线从物体空间转换到世界坐标系。
receiverFP,作用是根据深度值输入像素的颜色。
我一开始运行的时候,没有看到阴影的效果,后来把深度值比阴影纹理小的像素输出为白色,大的输出为黑色,结果全是黑的,于是我直接把深度调整那部分注释掉了(不太了解调整中各个参数的含义,不知道怎么调),然后阴影出来了。