高级数据结构——四/八叉树

四叉树在游戏行业运用非常之多。比如大场景的物件动态加载,NPC动态加载等,只用显示玩家周围的对象,能非常有效的降低场景CPU和GPU消耗。四叉树的查找算法,通过遍历子节点只到找到与之相交的叶子节点,就不做记录了,在这里将玩家移动时,周围物件显示和隐藏的过程记录下来,以便日后能快速回忆。

对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染。但这种做法在效率上来说是相当低下的,因为真正需要渲染的物体是视椎体内的物体。除此之外,从裁剪算法和碰撞检测等算法的效率来说,使用这种数据结构也是相当低效的。

何为四叉树

四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。在这里插入图片描述

四叉树的游戏内应用

  • 超大地形渲染剔除
  • 动态绘制玩家周围地形
  • 动态载入游戏对象

在使用四叉树的时候可以将时间复杂度从O(n)降到O(logn)。

为什么在游戏中我们一般用四叉树代替一般的遍历查找呢?、

为什么在游戏中我们要用4叉树代替一般的遍历查找呢?它的优越性主要在于能在大规模对象队列中快速的查找到你想要的内容,而他的消耗却跟对象数的数目没有太直接的关系。
在这里插入图片描述
如图,你可以看到,如果在程序中通过遍历查找对象 那是相当消耗资源的,而且会随着数目的增加而呈正比例消耗;

但4叉树则不同,他通过预先建树的过程把对象整理到一个完整的树状结构中去.查询的时候只要根据要求的范围,通过遍历树节点的方法即可得到想要的数据.快速而简洁,

  • 首先我们以屏幕中心将区域等分成4等分,然后以这4个区间(红线区间)分支点把在各自区间的对象添加到对应支点的哈希表里边;
  • 然后再分别对这4个区间各自进行4等分,重复上边的步骤,(黄线区间),然后在如此类推,一般说只要进行5-6个层级的等分足以分到
    1像素大小左右了,这个过程称之为建树;

建树完毕接下来就是用树;

为什么说4叉树遍历快就在于刚才我们的建树过程已经将对象划分到各个支点中去了,剩下的我们只要根据一个搜索区域或者以及一个精确度即可通过递归的方式遍历与搜索区域相交的区间的节点即可.

比方说搜索区域只与第一区间相交,那么就意味之我们只需要遍历第一个区间的节点即可,那样我们就相当于剩下了其他3个区间对象的遍历了,这就是4叉树快的原因所在,而且他不跟对象数目直接相关,它只在乎建树时的区间等级树.

想我们做游戏场景一般都只会在5000*5000的范围内 这样的大小对于四叉树来说只要6层左右就可以完成建树过程了.但搜索的过程确实那么的快速.高效.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值