【问题标题】:How can I visualize my quadtree in UE4 / c++如何在 UE4 / C++ 中可视化我的四叉树
【发布时间】:2019-06-09 11:36:45
【问题描述】:

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

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

基本上我有一个名为 Quadtree 的原生 c++ 类。在这个类里面,我有所有的功能,比如插入点、细分等等...... 而且我有一个名为 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);
    }
}

我已经声明了一个数组来存储 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);
}

有什么想法吗?

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

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

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

    为了保持 View-In-Editor 和蓝图的兼容性,您可能需要为 Quadtree 类添加 UE4 API。最简单的方法是执行 File -> "New C++ Class" -> options for Subclass of UObject,然后复制粘贴现有代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多