Articles of 八叉树

如何将一个大型模型分解为八进制代码?

对于碰撞检测,我试图将一个大型模型分成八叉树。 如果我们把这件黑色的东西当成船(104000个顶点): 然后我想分开面孔 我可以很容易地把它们分开,但问题是位置之一。 例如,如果我们拿左下角的块,我怎么知道炮弹(在这种情况下是一个炮弹)在那个特定的块? 而且我怎样才能首先定义块的区域? 就这一点而言,我还需要他们和船一起轮换! 我绝望地失去了如何做到这一点,所以我希望有人能帮助我。

如何正确实例化UE4中的八叉树?

我试图创建一个简单的八叉这样:(我看了FMeshTriOctree源代码,因为answers.unrealengine.com帮助我没有问题) // My FVertex class is slightly more complexe, but let's say it's something like this: class FVertex : public FVector { int32 ID; } struct FVertexOctreeSemantics { enum { MaxElementsPerLeaf = 16 }; enum { MinInclusiveElementsPerNode = 7 }; enum { MaxNodeDepth = 12 }; typedef TInlineAllocator<MaxElementsPerLeaf> ElementAllocator; FORCEINLINE static FBoxCenterAndExtent GetBoundingBox(const PBS::FVertex* Vertex) […]

包含整个场景的音量?

我想直接的方法是迭代通过对象,并find每个轴上的最大和最小坐标,但这似乎有点不理想。 有没有更快,更有效的方法呢?

需要简单的八叉树实现的帮助

你好我试图实现一个八叉树,但是当我查询中心位置,他们都返回零,但这些应该从零偏移。 这是我的代码: class Octree: def __init__( self, _centre, _size ): ''' Class to create an Octree @param: _centre: [float,float,float], position in world space for centre of octree @param: _size: float, length of one edge of the first cube, should be big enough to fit all data ''' self.centre = _centre self.size = _size self.octreeNodes = […]

如何在OpenGL的着色器中创建更多的顶点?

当渲染八叉树体素时,唯一需要的信息是当前的八叉树级别,位置和颜色/纹理。 但是必须发送八个顶点到渲染管道,以渲染一个完整的立方体,仍然需要颜色/纹理。 有没有更好的办法? 由于几何着色器不会被广泛传播相当长的一段时间,在geometry-pass中的“emit_vertex”方法已经足够了(或者我错了吗?我不认为mesa目前支持几何着色器)。 而且,afaik,backface-culling在geometry-pass之前完成,所以会导致额外的开销。 我目前的想法是发送“虚拟顶点”,并有实际的绘图数据之间,但实际上不应该是解决scheme。 亲切的问候

如何从父母到孩子正确地移动八叉树数据?

这是我的第一个问题,如果是重复的道歉,我已经看了其他的问题,我似乎无法find答案。 所以我在OpenGL中做了一个recursion的八叉树。 到目前为止,我已经掌握了所有我认为应该正确构成八叉树的一切。 如果我首先绘制所有分区(节点)(例如,通过八叉树的构造函数),则八叉树会完全正确地显示(深度级别为3)。 不过,我只想在需要的时候添加分区,我有立方体在大根节点内部移动,它们在内部弹跳,永不离​​开。 我遇到的问题是试图使分区出现,如果节点的项目的最大阈值超过。 目前,它只适用于左下方的前端节点。 这里是我认为问题发生的地方,也是我试图dynamic添加分区的地方: // Inserts data from the main function into here for checks. void Node::Insert(Data* all_data) { // If there are children. if (!nodes_.empty()) { // Check to see if the data collides with the child node. Node* child_node = GetChild(all_data); // If the data does collide. if (child_node […]

有没有人有一个在C#中的双轮廓的例子?

我正在尝试开发一种使用Perlin创建地形的方法。 我遵循了大量的Minecraft教程,并让它们起作用。 我已经做了一些玩MarchingSquares,但我不挖。 现在,我一直在试图创建一个双轮廓的方法,我也试图同时把八叉树的概念弄清楚。 我曾经用小块的方式来分割我的数据,但是整个Collapsing和一个更大的“chunk”函数就像一个更小的chunker一样,都没有调整。 我希望有人可以共享一些C#代码,最好是为了Unity,但真的只是为了尝试分辨明白的东西会有所帮助。 当它真正归结为它时,我并不是想要制作一个游戏,其中不同的“体素”不是不同types的块,只是代表污垢在哪里,而不在哪里。 在游戏中,我想因为爆炸而把灰尘带走,但是却没有一种放置污垢的方法。 我想这个效果对于大型封闭的游戏级别。 任何意见或建议表示赞赏。

如何将八叉树转换为三维数组

我有一个计划用于3D寻路的八叉树。 我的计划是打破世界,使树的所有叶节点的尺寸相同,创建一个漂亮的网格,然后通过添加一个额外的维度来适应A *,并在网格上运行search。 下面的图片显示了我的叶子节点的一个样本来展示我在说什么(忽略球体,他们是为了别的东西)。 我不确定的是如何在树结构上执行A *。 我的想法是将树结构转换为3D数组,这将使得执行A *变得非常容易,但是我不知道如何去做这件事。 我可以recursion地沿着树的方式工作,并告诉哪些节点是叶节点,但是我不知道如何以有序的方式工作,这样我可以正确地将节点索引到一个数组中。 我将如何去做这件事? 这是否是正确的方法; 或者有没有更好的方法来在树上执行A *? 注意:我知道这个空间实际上可能不足以certificate完整的3Dpath搜寻,但是这是为了对这个概念进行演示/testing,所以我想把事情保持的相对简单。

用于3D导航的简单的愚蠢的漏斗algorithm(SSFA)

我需要一个类似于SSFAalgorithm,除了有4个顶点的门户网站(或者如果像这样的algorithm存在n个顶点)。 我正在研究一个需要三维寻路的游戏。 我的意思是,代理人完全可以控制自己的位置,而不是许多代理人只能控制前进,后退,左转,右转,需要走上楼梯或上下坡的游戏。 要做到这一点,我做了一个“导航网格”使用八叉树检查在每个地区的碰撞,并细分是否有碰撞(直到一定的立方体大小的限制)。 所以我现在有一个图,其中每个节点是基于八叉树的一定大小的立方体。 使用这个,我可以在图上运行A *algorithm寻路。 不幸的是,向每个节点的中心移动看起来很糟糕,甚至向节点的每个连接面的中心(两个连接节点的相邻面中较小的一个)看起来不好。 在过去,我使用SSFA来简化path,但是它只适用于以边缘为门户而不是面部的情况。 有没有一个这样的algorithm,还是有办法让我的path看起来更好? 忍者编辑:我已经有点使用转向行为,但由于节点的中心可以大大不同,基于八叉树的复杂性,它仍然不好看。

调用更新八进制function(只有更改)

问题:如何更新我在八叉树上的单位位置,我正在努力的逻辑,特别是当它改变八,树,我想它popup其先前的八叉树本身,它是如何到它的新的八叉树, 更新是每帧调用,有没有办法只有当它知道当前单元的八叉树已经改变,而不是每秒进行比较,因为这会抛出exception错误,因为只能从列表中popup它一次? void EntityUnit::updateoct(worldspace &gameworldspace) { int store = current_oct; for (auto a = gameworldspace.wspace.begin(); a<gameworldspace.wspace.end(); ++a) { if (checkwithinbounds(CVector3{unit_x,unit_y,unit_z}, (*a).w_origin, (*a).w_sideLen)) { current_oct = (*a).num; //if oct-tree has changed since last call execute this // push this onto (a*).cObjs for (auto i = gameworldspace.wspace[current_oct].cObjs.begin(); i < gameworldspace.wspace[current_oct].cObjs.end(); ++i) { if ((*i) == this) { […]