如何在UE4 / c++中可视化我的四叉树
How can I visualize my quadtree in UE4 / c++
我正在使用 c++ 在 UE4 中制作一个 Quadtree,我对 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);
}
}
我已经声明了一个数组来存储树节点,如下所示:
TArray<Quadtree*> TreeNodes;
但是,我不知道如何将从本机四叉树类创建的四叉树添加到 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
}
为了保持编辑器中视图和蓝图的兼容性,您可能需要为Quadtree类添加UE4 API。最简单的方法是为 UObject 的子类执行 File ->"New C++ Class" -> 选项,然后复制粘贴现有代码。
相关文章:
- 可视化 如何在 c++ 中制作特定大小的文件?
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 提升如何在图形可视化中写入边缘的权重?
- 如何在大型c++项目的可视化代码中设置调试
- 可视化编译与 C++ 中的 Extern 变量
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- OpenCV 中大量可视化::Widget3D 的性能不佳
- 可视化如何在我的C++程序中最好地使用相同的Boost日志
- 如何在UE4 / c++中可视化我的四叉树
- 是否有用于可视化缓存的工具C++
- 可视化解决我列表中的C++类模板错误
- 可视化 我可以在哪里为多个操作系统中的应用程序启动 c++
- C++可视化变量的内存
- 可视化 为什么我的 C# 和 C++ dll 表现出不同的行为
- 为什么将可视化调试器附加到我的程序比直接从visual studio运行它更快?
- GDB支持STL可视化(漂亮的打印)
- 运动可视化仪的结构
- 可视化如何做我遍历 std::map<std::string,shared_ptr<A>> 在 C++ 中的元素
- 为什么我的多线程C++ .NET 应用程序仅在可视化工作室之外执行时才崩溃
- 可视化 如何查找我的C++应用程序正在使用的标头