【问题标题】:Rendering Large Rectangular Tiled Images with an OpenGL QuadTree使用 OpenGL QuadTree 渲染大型矩形平铺图像
【发布时间】:2013-05-14 22:28:33
【问题描述】:

我目前正在为超大图像文件(有时为千兆像素)设计和开发定制图像查看器。幸运的是,这些是在分阶段分辨率层中以 256x256 切片的形式提供的,然后在需要时传递给 OpenGL。

图块本身是通过 QuadTree 管理的,这似乎是“几乎是二次幂”图像的强大解决方案。然而,给定具有极宽纵横比的图像(例如 1 千兆像素 x 50,000),模型开始因大量空图块而动摇。 一次只能展示有限数量的瓷砖。

我正在使用带有 LWJGL 的 Java 7 来提供 OpenGL 上下文。
QuadTree 解决方案是否适合此问题,还是有更好的数据管理替代方案?

编辑:编辑标题以使其更有意义。

【问题讨论】:

  • 您可以在顶部添加一个额外的级别,将图像分成正方形部分,例如20 张 50k x 50k 的图像,然后使用四叉树作为正方形。
  • 你要如何以及为什么要使用opengl?
  • 当前系统的实现是使用 Java Graphics2D & JAI 来提供图像。事实证明,这并没有达到标准。出于这个原因,它正在更改为 OpenGL 方法。 OpenGL 被用于其渲染性能。我已经实现了一个更基于 LoD tile 的原型,并且到目前为止它似乎正在工作。您对此@AndreasHaferburg 有何看法? (我知道 Java 系统的性能很可能不如原生 C++,但是 Java 是硬编写的系统要求。)
  • 我开发了一个类似于您描述的渲染器(例如带有平铺的 Java + OpenGL)。根据我的使用 Java 的经验,因为您使用 OpenGL 进行渲染,所以非常好。你只需要几百块瓷砖就可以填满一个屏幕,因此 CPU 上的工作量相当低。一个例外是数据的解码,在 c(++) 中实现时通常要快得多。您可能还需要注意产生的垃圾量,以确保流畅的 FPS。使用四叉树有几个优点:

标签: java opengl tree tile quadtree


【解决方案1】:

四叉树强制您沿两个坐标轴进行拆分。您的问题涉及面很广,因此其中一个轴将被过度分割。

您有 2 个解决方案:

  • 使用 BSP。类似的概念,但不是拆分两个坐标范围,而是选择一个并将其拆分为 2。这样,您可以更频繁地沿大范围拆分而不是在较小的范围内拆分。
  • 在顶层使用四叉树网格。通过这种方式,您可以将空间分成粗略的正方形,以便更好地利用这些位。 @Andreas 在 cmets 中也提出了这一建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2014-10-23
    • 1970-01-01
    • 2020-08-24
    • 2010-11-06
    相关资源
    最近更新 更多