如何检查OpenGL中其他纹素的深度?

时间:2014-02-21 06:30:55

标签: opengl shadow lighting

我正在尝试自上而下的透视游戏,但我不确定如何显示角色(游戏模型)可以看到但玩家不能看到的东西。例如,想象一下位于角色前面的建筑物,并在屏幕下方垂直位于他下方。角色可以看到建筑物的墙壁面向他,以及周围的地板,但玩家不能像建筑物的屋顶和其他侧面阻挡它。我想知道渲染角色可以看到的最佳方式,玩家不能。在这种情况下,玩家应该能够看到被建筑物屋顶挡住的地板。为了说明我的意思,我创建了这张图:

If you can't see you aren't missing much

当然,角色也应该能够看到建筑物背后的地面,但我觉得这样会让人更难理解这个问题。我想做的是创建一种立方体贴图,除了4个方向,从角色的角度忽略上下。然后从上到下透视渲染场景,但没有深度测试。然后在片段着色器中检查来自播放器的片段的深度是否与立方体贴图中的深度相同(与光照相同的过程)并绘制片段(如果是),并且仅在半角形时绘制它,如果不是。有没有更便宜的流程来做到这一点?我也不确定我的方法是否可行,因为我没有测试它,但我担心我会遇到一个问题,在一个位置只有一个片段,因此它将是唯一渲染但透明度为一半的东西。 / p>

1 个答案:

答案 0 :(得分:0)

我认为建议方法的结果看起来很奇怪,例如考虑下两种情况:

  1. 你想要绘制一个片段,该片段取自你角色所在的同一建筑物楼层,但角色看不到它(例如,它是一块被一件家具挡住的墙壁碎片角色视角)。该片段应该如何呈现?

  2. 考虑从相机位置投射到建筑物方向的光线。此光线将与角色的视图体积的表面相交,为0,1,或者也可能是2点。由于视图体积是凹的,因此也可能发生两个以上的交叉点。在这种情况下,可能存在使用相同屏幕坐标生成的2个或更多不透明片段(对应于光线投射)。这里的结果是未定义的,因为深度测试已关闭。

  3. 我建议采用更经典的方法,例如:看看你的角色可以看到哪个地板,渲染它,所有地板都不透明,然后在建筑物的顶部透明,如果你愿意的话。