gpt4 book ai didi

c++ - 二维可见性/光线 - 高效的多边形射线相交

转载 作者:行者123 更新时间:2023-11-30 05:40:50 33 4
gpt4 key购买 nike

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

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

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

我现在的问题是:在加载 map 时对多边形进行一次三角剖分然后使用射线-三角形相交会更快吗?或者您是否知道有更好的方法来解决我的问题?我也听说过边界 Volumen 层次结构,但我不知道那会产生多大的影响。

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

最佳答案

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

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

关于c++ - 二维可见性/光线 - 高效的多边形射线相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405208/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com