OpenGL-简单的2D裁剪/遮挡方法?

Lin*_*age 9 c++ opengl 2d

我正在开发一个相对较小的2D(顶视图)游戏演示,使用OpenGL作为我的图形.这是一个基本的隐形角度,因此我所有的敌人都在画一个视线,所以玩家知道他们在哪里.

到目前为止,我的一个问题是,当我绘制这个视线弧(作为一个填充的多边形)时,它自然地通过屏幕上的任何墙壁显示,因为没有什么能阻止它:

http://tinyurl.com/43y4o5z

我很好奇我怎么能最好地阻止这样的事情.我已经有了代码,可以让我检测与墙壁等的线交叉(对于敌人的视线检测),理论上我可以用它来检测这种情况并相应地绘制多边形,但这可能是非常繁琐和/或低效,所以我想如果有任何内置的OpenGL系统可以为我做这件事,它可能会做得更好.

我已经尝试过寻找关于剪切/遮挡等主题的问题,但我甚至不确定这些是否正是我应该寻找的; 我的OpenGL技能有限.似乎任何使用glClipPlanes或glScissor的东西都不适合这种情况,因为有大量的单独墙壁等等.

最后,这只是我在业余时间制作的一个演示,所以图形并不是我主要担心的.如果有一种(合理的)无痛的方式来做到这一点,那么我希望有人可以指出我正确的方向; 如果没有简单的方法,那么我现在就可以解决问题或找到其他解决方法.

geo*_*tnz 4

这本质上是一个阴影问题。我的做法如下:

对于弧线边缘周围的每个点,追踪从敌人到该点的 (2D) 射线,寻找与绿色框的交叉点。如果绿色框始终轴对齐,则数学计算会容易得多(寻找 Ray-AABB 交点)。将交点渲染为三角形扇形将为您提供弧线。

正如您提到的,您已经有了线墙相交代码,那么只要它能告诉您敌人到墙的距离,那么您就可以将其用于视线弧。不要自动认为它会太慢 - 我们不再在 486 上运行。您始终可以减少弧边缘周围的点数以加快速度。

  • 不要忘记[空间索引](http://en.wikipedia.org/wiki/Spatial_database#Spatial_Index),以减少必须检查交叉点的墙壁数量。 (2认同)