参考教程
Tutorial 48: Directional Shadow Maps
学习记录
这篇文章中我们介绍对于定向光的阴影映射,本篇代码基于阴影映射篇,修改不多。
定向光(平行光)的阴影映射和之前不同之处在于它是基于正交投影而非透视投影的,也即是说它不会有近小远大的效果,我们将以正交投影来渲染深度图使得我们的阴影是正交投影化的。
首先我们修改 shadow.vs
和 shadow.ps
,现在我们不需要光的坐标而是使用定向光的方向计算,所以在 shadow.vs
里不再需要第二个缓冲,也不用进行多余的计算。
1 | //////////////////////////////////////////////////////////////////////////////// |
在 shadow.ps
里我们基于传进来的光方向进行与法线的点乘:
1 | //////////////////////////////////////////////////////////////////////////////// |
ShadowShaderClass
被修改为适应于新着色器的渲染类,其声明如下:
1 | //////////////////////////////////////////////////////////////////////////////// |
现在我们需要定向光以及正交投影,所以我们在 LightClass
里添加这两个的对象以及生成方法:
1 | //////////////////////////////////////////////////////////////////////////////// |
最后,我们使用它的正交矩阵来渲染深度图和最终效果,部分代码如下:
1 | bool GraphicsClass::Frame(float posX, float posY, float posZ, float rotX, float rotY, float rotZ) |
最终效果: