[英]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.