4

我有一个具有不同属性的 3D 点云数据集,到目前为止我将其可视化为点,并且我希望根据与集合的距离来获得 LOD。我希望能够从远处以更少和更大的点获得广义视图,并且当我放大时,我希望自动出现更多正确间隔的点。

有点像下面这个视频,行为明智:http: //vimeo.com/61148577

我认为一种解决方案是使用自适应八叉树,但我不确定这是否是一个好的解决方案。我一直在研究具有无缝转换的层次聚类,但我不确定我应该采用哪种解决方案来满足我的目标。

关于从哪里开始的任何想法和提示?还是一些具体的方法?

谢谢

4

1 回答 1

1

您链接的视频使用 2D 元球。当元球聚集在一起时,它们会形成斑点,而不是更大的圆圈。你同意吗?

在继续之前,您应该阅读元球介绍。只需谷歌 2D 元球。

所以,希望您已经阅读了元球阈值和衰减函数。你的衰减函数应该有一个半径——函数下降到零的距离。

我们可以通过调整阈值和半径来实现 LOD 效果。基本上,当你缩小时,增加半径,以便点对更大的区域产生影响并开始聚集在一起。此外,调整阈值,使点密度不足的区域开始消失。

我找到了这个现有的 jsfiddle 2D metaballs 演示,并对其进行了修改以展示 LOD:

  • LOD 0:单个点为圆形。( http://jsfiddle.net/TscNZ/370/ )
  • LOD 1:孤立点开始缩小,但点簇开始形成斑点。( http://jsfiddle.net/TscNZ/374/ )
  • LOD 2:孤立点已消失。斑点越来越少。(将上面的 URL 更改为 jsfiddle 修订版 377)
  • LOD 3:斑点更少甚至更大。(将上面的 URL 更改为 jsfiddle 修订版 380)

正如您在不同的 jsfiddle 版本中所见,更改 LOD 只需要调整几个变量:

threshold = 1,
max_alpha = 1,
point_radius = 10,

许多元球文章没有涉及的关键点:您需要使用一个约定,其中只有高于阈值的值才被视为元球“内部”。然后,当远远缩小时,您需要将阈值设置为高于衰减函数的峰值。这将导致孤立点完全消失,只留下可见的团块。

渲染元球本身就是一个完整的话题。这个 jsfiddle 演示采用了一种非常低效的蛮力方法,但也有更有效的“行进广场”。

于 2013-04-25T13:31:19.863 回答