簡體   English   中英

如何在UE4 / c ++中可視化我的四叉樹

[英]How can I visualize my quadtree in UE4 / c++

我正在使用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);
    }
}

我已聲明一個Array來存儲TreeNodes,如下所示:

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

有任何想法嗎?

通過將四叉樹壓縮成陣列,您將失去四叉樹的功能。 您可以使用數組來存儲Quadtree指針的副本,但我建議在Quadtree對象本身上使用遞歸函數來實現功能。 遞歸將跟隨指針向下到四叉樹的每個分支,結束於nullptr。 功能示例:

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

要保持View-In-Editor和Blueprint兼容性,您可能需要為Quadtree類添加UE4 API。 這是最簡單的方法,通過執行文件 - >“新建C ++類” - > UObject子類的選項,然后復制粘貼現有代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM