OpenGL定向光影贴图;如何查找正确的阴影贴图值?

OpenGL Directional Light Shadow Map; how to lookup the correct shadowmap value?

我正在努力实现定向光和相关的阴影贴图。

我使用正交投影成功渲染了阴影贴图纹理。但这就是我被困的地方;在最后的渲染过程中,如何从我的阴影贴图中计算出正确的纹理坐标以进行采样?然后,如何判断这个物体是否在那个深度后面?

到目前为止我尝试做的事情:

  1. 将灯光 View+Projection 矩阵传递到我的对象的顶点着色器
  2. 将顶点着色器中的对象顶点乘以该矩阵以传递给片段着色器
  3. 这为我的片段着色器提供了绘制到阴影贴图时的顶点位置

那么,我可以用这个对阴影贴图进行采样吗?

这让我了解了那里绘制的内容的深度。

但它并没有告诉我我是落后还是领先这个深度。

执行第二步后,您会得到一个 4 向量 (x,y,z,w)。假设您对它执行了透视除法,并且 w = 1。然后您在光源的 space 中有一个顶点的 x、y、z 坐标,您将其传递给片段着色器。

x 和 y 用于在下一步中对阴影贴图进行采样,但是 z 坐标呢?好吧,它是来自光源 PoV 的片段的潜在深度值。您将阴影贴图样本与此值进行比较。如果它大于 shadowmaps value(+bias),那么你的片段就在阴影中。否则不是。