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

3
我正在使用C++在UE4中创建四叉树,但我对C++还很陌生,所以需要帮助。
我的主要问题是如何可视化四叉树。
基本上,我有一个名为Quadtree的本地C++类。在这个类里面,我有所有的函数,如插入点、细分等等... 我还有一个名为C_Quadtree(很蠢的名字,我知道)的AActor C++类,它有一个Blueprint可调用函数来插入点,并且有一个可视化方法。
以下是我尝试可视化的方式:
    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类中声明的subdivide函数:

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);
}

有任何想法吗?
1个回答

0
通过将四叉树压缩成数组,您会失去四叉树的功能。您可以使用数组来存储Quadtree指针的副本,但我建议使用Quadtree对象本身上的递归函数来实现功能。递归将沿着指针向下遍历四叉树的每个分支,最后到达nullptr。示例函数:
Quadtree::SubdivideEach()
{
    if(NorthWest != nullptr)
        NorthWest->SubdivideEach();
    else
        subdivide();
    if(NorthEast != nullptr)
        NorthEast->SubdivideEach();
    else
        subdivide();
    //and the others
}

为了保持视图编辑器和蓝图的兼容性,您可能需要为Quadtree类添加UE4 API。最简单的方法是通过执行“文件”->“新建C++类”->选择UObject子类的选项,然后复制并粘贴现有代码来完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接