用于交互式空间数据可视化的 3D 库推荐?

Posted

技术标签:

【中文标题】用于交互式空间数据可视化的 3D 库推荐?【英文标题】:3D library recommendations for interactive spatial data visualisation? 【发布时间】:2012-03-23 07:02:12 【问题描述】:

我们的软件会生成大量的地理参考数据,并随着时间的推移记录下来。我们正在考虑改进可视化的方法,并在 3D 视图中显示(处理后的)数据,考虑到地理参考,这似乎是个好主意。

我正在寻找 SO 关于在基于 Delphi/C++Builder 的 Windows 应用程序中构建此类可视化时最好使用哪些 3D 库作为基础的建议。我会尽可能增加赏金。

数据

随时间(数小时到数天)记录并带有 GPS 标记。因此,随着时间的推移,我们有大量数据遵循一条路径。 是空间的:它代表地球的真实 3D 元素,例如土地,或地球周围物体的 3D 元素。 大容量:我们可以拥有一个点云,例如,数十万到数百万个点。处理后的数据可能会显示为从这些点云创建的表面。

从中可以看出,交互式、基于空间的 3D 可视化似乎是一种不错的方法。我正在设想一些东西,您可以轻松快速地在太空中导航,并且数据将根据您正在查看的内容动态加载或生成。我希望我们不要尝试从头开始编写我们自己的 3D 库 - 对于这样的事情,必须有我们可以使用的良好现有库。

所以,我希望有一个库支持:

良好的导航(例如,库是否仅基于 Euler 旋转?您可以“挑选”对象以轻松旋转或移动吗?); 现代 GPU(仅着色器渲染是可以的;能够连接到管道以编写将值映射到颜色并动态更改的着色器会很棒 - 想想通过颜色查找表给定颜色的数据值); 动态数据/对象(数据可以在记录时添加;如果数据量太大,我们应该能够分页进出或重新创建它们,并且只显示合理的子集,以便无论用户的视口在屏幕上看什么, 但其他数据可以加载/重新生成, 最好是异步的, 或者至少在用户导航时快速. 显然数据创建取决于我们, 但是一个有这种钩子的库事情会很棒。) 在技术上,可与 Delphi / C++Builder 和 VCL 一起使用

到目前为止,我已经考虑了两个主要库 - 我正在寻找有关这些的知识渊博的意见,或者我没有考虑过的其他库。

1. 火猴

这是 Embarcadero 的新 UI 库,仅在 XE2 及更高版本中可用。我们的应用程序基于 VCL,我们希望将其托管在 VCL 窗口中;这似乎是官方不支持但unofficially works fine,或者可用through third-parties。

UI 框架和 3D 框架与着色器等的混合听起来很棒。但我不知道这个库有多复杂,它对不是像立方体或球体这样的简单对象的数据有什么支持,以及how well-designed it is。最后一个链接对库的 3D 方面提出了重大批评 - 严重到我不确定 在撰写本文时的当前状态对于一个非平凡的 3D 应用程序是否值得。

是否值得尝试使用 FireMonkey 在我们的 VCL 应用程序中编写一个新的可视化窗口?

2。 GLScene

GLScene 是一个著名的 Delphi 3D OpenGL 框架。我自己从未使用过它,因此对它的工作原理或设计方式没有经验。但是,我相信它可以很好地集成到 VCL 窗口中并支持着色器和现代 GPU。我不知道它的场景图或导航是如何工作的,也不知道动态数据的实现效果如何。

Its feature list specifically mentions some things I'm interested in,比如简单的旋转/移动,程序化的对象(暗示动态数据很容易实现),以及拾取的辅助函数。似乎着色器只是 Cg (不是 GLSL 或其他非供应商特定语言。)它还支持“纹理的多态图像支持(允许多种格式以及程序纹理),易于扩展” - 这可能只是意味着许多图像格式,或者它可能表示可以动态更改纹理的内容,例如动态颜色映射。

从这里到哪里?

这是我所知道的用于 Delphi 或 C++Builder 的仅有的两个主要 3D 库。我错过了吗?有我不知道的优点和缺点吗?您是否有使用其中任何一种实现此类目的的经验,我们应该警惕哪些陷阱或我们应该了解和使用哪些功能?

我们目前使用Embarcadero RAD Studio 2010,并且我们的大部分软件都是用 C++ 编写的。我们有少量的 Delphi,可能会考虑升级 IDE,但我们最有可能等到 64 位 C++ 编译器发布。因此,在 RS2010 中工作的库可能是最好的。

感谢您的意见 :) 我追求高质量的答案,所以我会尽可能增加赏金!

【问题讨论】:

为什么投反对票?如果您可以提供有关如何使这个问题变得更好的有用信息,请提供。 为什么是 3D?您是否考虑过从 2D 开始? 2D 中的时空表示是一个真正的挑战,而 3D 则更难。 @Tibo:好点。我们已经有了很好的 2D 可视化,我们认为 - 我们想要扩展这些,我们认为在空间中可视化空间(即 3D 表示)是下一步。但你是对的,一般来说 3D 之前的 2D 可能是一件好事 :) 【参考方案1】:

我在我的 3D 地理绘图软件中使用了 GLScene,虽然它没有达到您想要的程度,但我可以保证它似乎最适合您尝试做的事情。

GLScene 支持地形渲染和向场景添加可自定义的对象。可以与对象交互,您可以使用 GLScene 的各种构建块创建复杂的对象 3D 模型。 不幸的是,我无法说明它将如何处理数百万个点,但我确实知道它已经过优化并且在最少的硬件上表现出色 - 话虽如此 - 我发现的目标 PC 需要能够使用 OpenGL 2.1 扩展的专用显卡或更高(我发现集成显卡的小问题)。

我查看的另一个库是 DXscene - 尽管使用的是 DirectX 而不是 OpenGL,但它看起来与 GLScene 非常相似。根据记忆,这是一个商业产品,其中 GLScene 在 GPL 下获得许可。 (编辑 - 该页面目前似乎已关闭:http://www.ksdev.com/index.html

GLScene 仍在积极开发中,并提供了一个相当全面的函数库、基础对象和纹理等。旋转、平移、俯仰、滚动、转弯、光线投射 - 仅举几例 - 都为您提供。为每个基础对象以及查看摄像机、照明和网格提供了可见性剔除。基础对象包括立方体、球体、管道、四面体、圆锥体、地形、网格、3d 文本、箭头等等。 可以用鼠标拾取对象并沿 1,2 或 3 个轴移动。包含帮助函数以自动计算鼠标所在的最顶层对象。可以通过以分层方式将基础对象附加到其他基础对象来构建复杂的 3D 形状。因此,例如,可以使用矩形作为基础对象来构建汽车,并在其上附加四个圆柱体作为车轮 - 然后您可以将“汽车”作为一个整体进行操作 - 因为四个圆柱体连接到基础矩形。

我可以提请您注意的唯一缺点是有时您可以获得的帮助/支持有限。是的,有一个参考手册和一些演示应用程序向您展示如何做一些事情,例如选择对象和移动它们,但是参考手册并不完整,有可能会“卡住”如何完成一个一定的任务。论坛支持有些有限/稀疏。如果您对 3D 基础知识和概念有充分的了解,我相信您一定能明白。

至于 Firemonkey - 我没有这方面的经验,所以我无法发表评论。我相信这更适用于硬件要求较低的移动应用程序,因此您可能会遇到较大数据集的问题。

以下是您可能会考虑的其他一些链接 - 我没有使用它们的经验:

http://www.truevision3d.com/ http://www.3impact.com/ Game Development in Delphi

最后一个是针对游戏开发的 - 但可能会提供有用的信息。

【讨论】:

谢谢西蒙!我相信购买 KSDev IP 是为了为 FireMonkey 提供基础。从你所说的来看,听起来 GLScene 是一个有价值的库。其他链接看起来很有趣,虽然(来自 TrueVision)不太专业/可能是高质量的,尽管很难从网站上判断。 哦,GLScene 的另一个优点是它仍在积极开发中。希望安装过程能顺利一点!在深入之前您可能需要测试的一件事是渲染器将如何处理网格的数据集大小 我认为 GLScene 似乎是要走的路。我还没有时间尝试它,但我已经做了更多的阅读等。我会给这个答案赏金:) 最好的入门方法是安装并运行演示。了解参考手册。然后,如果您有任何具体问题,请在此处提问,我相信有人会为您指明正确的方向! GLScene 在 MPL 下是 licensed。【参考方案2】:

你试过 glData 吗? http://gldata.sourceforge.net/ 它很旧(~2004,Delphi 7),我没有亲自使用过这个库,但有些输出是惊人的。

【讨论】:

有趣!看起来它是在 GLScene 之上分层的,并提供了额外的科学/可视化功能。谢谢,我会看看这个:)【参考方案3】:

您可以使用GLScene 或OpenGL,它们是很好的 3D 渲染并且非常易于使用。

【讨论】:

GLScene 是一个围绕 OpenGL 的高级库。 OpenGL 本身太低级了——你会用它作为编写这种可视化所需的库的基础。【参考方案4】:

既然您已经在使用地理参考数据,也许您应该考虑在您的 Delphi 应用程序中嵌入 GoogleEarth,例如 this?然后,您可以将数据作为点、路径或对象添加到其中。

【讨论】:

谢谢阿夫拉。我认为我们可能会拥有比 Google 地球能够处理的更多动态(和更多数量)的数据。不过,谢谢你的建议!

以上是关于用于交互式空间数据可视化的 3D 库推荐?的主要内容,如果未能解决你的问题,请参考以下文章

python如何实现点云可视化交互——Open3D实例教程(获取所选点的信息)保姆级教学

数据中心基础设施3D可视化管理!

使用Python+Folium实现地理空间可视化效果

建模必备 Python中的那些3D图像可视化工具

用于React应用程序的数据可视化组件

为什么机房要使用三维(3D)可视化监控管理系统