2D-Visibility/Light - 高效的多边形射线相交
2D-Visibility/Light - Efficient Polygon-Ray intersection
我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题非常吻合(实际上是相同的),我想同时解决这两个问题。
我的世界将从文件中加载,其中对象的碰撞框将表示为多边形。
我现在编写了一些代码,这些代码采用多边形列表和跟随鼠标的光线方向,并找到与这些多边形中的任何一个最近的交点。
现在的下一步是从玩家或灯光位置向多边形的边缘投射光线,并将光线偏移 +-0.000001 弧度以确定可见区域并将其作为多边形返回。
但问题是我的算法(它用矢量数学计算两条线之间的交点)太慢了。
在我非常好的 PC 上,我用 300 个 egdes 和一个 Ray 得到 100fps。
我现在在网上阅读了很多文章,但找不到一个最佳解决方案。但据我所知,计算与三角形的交点应该快得多。
我现在的问题是:在加载地图时对多边形进行一次三角剖分然后使用射线-三角形相交会更快吗?或者您是否知道有更好的方法来解决我的问题?
我也听说过 bounding Volumen hierachies 但我不知道会有多大影响。
我对我的算法消耗的能量感到有点惊讶,因为它只需要计算一些二维交集...
对于所有寻找我最终采用的解决方案的人:
我发现了 Box2D 物理引擎,现在我正在使用 b2World::RayCast(...) 函数来确定光线是否以及在何处击中场景中的对象。
现在一切正常(还没有确切的基准):)
http://www.iforce2d.net/b2dtut/world-querying
我在这个网站的帮助下让它工作
祝你今天过得愉快! :)
我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题非常吻合(实际上是相同的),我想同时解决这两个问题。 我的世界将从文件中加载,其中对象的碰撞框将表示为多边形。 我现在编写了一些代码,这些代码采用多边形列表和跟随鼠标的光线方向,并找到与这些多边形中的任何一个最近的交点。 现在的下一步是从玩家或灯光位置向多边形的边缘投射光线,并将光线偏移 +-0.000001 弧度以确定可见区域并将其作为多边形返回。
但问题是我的算法(它用矢量数学计算两条线之间的交点)太慢了。 在我非常好的 PC 上,我用 300 个 egdes 和一个 Ray 得到 100fps。
我现在在网上阅读了很多文章,但找不到一个最佳解决方案。但据我所知,计算与三角形的交点应该快得多。
我现在的问题是:在加载地图时对多边形进行一次三角剖分然后使用射线-三角形相交会更快吗?或者您是否知道有更好的方法来解决我的问题? 我也听说过 bounding Volumen hierachies 但我不知道会有多大影响。
我对我的算法消耗的能量感到有点惊讶,因为它只需要计算一些二维交集...
对于所有寻找我最终采用的解决方案的人:
我发现了 Box2D 物理引擎,现在我正在使用 b2World::RayCast(...) 函数来确定光线是否以及在何处击中场景中的对象。 现在一切正常(还没有确切的基准):) http://www.iforce2d.net/b2dtut/world-querying 我在这个网站的帮助下让它工作 祝你今天过得愉快! :)