这是我的问题。找到网格交叉点的算法
我的游戏,高效的渲染和碰撞被划分成区域。 每个地区都会有很多物体会动态移动。当他们移动时,我需要一种方法来快速确定它们所处的区域。
对象永远不会比区域更长或更宽。因此,它永远不会超过4个地区。
棘手的部分是对象的矩形是使用2D中单独轴定理的定向边界框,因此它们可以旋转。
我曾想过这样做的主要途径是通过确定每个点的区域:
static public int colFromPos(float startX,float width, float x)
{
x -= startX;
return (int)Math.floor(x/width);
}
static public int rowFromPos(float startY,float height, float y)
{
y -= startY;
return (int)Math.floor(y/height);
}
这似乎相当快。
我想到的几种方法可以做到这一点是这样的:
- 我产生OBB的矩形边框,找到这个矩形的4个区域。这里的缺点是,为了确定对象是否真的在进行furthur测试,必须执行 。
- 我确定每个角的区域和OBB的每个中点。
有没有更好,更快的方法去做这件事? 是我的解决方案好点子吗?
由于
方法#2可以给你不正确的答案。 – bdares
鉴于对象不能超过区域的大小,方法1是否完全正确以确定OBB在哪些区域? – jmasterx
性能和替代方法实际上取决于对象的复杂性和性质......构建OBB可能是微不足道的,也可能过于昂贵,具体取决于。 – bdares