3D库建议用于交互式空间数据可视化?

Dav*_*vid 20 delphi 3d data-visualization c++builder

我们的软件会生成大量地理参考和记录的数据.我们正在考虑改进可视化的方法,并在3D视图中显示(处理过的)数据,因为它的地理参考,似乎是一个好主意.

在基于Delphi-/C++ Builder的Windows应用程序中构建这些可视化时,我正在寻找有关哪些3D库最适合作为基础的SO建议.我会尽可能地加上赏金.

数据

  • 随时间记录(数小时到数天),并进行GPS标记.因此,随着时间的推移,我们有很多数据.
  • 是空间:它代表地球的真实3D元素,例如陆地,或地球周围物体的3D元素.
  • 数量很大:例如,我们可以拥有数十万到数百万点的点云.处理的数据可以显示为从这些点云创建的表面.

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

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

  • 良好的导航(例如,仅基于欧拉旋转的库?你可以选择'对象旋转或轻松移动吗?);
  • 现代GPU(仅着色器渲染是可以的;能够挂钩到管道中以编写将值映射到颜色并动态变化的着色器会很棒 - 想想通过颜色查找表给出颜色的数据值);
  • 动态数据/对象(数据可以在记录时添加;如果数据量太高,我们应该能够进出页面或重新创建它们,并且只显示一个合理的子集,以便无论用户的视口是什么at屏幕上有,但是其他数据可以加载/重新生成,最好是异步,或者至少在用户导航时很快.显然,数据创建依赖于我们,但是一个有这种东西钩子的库会很棒.)
  • 在技​​术上,与Delphi/C++ Builder和VCL一起使用.

图书馆

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

1. FireMonkey

这是Embarcadero的新UI库,仅在XE2及更高版本中可用.我们的应用程序基于VCL,我们希望在VCL窗口中托管它; 这似乎是官方不支持但非正式工作正常,或通过第三方提供.

UI框架和3D框架与着色器等的混合听起来很棒.但是我不知道库是多么复杂,它对数据的支持是什么,它不是像立方体或球体那样简单的对象,以及它的设计是多么好.最后一个链接对图书馆的3D方面提出了重大批评 - 严重到足以说明我在编写一个非平凡的3D应用程序时,目前尚不确定它是否值得.

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

2. GLScene

GLScene是Delphi着名的3D OpenGL框架.我自己从未使用它,所以没有经验,如何工作或设计.但是,我相信它可以很好地集成到VCL窗口中,并支持着色器和现代GPU.我不知道它的场景图或导航是如何工作的,或者是如何实现动态数据的.

它的功能列表特别提到了我感兴趣的一些东西,例如简单的旋转/移动,程序对象(暗示动态数据易于实现),以及用于拾取的辅助函数.似乎着色器只是Cg(不是GLSL或其他非特定于供应商的语言.)它还支持"纹理化的多态图像支持(允许多种格式以及程序纹理),易于扩展" - 这可能仅仅意味着许多图像格式,或者它可以指示可以动态改变纹理的某些东西,例如用于动态颜色映射.

从哪里来?

这是我所知道的Delphi或C++ Builder中唯一的两个主要3D库.我错过了吗?我不知道有利有弊吗?您是否有任何使用这些目的的经验,我们应该知道和使用哪些陷阱?

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

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

Sim*_*mon 8

我在我的3D地理映射软件中使用了GLScene,虽然它在某种程度上没有使用,但我可以保证它似乎最适合你想要做的事情.

GLScene支持地形渲染并向场景添加可自定义的对象.可以与对象进行交互,您可以使用GLScene的各种构建块创建对象的复杂3D模型.不幸的是我不知道它将如何工作数百万点,但我知道它是相当优化的并且在最小的硬件上表现很好 - 据说 - 我发现的目标PC需要一个能够使用OpenGL 2.1扩展的专用显卡或更高(我发现集成显卡的小问题).

我看过的另一个库是DXscene - 虽然使用DirectX而不是OpenGL,但看起来与GLScene非常相似.从内存来看,这是一个商业产品,其中GLScene是根据GPL许可的.(编辑 - 此页面似乎已关闭:http://www.ksdev.com/index.html)

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

我能引起你注意的唯一缺点是你可以获得有时有限的帮助/支持.是的,有一个参考手册和一些演示应用程序,向您展示如何选择对象并移动它们,但参考手册不完整,有可能"陷入"如何完成一个某些任务.论坛支持有限/稀疏.如果您对3D基础知识和概念有充分的了解,我相信您可以坚持下去.

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

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

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


小智 5

你试过glData吗?http://gldata.sourceforge.net/ 它已经老了(〜2004年,Delphi 7),而且我没有亲自使用过这个库,但有些输出结果令人惊叹.