我们的软件会生成大量地理参考和记录的数据。我们正在考虑改进可视化的方法,并在3D视图中显示(处理过的)数据,考虑到它的地理参考,似乎是一个好主意。
在基于Delphi- / C ++ Builder的Windows应用程序中构建这些可视化时,我正在寻找有关哪些3D库最适合作为基础的推荐。我会在可以的时候加上赏金。
由此可以看出,基于空间的交互式3D可视化似乎是一种很好的方法。我设想了一些可以轻松快速地在空间中导航的内容,并且可以根据您正在查看的内容动态加载或生成数据。我希望我们不要尝试从头开始编写我们自己的3D库 - 对于这样的事情,我们可以使用现有的好库。
所以,我希望有一个支持的图书馆:
到目前为止,我已经考虑了两个主要的图书馆 - 我正在寻找有关这些的知识渊博的观点,或者我还没有考虑过的其他图书馆。
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中工作的库可能是最好的。
感谢您的意见:)我在高质量的答案之后,所以我会尽可能地增加赏金!
答案 0 :(得分: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 - 我没有这方面的经验所以我无法发表评论。我相信这更适合具有较低硬件要求的移动应用程序,因此您可能会遇到较大数据集的问题。
以下是您可能会考虑的其他一些链接 - 我没有使用它们的经验:
最后一个目标是游戏开发 - 但可能会提供有用的信息。
答案 1 :(得分:5)
你试过glData吗? http://gldata.sourceforge.net/ 它已经很老了(〜2004年,Delphi 7),而且我没有亲自使用过这个库,但是有些输出很棒。
答案 2 :(得分:1)
答案 3 :(得分:1)
由于您已经在使用地理参考数据,或许您应该考虑在您的Delphi应用程序中嵌入GoogleEarth,例如 this ?然后,您可以将数据添加为点,路径或对象。