GLSL ES将顶点剪辑到远平面

时间:2011-10-29 03:20:39

标签: ios opengl-es glsl opengl-es-2.0 opengl-es-lighting

我在我的iPhone上玩弄阴影卷,如果阴影卷帽被远处的平面夹住,一切都正常。

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

1 个答案:

答案 0 :(得分:1)

为了使阴影卷工作,您可能需要避免被远处平面剪切。要做到这一点,要么增加深度范围(远离平面移动),要么减少挤出量。

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

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