3D图书馆建议交互式空间数据可视化? [英] 3D library recommendations for interactive spatial data visualisation?

查看:217
本文介绍了3D图书馆建议交互式空间数据可视化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我是在基于Delphi- / C ++ Builder的Windows应用程序中,寻找SO的建议,用于在将这些类型的可视化构建时,最好将3D库用作基础。



数据




  • 是随着时间的推移(小时至天)记录并具有GPS标记。所以,随着时间的流逝,我们有很多数据。

  • 空间:它代表地球上真正的3D元素,如土地,或地球上的物体的3D元素。

  • 高音量:我们可以有一个点云,比如说几十万到几百万分。处理的数据可能会显示为从这些点云创建的曲面。



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



所以,我希望有一个图书馆支持:




  • 良好的导航(是基于欧拉旋转的库例如,您可以选择对象旋转或轻松移动吗?);

  • 现代GPU (仅限着色器渲染是好的;正在能够挂钩到管道中写入将值映射到颜色的着色器,动态变化会很好 - 认为数据值通过颜色查找表给出颜色);

  • 动态数据/ objects (可以在记录数据时添加数据;如果数据量太高,我们应该可以将页面输入和输出或重新创建,并且只显示一个明智的子集,以便无论用户的视口正在看着是在屏幕上,但其他数据可以加载/重新生成擦除,优选异步地,或至少快速地,用户导航。显然,数据创建依赖于我们,但是一个有这种东西的钩子的图书很棒。)

  • 技术上,与Delphi / C ++ Builder和VCL





我已经考虑过的图书馆 - 我正在寻找有关这些的知识渊博的观点,或者我没有考虑过的其他图书馆。



1。 FireMonkey



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



UI框架和3D框架与着色器等的混合听起来不错。但是我不知道这个库是多么复杂,它对于数据不是一个简单的对象,比如立方体或者球体,而且它的设计设计是如何的。最后一个链接对图书馆的3D侧面有严重的批评 - 足够严重,我不知道在写作时的当前状态下,这是一个非常平凡的3D应用程序。



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



2。 > GLScene 是Delphi着名的3D OpenGL框架。我从来没有使用过它,所以没有关于它如何工作或设计的经验。但是,我相信它可以很好地融入到VCL窗口中,并支持着色器和现代GPU。我不知道它的场景图或导航是如何工作的,还是动态数据可以如何实现。



它的功能列表具体提到了一些我感兴趣的事情,例如容易的旋转/移动,过程对象(意味着动态数据很容易实现)和帮助函数挑选它似乎着色器只是Cg(不是GLSL或另一种非供应商特定的语言)。它还支持纹理化的多态图像支持(允许许多格式以及程序纹理),易于扩展 - 这可能意味着许多图像格式,或者它可以指示纹理可以动态改变的东西,例如动态颜色映射。



从哪里来?



这些是我知道的Delphi或C ++ Builder中唯一的两个主要的3D库。我错过了吗?有没有利弊我不知道?您有什么经验可以使用这两种方法来实现这一目的,以及我们应该注意什么陷阱或者应该知道哪些功能?



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



感谢您的输入:)我是在高质量的答案之后,所以我会添加一个在我可以的情况下,赏金!

解决方案

我已经在我的3D地图测绘软件中使用了GLScene,尽管在某种程度上,寻找我可以保证,它似乎最适合你想要做的。



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 - 我没有经验,所以我可以不要评论我相信这更适用于具有较低硬件要求的移动应用程序,因此您可能会遇到更大的数据集。



这里有一些您可能会考虑的其他链接 - 我有没有经验:





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


Our software produces a lot of data that is georeferenced and recorded over time. We are considering ways to improve the visualisation, and showing the (processed) data in a 3D view, given it's georeferenced, seems a good idea.

I am looking for SO's recommendations for what 3D libraries are best to use as a base when building these kind of visualisations in a Delphi- / C++Builder-based Windows application. I'll add a bounty when I can.

The data

  • Is recorded over time (hours to days) and is GPS-tagged. So, we have a lot of data following a path over time.
  • Is spatial: it represents real 3D elements of the earth, such as the land, or 3D elements of objects around the earth.
  • Is high volume: we could have a point cloud, say, of hundreds of thousands to millions of points. Processed data may display as surfaces created from these point clouds.

From that, you can see that an interactive, spatially-based 3D visualisation seems a good approach. I'm envisaging something where you can easily and quickly navigate around in space, and data will load or be generated on the fly depending on what you're looking at. I would prefer we don't try to write our own 3D library from scratch - for something like this, there have to be good existing libraries we can work from.

So, I'm hoping for a library which supports:

  • good navigation (is the library based on Euler rotations only, for example? Can you 'pick' objects to rotate around or move with easily?);
  • modern GPUs (shader-only rendering is ok; being able to hook into the pipeline to write shaders that map values to colours and change dynamically would be great - think data values given a colour through a colour lookup table);
  • dynamic data / objects (data can be added as it's recorded; and if the data volume is too high, we should be able to page things in and out or recreate them, and only show a sensible subset so that whatever the user's viewport is looking at is there onscreen, but other data can be loaded/regenerated, preferably asynchronously, or at least quickly as the user navigates. Obviously data creation is dependent on us, but a library that has hooks for this kind of thing would be great.)
  • and technologically, works with Delphi / C++Builder and the VCL.

Libraries

There are two main libraries I've considered so far - I'm looking for knowledgeable opinions about these, or for other libraries I haven't considered.

1. FireMonkey

This is Embarcadero's new UI library, which is only available in XE2 and above. Our app is based on the VCL and we'd want to host this in a VCL window; that seems to be officially unsupported but unofficially works fine, or is available through third-parties.

The mix of UI framework and 3D framework with shaders etc sounds great. But I don't know how complex the library is, what support it has for data that's not a simple object like a cube or sphere, and how well-designed it is. That last link has major criticisms of the 3D side of the library - severe enough I am not sure it's worthwhile in its current state at the time of writing for a non-trivial 3D app.

Is it worth trying to write a new visualisation window in our VCL app using FireMonkey?

2. GLScene

GLScene is a well-known 3D OpenGL framework for Delphi. I have never used it myself so have no experience about how it works or is designed. However, I believe it integrates well into VCL windows and supports shaders and modern GPUs. I do not know how its scene graph or navigation work or how well dynamic data can be implemented.

Its feature list specifically mentions some things I'm interested in, such as easy rotation/movement, procedural objects (implying dynamic data is easy to implement), and helper functions for picking. It seems shaders are Cg only (not GLSL or another non-vendor-specific language.) It also supports "polymorphic image support for texturing (allows many formats as well as procedural textures), easily extendable" - that may just mean many image formats, or it may indicate something where the texture can be dynamically changed, such as for dynamic colour mapping.

Where to from here?

These are the only two major 3D libraries I know of for Delphi or C++Builder. Have I missed any? Are there pros and cons I'm not aware of? Do you have any experience using either of these for this kind of purpose, and what pitfalls should we be wary of or features should we know about and use?

We currently use Embarcadero RAD Studio 2010 and most of our software is written in C++. We have small amounts of Delphi and may consider upgrading IDEs, but we are most likely to wait until the 64-bit C++ compiler is released. For that reason, a library that works in RS2010 might be best.

Thanks for your input :) I'm after high-quality answers, so I'll add a bounty when I can!

解决方案

I have used GLScene in my 3D geomapping software and although it's not used to an extent you're looking for I can vouch that it seems the most appropriate for what you're trying to do.

GLScene supports terrain rendering and adding customizable objects to the scene. Objects can be interacted with and you can create complex 3D models of objects using the various building blocks of GLScene. Unfortunately I cannot state how it will work with millions of points, but I do know that it is quite optimized and performs great on minimal hardware - that being said - the target PC I found required a dedicated graphics card capable of using OpenGL 2.1 extensions or higher (I found small issues with integrated graphics cards).

The other library I looked at was DXscene - which appears quite similar to GLScene albeit using DirectX instead of OpenGL. From memory this was a commercial product where GLScene was licensed under GPL. (EDIT - the page seems to be down at the moment : http://www.ksdev.com/index.html)

GLScene is still in active development and provides a fairly comprehensive library of functions, base objects and texturing etc. Things like rotation, translation, pitch, roll, turn, ray casting - to name a few - are all provided for you. Visibility culling is provided for each base object as well as viewing cameras, lighting and meshes. Base objects include cubes, spheres, pipes, tetrahedrons, cones, terrain, grids, 3d text, arrows to name a few. Objects can be picked with the mouse and moved along 1,2 or 3 axes. Helper functions are included to automatically calculate the top-most object the mouse is under. Complex 3D shapes can be built by attaching base objects to other base objects in a hierarchical manner. So, for example, a car could be built using a rectangle as the base object and attaching four cylinders to it for the wheels - then you can manipulate the 'car' as a whole - since the four cylinders are attached to the base rectangle.

The only downside I could bring to your attention is the sometimes limited help/support available to you. Yes, there is a reference manual and a number of demo applications to show you how to do things such as select objects and move them around, however the reference manual is not complete and there is potential to get 'stuck' on how to accomplish a certain task. Forum support is somewhat limited/sparse. If you have a sound knowledge of 3D basics and concepts I'm sure you could nut it out.

As for Firemonkey - I have had no experience with this so I can't comment. I believe this is more targeted at mobile applications with lower hardware requirements so you may have issues with larger data sets.

Here are some other links that you may consider - I have no experience with them:

The last one is targeted at game development - but may provide useful information.

这篇关于3D图书馆建议交互式空间数据可视化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆