场景划分区域

 为何要对场景进行区域划分,这个同样是为了优化碰撞检测。因为相对于其他逻辑而言碰撞检测尤其消耗性能,尤其是对网格类的碰撞体进行碰撞检测时性能开销更大。

试想一下场景中有1000个物体 如果没有区域划分的情况,物体两两碰撞检测的次数是 1000 * 1000次,

而如果游戏帧率达到60,那么这个碰撞检测逻辑就达到了 1000 * 1000 * 60次,

而即时采用优化的机制,因为当一个物体与场景中其他物体碰撞之后,可以不再参与后面的碰撞检测。那么次数是(1000 + 999 + 998 + ...+ 1 )* 60 = (1000 * 999) / 2 * 60

如果我们将场景中的物体平均分配到 16个区域中, 当物体的大小不超过区域大小的时候,通常我们只需要和所在区域内的物体进行碰撞检测。理想情况 1000个物体分配到16个区域 ,每个区域中有 62 个物体

碰撞检测次数为 62 * 62 * 60  * 16 = 369 0240次

相比于 1000 * 1000 * 60 = 6000 0000次 可以节省 5630 9760次,大大减少了碰撞检测的总次数。


需要注意的是 处理区域边界问题,另外需要保证场景中最大的物体的大小不能够超过一个区域的大小。这样实际情况中最坏的情况是一个物体处于边界时可能同时在 4个区域中



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值