我正在开发一个相对较小的2D(顶视图)游戏演示,使用OpenGL作为我的图形.这是一个基本的隐形角度,因此我所有的敌人都在画一个视线,所以玩家知道他们在哪里.
到目前为止,我的一个问题是,当我绘制这个视线弧(作为一个填充的多边形)时,它自然地通过屏幕上的任何墙壁显示,因为没有什么能阻止它:
我很好奇我怎么能最好地阻止这样的事情.我已经有了代码,可以让我检测与墙壁等的线交叉(对于敌人的视线检测),理论上我可以用它来检测这种情况并相应地绘制多边形,但这可能是非常繁琐和/或低效,所以我想如果有任何内置的OpenGL系统可以为我做这件事,它可能会做得更好.
我已经尝试过寻找关于剪切/遮挡等主题的问题,但我甚至不确定这些是否正是我应该寻找的; 我的OpenGL技能有限.似乎任何使用glClipPlanes或glScissor的东西都不适合这种情况,因为有大量的单独墙壁等等.
最后,这只是我在业余时间制作的一个演示,所以图形并不是我主要担心的.如果有一种(合理的)无痛的方式来做到这一点,那么我希望有人可以指出我正确的方向; 如果没有简单的方法,那么我现在就可以解决问题或找到其他解决方法.
这本质上是一个阴影问题。我的做法如下:
对于弧线边缘周围的每个点,追踪从敌人到该点的 (2D) 射线,寻找与绿色框的交叉点。如果绿色框始终轴对齐,则数学计算会容易得多(寻找 Ray-AABB 交点)。将交点渲染为三角形扇形将为您提供弧线。
正如您提到的,您已经有了线墙相交代码,那么只要它能告诉您敌人到墙的距离,那么您就可以将其用于视线弧。不要自动认为它会太慢 - 我们不再在 486 上运行。您始终可以减少弧边缘周围的点数以加快速度。
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |