gpt4 book ai didi

c++ - 如何在 UE4/c++ 中可视化我的四叉树

转载 作者:太空狗 更新时间:2023-10-29 23:10:53 26 4
gpt4 key购买 nike

我正在使用 C++ 在 UE4 中制作四叉树,我对 C++ 很陌生,所以我需要这方面的帮助。

我主要关心的是可视化四叉树。

基本上我有一个名为 Quadtree 的原生 C++ 类。在这个类中,我有所有的功能,如插入点、 segmentation 等……我有一个名为 C_Quadtree(愚蠢的名字,我知道)的 AActor c++ 类,它有一个用于插入点的蓝图可调用函数和一个可视化方法。

以下是我尝试将其可视化的方式:

    void AC_Quadtree::show(Quadtree* Node)
{
FVector BoxCenter = FVector(Node->GetBoundary().GetCenter(), 0);
FVector BoxExtent = FVector(Node->GetBoundary().GetExtent(), 0);
DrawDebugBox(GetWorld(), BoxCenter, BoxExtent, FColor::White, false, -1, 0, 3);
}

void AC_Quadtree::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);

for (Quadtree *Node : TreeNodes) {
show(Node);
}
}

我已经像这样声明了一个数组来存储 TreeNodes:

TArray<Quadtree*> TreeNodes; 

但是,我不知道如何将创建的四叉树从原生 Quadtree 类添加到 Actor C_Quadtree 类内部的数组中。

这是在 Quadtree 类中声明的 segmentation 函数:

void Quadtree::subdivide()
{
//Init local variables to make the Math clearer.
FVector2D Center = Boundary.GetCenter();
FVector2D HalfExtent = Boundary.GetExtent() / 2;

NorthWest = new Quadtree( FVector2D(Center.X + HalfExtent.X, Center.Y - HalfExtent.Y), HalfExtent);
NorthEast = new Quadtree( Center + HalfExtent, HalfExtent);
SouthWest = new Quadtree( Center - HalfExtent, HalfExtent);
SouthEast = new Quadtree( FVector2D(Center.X - HalfExtent.X, Center.Y + HalfExtent.Y), HalfExtent);
}

有什么想法吗?

最佳答案

通过将四叉树压缩成一个数组,您失去了四叉树的功能。您可以使用数组来存储四叉树指针的拷贝,但我建议在四叉树对象本身上使用递归函数来实现功能。递归将跟随指针向下到达四叉树的每个分支,以 nullptr 结束。示例函数:

Quadtree::SubdivideEach()
{
if(NorthWest != nullptr)
NorthWest->SubdivideEach();
else
subdivide();
if(NorthEast != nullptr)
NorthEast->SubdivideEach();
else
subdivide();
//and the others
}

为了保持在编辑器中查看和蓝图的兼容性,您可能需要为您的四叉树类添加 UE4 API。最简单的方法是执行文件 -> “新 C++ 类” -> UObject 子类的选项,然后复制粘贴现有代码。

关于c++ - 如何在 UE4/c++ 中可视化我的四叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54199176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com