2D-Visibility / Light - 高效的多边形 - 光线交叉

时间:2015-07-14 11:22:51

标签: c++ polygon sfml raytracing line-intersection

我试图用Sfml在2D中编写游戏。对于那个游戏,我需要一个Lightengine和一些代码,可以给我一个玩家可见的世界区域。因为这两个问题非常吻合(实际上是相同的)我想立刻解决这两个问题。 我的世界将从文件加载,其中对象的hitbox将表示为多边形。 我现在编写了一些代码,其中包含多边形列表和跟随鼠标的光线方向,并找到与这些多边形中的任何一个最近的交点。 现在的下一步是将来自玩家的光线或光线投射到多边形的边缘,以及光线偏移+ -0.000001弧度以确定可见区域并将其作为多边形返回。

问题虽然是我的算法(它用矢量数学计算两行之间的不合理)太慢了。 在我非常好的PC中,我得到100fps,300 egdes和一个Ray。

我现在在线阅读了很多文章,但无法找到最佳解决方案。但据我所知,计算三角形的交叉点应该快得多。

我现在的问题是:在加载地图然后使用光线三角形交叉点时,对多边形进行三角测量是否会更快,或者有更好的方法可以解决我的问题吗? 我也听说过有限的志愿者等级,但我不知道会产生多大的影响。

我对算法消耗的功率有点惊讶,因为它只需要计算一些二维交叉点......

1 个答案:

答案 0 :(得分:1)

对于寻找解决方案的每个人,我终于选择了:

我发现了Box2D物理引擎,我现在使用b2World :: RayCast(...)函数来确定光线是否以及在何处撞击场景中的对象。 现在一切都运行良好和平稳(没有确切的基准):) http://www.iforce2d.net/b2dtut/world-querying 我在这个网站的帮助下得到了它 祝你今天愉快! :)