Questions tagged «quadtree»

1
揭开“大量细节的神秘面纱”
就在最近,试图在Unity中实现分块的细节系统。我将生成四个网格平面,每个平面都有一个高度图,但我想目前这并不是太重要。在阅读完有关此技术的内容后,我有很多疑问,我希望这不是一口气就能提出的,但是我非常感谢有人帮助我理解这种技术。 1:我无法理解在块状LOD管道的哪一点网格被分割成块。是在初始网格生成过程中执行此操作,还是执行此操作的单独算法? 2:我知道四叉树数据结构用于存储块状LOD数据,我想我有点遗漏了点,但是四叉树是否为每个细分级别存储了顶点和三角形数据? 3a:通常如何计算相机距离。在阅读有关四叉树的知识时,经常会提到与Axis对齐的边界框。在这种情况下,每个块都会有一个碰撞边界框来检测相机或播放器是否在附近?还是有更好的方法呢?(也许是射线广播?) 3b:大块自己计算相机距离吗? 4:每个块都具有相同的“分辨率”。例如,在顶层,网格将为32x32,每个细分节点也将为32x32。下面的例子:

1
基于四叉树/网格的碰撞-将逻辑付诸实践
首先,我只是在短时间内编写了自己的游戏逻辑,所以如果这看起来很简单,我深表歉意。 我已经阅读了很多有关四叉树和基于网格的碰撞检测的信息。我了解逻辑-除非物体基本靠近,否则基本上不检查碰撞。但从未提及如何实际执行此操作。 我脑子里有几种可能的方法,但不确定哪种方法最好 通用碰撞测试-没有优化 for(var i:int = 0; i < objects.length; i++){ //find object A var objectA = objects[i]; for(var j:int = i + 1; j < objects.length; j++){ //find object B var objectB = objects[j]; if(objectA.collidesWith(objectB){ //handle collision logic } } 存储邻居(方法1) 但是,如果我们要优化冲突以仅检查附近的对象该怎么办。我们是否仍然遍历所有对象,还是创建带有近对象以进行检查的数组? var objects:Array = new Array(); var …

2
全动态KD树与四叉树?
在开发游戏时,我正处于需要跟踪世界上所有单位的地步,以便可以进行最近邻检查以进行战斗。这是一款类似于RTS的游戏,可能有成千上万的小型自动化单位在移动。 我一直在研究KD树和四叉树(尤其是点四叉树)。我仍在尝试了解它们如何工作的详细信息,但是到目前为止,Point Quadtree对我来说最有意义。但是,我的印象是KD-Trees的搜索速度更快,这对我在树中拥有的点数很重要。 另一方面,就我而言,我将跟踪大量始终在移动的单元。从一帧到另一帧,它们的位置将始终不同。四叉树显然比KD-Trees重平衡更快,但是我不知道当您重新平衡树中的每个点时是否适用。 我想知道在这种情况下,最好只是逐帧废弃树并从头开始重建它,而不是尝试重新平衡树中的每个点?如果Quadtree重新平衡的速度更快,是否也意味着从头开始构建的速度更快?如果是这样,那对性能而言可能比KD-Tree的搜索速度更重要,这取决于创建树的负担,但我不知道...
11 rts  quadtree  kd-tree 

1
形状(矩形)如何在四叉树中工作?
有人告诉我,四叉树是我的游戏的理想数据结构,但是我在理解形状在四叉树中的工作方式时遇到了麻烦。 我正在用JavaScript进行此操作,但我认为这些问题可能适用于任何语言的四叉树。 我想我最了解基本(x,y)点和点插入在四叉树中的工作原理,并且我可以在纸上做到这一点。 这是我尝试点的JSfiddle。 除了一个案例,我的分数测试按预期进行。 但是,当涉及矩形等形状时,我的困惑就开始了。当从具有形状的四叉树中检索时,它会检查形状的每个点以及它们落入哪些节点?当形状插入接受每个形状的(x,y,width,height)参数时,形状插入甚至如何工作?它是否使用起点的宽度/高度来计算其他角点,然后将其分配到适当的节点中?如果插入的形状跨越四个节点,该形状的数据是否保存到所有四个节点中? 当检索方法接受形状作为参数(x,y,width,height)时,实际上是怎么回事?是否首先查看形状要插入到哪个节点,然后检索这些节点的所有对象? 我有一个使用shape的JSfiddle,但是我对测试结果完全感到困惑。我正在收到重复的对象! 例如,红色方块等效于我输入到检索方法中的参数。我认为,由于这个红色正方形跨越了所有四个节点,因此它应该返回四叉树中的每个对象!但事实并非如此,而且我在合理化返回结果方面遇到了麻烦。目前,我还有许多其他测试已被注释掉,但是您可以取消注释并运行它们以查看更令人困惑的结果! 就像说,如果我想返回四叉树中的所有点,我该怎么做?使用形状的整个边界范围的检索方法?例如,retrieve(0,0,canvas.width,canvas.height)? 我正在使用的JavaScript QuadTree库已被其他各种来源引用,因此,我认为实际的实现是正确且信誉良好的。 我认为我的许多困惑可能源于对四叉树术语的误解。就像,为什么当“点”也具有width / height参数时,为什么用边界而不是尺寸?是约定俗成的问题还是它们的完全不同的概念? 谢谢你的时间!

3
QuadTree:仅存储点还是区域?
我正在开发四叉树,以跟踪移动物体以进行碰撞检测。每个对象都有一个边界形状,假设它们都是圆形。(这是一个二维的自上而下的游戏) 我不确定是否只存储每个对象的位置或整个边界形状。 如果使用点,则插入和细分很容易,因为对象永远不会跨越多个节点。另一方面,对对象的邻近查询可能会错过碰撞,因为它不会考虑对象的尺寸。只有点时如何计算查询区域? 如果使用区域,如何处理跨越多个节点的对象?即使它超出了节点的容量,也应该将其插入到完全包含它的最近的父节点中吗? 谢谢。
9 quadtree 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.