【发布时间】:2011-11-23 07:22:27
【问题描述】:
我正在开发一个相对较小的 2D(顶视图)游戏演示,使用 OpenGL 作为我的图形。它适用于基于隐身的基本角度,因此对于我所有的敌人,我正在绘制视线弧线,以便玩家知道他们在看哪里。
到目前为止,我的一个问题是,当我绘制这个视线弧(作为填充的多边形)时,它会自然地穿过屏幕上的任何墙壁,因为没有什么可以阻止它:
我很好奇如何才能最好地防止此类事情发生。我确实已经有代码可以让我检测与墙壁等的线交点(用于敌人的视线检测),理论上我可以使用它来检测这种情况并相应地绘制多边形,但这很可能是相当繁琐和/或效率低下,所以我想如果有任何内置的 OpenGL 系统可以为我做到这一点,它可能会做得更好。
我曾尝试寻找有关剪辑/遮挡等主题的问题,但我什至不确定这些是否正是我应该寻找的;我的 OpenGL 技能有限。由于大量的单独墙壁等,使用 glClipPlanes 或 glScissor 的任何东西似乎都不适合此。
最后,这只是我在业余时间制作的一个演示,所以图形并不是我主要担心的问题。如果有一种(合理的)无痛方式可以做到这一点,那么我希望有人能指出我正确的方向;如果没有简单的方法,那么我可以暂时离开问题或寻找其他解决方法。
【问题讨论】:
-
我实际上正在寻找类似的东西来处理自上而下的瓷砖游戏中的阴影。到目前为止,我的怀疑一直是光线投射(缓慢但完美)以及从遮挡物和某种阴影映射机制中创建蒙版。
-
你考虑过只使用 OpenGL 光照吗?这可能意味着一些工作,但适当放置的灯可能会产生想要的效果。
-
@Keith:谢谢,这可能是个好主意。我在光照方面的经验也很有限,我可能需要对我的绘图代码进行一些调整才能使其正常工作。但如果没有更好的办法,我会记住这一点。
-
“OpenGL 光照”不处理阴影。所以它也会穿墙。您将不得不使用阴影映射或模板阴影或其他东西。
-
据我所知,棘手的部分是将 2D 关卡转换为可用于在地图上投射阴影的东西(嗯)。另外,我还没有弄清楚它的成功之处。