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

时间:2019-01-15 12:46:53

标签: c++ unreal-engine4

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

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

基本上,我有一个本地的c ++类,称为Quadtree。在此类的内部,我具有所有功能,如插入点,细分等。 而且我有一个名为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);
    }
}

我已经声明了一个数组来存储TreeNode:

TArray<Quadtree*> TreeNodes; 

但是,我不知道如何将本地Quadtree类中创建的Quadtree添加到Actor C_Quadtree类内部的数组中。

这是Quadtree类中声明的细分函数:

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 :(得分:0)

通过将四叉树压缩为数组,您将失去四叉树的功能。您可以使用数组存储四叉树指针的副本,但是我建议对四叉树对象本身使用递归函数来实现功能。递归将沿着指针向下到四叉树的每个分支,并以nullptr结尾。函数示例:

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

要保持“在编辑器中查看”和“蓝图”的兼容性,您可能需要为Quadtree类添加UE4 API。最简单的方法是对UObject的子类执行File->“ New C ++ Class”-> options,然后复制并粘贴现有代码。