【问题标题】:2D-Visibility/Light - Efficient Polygon-Ray intersection2D-Visibility/Light - 高效多边形射线相交
【发布时间】:2015-07-14 11:22:51
【问题描述】:

我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题很好地结合在一起(实际上是相同的),我想同时解决这两个问题。 我的世界将从文件中加载,其中对象的命中框将表示为多边形。 我现在编写了一些代码,它采用多边形列表和跟随鼠标的光线方向,并找到与这些多边形中的任何一个最近的交点。 现在的下一步是将来自玩家或灯光位置的光线投射到多边形的边缘,以及偏移 +-0.000001 弧度的光线以确定可见区域并将其作为多边形返回。

但问题是我的算法(它用向量数学计算两条线之间的相交)太慢了。 在我非常好的 PC 上,我得到 100fps,300 egdes 和一个 Ray。

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

我现在的问题是:在加载地图时对多边形进行一次三角测量然后使用射线三角相交会更快吗?或者你知道有没有更好的方法来解决我的问题? 我也听说过限制 Volumen 层次结构,但我不知道会产生多大的影响。

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

【问题讨论】:

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


【解决方案1】:

对于所有寻找我最终选择的解决方案的人:

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

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2011-08-30
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多