我正在寻找SO的建议,当在基于Delphi- / C Builder的Windows应用程序中构建这些可视化时,3D库最适合用作基础。我可以添加一个赏金。
数据
>随着时间的推移(小时到天)被记录,并被GPS标记。所以,随着时间的推移,我们有很多数据跟随一条路径。
>空间:它代表地球的真正的3D元素,如土地,或地球上的物体的3D元素。
>高容量:我们可以有一个点云,说,几十万到几百万分。处理的数据可能会显示为从这些点云创建的曲面。
从中可以看出,基于交互式空间的3D可视化似乎是一种好的方法。我正在设想一些可以轻松快速地在空间中导航的东西,数据将根据您正在查看的内容加载或快速生成。我希望我们不要从头开始编写我们自己的3D图书馆 – 对于这样的事情,必须有很好的现有图书馆可以从中工作。
所以,我希望有一个图书馆支持:
>良好的导航(仅仅是基于欧拉旋转的图书馆,例如,你可以选择对象旋转还是轻松移动?)
>现代GPU(仅限着色器渲染是好的;能够挂接到管道中以编写将值映射到颜色的着色器,并且动态更改将很好 – 通过颜色查找表来考虑数据值给出颜色);
>动态数据/对象(可以将数据记录在数据中);如果数据量太高,我们应该可以将页面输入和输出或重新创建,并且只显示一个明智的子集,以便无论用户的视口是在屏幕上看到,但其他数据可以加载/重新生成,最好是异步地,或者至少在用户导航时快速地显示,显然数据创建依赖于我们,但是一个有这种东西的钩子的图书很棒。 )
>在技术上,与Delphi / C Builder和VCL协同工作。
图书馆
目前我已经考虑过两个主要的图书馆 – 我正在寻找有关这些图书的知识渊博的观点,或者我还没有考虑过的其他图书馆。
FireMonkey
这是Embarcadero的新UI库,仅在XE2及更高版本中可用。我们的应用程序基于VCL,我们希望在VCL窗口中托管这个;似乎正式不支持,但unofficially works fine,或可用through third-parties。
UI框架和3D框架与着色器等的混合听起来很棒。但是我不知道这个库是多么复杂,对数据不是一个像多维数据集或球体这样的简单对象的数据以及how well-designed it is的支持。最后一个链接对图书馆的3D侧面有很大的批评 – 我足够严格在撰写不平凡的3D应用程序时,不确定它在当前状态下是否值得。
是否值得尝试使用FireMonkey在我们的VCL应用程序中编写一个新的可视化窗口?
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工作的图书馆可能是最好的。
感谢您的输入:)我是在高质量的答案后,所以我可以添加一个赏金,当我可以!
解决方法
GLScene支持地形渲染,并将可自定义的对象添加到场景中。对象可与之交互,您可以使用GLScene的各种构建块创建复杂的3D对象模型。
不幸的是,我无法说明如何使用数百万点,但我知道它是相当优化,并在最小的硬件上表现出色 – 据说 – 目标PC我发现需要一个专用显卡,可以使用OpenGL 2.1扩展或更高(我发现集成显卡的小问题)。
我看过的另一个库是DXscene,它与GLScene非常相似,尽管使用DirectX而不是OpenGL。从记忆中,这是一个商业产品,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
最后一个针对游戏开发 – 但可能提供有用的信息。