首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交互式空间数据可视化的3D库建议?

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

Stack Overflow用户
提问于 2012-03-06 03:44:10
回答 4查看 3.5K关注 0票数 20

我们的软件产生了大量的数据,这些数据是随着时间的推移进行地理参考和记录的。我们正在考虑改进可视化的方法,在3D视图中显示(处理过的)数据,考虑到它是地理参考的,似乎是一个好主意。

在基于Delphi/C++Builder的应用程序中构建这种可视化时,我正在寻找SO的建议,关于什么3D库是最好的基础。我会在可能的时候加个赏金。

数据

  • 是随时间(几小时到几天)记录的,并带有全球定位系统标签。因此,随着时间的推移,我们有大量的数据。
  • 是空间的:它代表了地球上真实的3D元素,比如土地,或者地球周围物体的3D元素。
  • 是大容量的:我们可以有一个点云,比方说,有几十万到几百万个点。处理后的数据可能会显示为从这些点云创建的曲面。

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

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

  • good导航(例如,该库是否仅基于欧拉旋转?你能用easily?);
  • modern GPU来“挑选”要旋转或移动的对象吗?(只渲染着色器是可以的;能够钩入管道来编写将值映射到颜色并动态改变的着色器将是很棒的-考虑通过颜色查找table);
  • dynamic / objects给定颜色的数据值(数据可以在记录时添加;如果数据量太大,我们应该能够分页或重新创建它们,并且只显示一个合理的子集,以便用户正在查看的任何视图都在屏幕上,但其他数据可以加载/重新生成,最好是异步加载/重新生成,或者至少在用户导航时快速加载/重新生成。很明显,数据的创建依赖于我们,但如果有一个能够处理这类事情的库就更好了。)
  • 和技术上,可以与Delphi / C++Builder和Delphi一起工作

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

1. FireMonkey

这是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中工作的库可能是最好的。

感谢您的意见:)我正在寻找高质量的答案,所以我会在可能的情况下添加赏金!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-08 10:24:06

我已经在我的3D地理地图软件中使用了GLScene,尽管它没有使用到你想要的程度,但我可以保证,它似乎最适合你正在尝试做的事情。

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

我研究过的另一个库是DXscene --它看起来与GLScene非常相似,只不过它使用的是DirectX而不是OpenGL。从内存中看,这是一个商业产品,其中GLScene是在通用公共许可证下获得许可的。(编辑-页面目前似乎已关闭:http://www.ksdev.com/index.html)

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

我能引起您注意的唯一缺点是,您有时只能获得有限的帮助/支持。是的,有一本参考手册和一些演示应用程序来向你展示如何做一些事情,比如选择对象和移动它们,但是参考手册并不完整,并且有可能在如何完成特定任务方面陷入困境。论坛的支持是有限的/稀疏的。如果你对3D基础和概念有很好的了解,我相信你一定能把它做好。

至于火猴--我没有这方面的经验,所以我无可奉告。我认为这更多是针对硬件要求较低的移动应用程序,因此您可能会在处理较大的数据集时遇到问题。

这里有一些你可以考虑的其他链接--我没有使用它们的经验:

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

票数 8
EN

Stack Overflow用户

发布于 2012-03-08 08:14:11

你尝试过glData吗?http://gldata.sourceforge.net/它很旧(约2004年,Delphi7),我没有亲自使用过这个库,但一些输出很令人惊叹。

票数 5
EN

Stack Overflow用户

发布于 2012-03-08 16:53:14

你可以使用GLSceneOpenGL,它们是很好的3D渲染,而且非常容易使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9572887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档