更快的距离测量

时间:2014-12-12 16:42:20

标签: java performance distance

我正在使用游戏,我需要从服务器向客户端发送数据包以在客户端上产生某些粒子效果,但是,客户端只能在半径为64的范围内渲染此粒子游戏中的立方单位。

为了避免向所有客户端发送数据包,我将测量客户端与粒子起源点之间的距离,但是将为每个客户端计算距离,并且应该在不到一个游戏时间内运行(50 ms) )。

粒子将与玩家移动一起播放,并将被发送到距离内的所有客户端,因此性能有点关键(考虑到几个玩家)。

游戏API为两个位置之间的距离提供此公式(无平方根):

square(x1 - x2) + square(y1 - y2) + square(z1 - z2);

我的想法是使用粒子作为中心点在每个轴上创建一个128个长度的“盒子”,这样做的缺点是角落上的客户端不会渲染粒子但会得到数据包,浪费了带宽。

问题是,使用欧氏距离测量距离比仅仅在粒子周围创建一个“盒子”并比较客户是否位于其中更快?有没有其他方法可以更快地进行距离测量?

1 个答案:

答案 0 :(得分:2)

一种非常有效的方法,尤其是对于大量的点,使用八叉树(三维四叉树)作为数据结构。

请参阅Wikipedia article了解相关信息。

这是一个三维空间索引,可让您快速检索某个三维(矩形)范围内的点。

如果您想进一步减少点数,可以使用距离公式过滤掉您发现的点数;但是,通过使用Oct-tree空间索引,这个点的数量应该已经大大减少了,这个数据并没有从性能中减去很多。