2

我在我的 iPhone 上玩弄影子音量,如果影子音量上限被远平面夹住,则一切正常。

由于gl_ClipVertex在 GLSL ES 中不可用,我如何将其剪辑gl_Position.z到远平面?我已经尝试使用gl_Position.z = gl_Position.w,但结果是错误的,阴影体积似乎跟随相机方向。还有其他方法吗?

4

1 回答 1

1

为了使阴影体积起作用,您可能需要避免帽子被远平面剪裁。为此,要么增加深度范围(将远平面移得更远),要么减少挤出量。

有许多阴影体积技术,其中一些专门设计用于避免深度限制。我最喜欢的是 Carmack 的反转,只要您知道几何体的边界框(Carmack 使用 BSP 树,因此对他来说很容易),它就可以很好地工作,因为这样您就知道需要将阴影体积挤出多远。此外,如果灯光非常靠近阴影投射对象,可能需要进行一些剪裁(否则不是远帽,但体积的角最终会被剪裁)。虽然这很容易解释,但实施起来却相当困难。还有一些其他算法,更适合在 GPU 上简单实现(请参阅此处http://www.nvidia.com.br/object/robust_shadow_volumes.html)。

我希望这对您有所帮助,如果您需要进一步的帮助,请随时发表评论。

于 2012-01-20T12:16:48.230 回答