2013-05-20 55 views
3

我目前正在设计和开发定制的图像查看器,用于格外大的图像文件(有时在gigapixels中)。幸运的是,这些在分阶段的分辨率层中以256x256的方式提供,然后在需要时传递给OpenGL。用OpenGL QuadTree渲染大型矩形平铺图像

这些瓷砖本身是通过QuadTree进行管理的,这看起来像是一个强大的解决方案,用于“几乎幂”的图像。但是,如果图像具有极宽的纵横比(例如,1千像素x 50,000),则模型会以大量的空图块开始动摇。 一次只能显示有限数量的图块。

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

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

+1

您可以在顶部添加一个额外的级别,将图像分成四个部分,例如: 20幅50k x 50k的图像,然后使用四叉树作为正方形。 –

+0

如何以及为什么要使用opengl? – dinony

+0

该系统的当前实现是使用Java Graphics2D&JAI来提供图像。这证明不会从头开始。出于这个原因,它正在变成一种OpenGL方法。 OpenGL被用于渲染性能。 我已经实现了一个更LoD瓷砖的原型,它似乎到目前为止工作。你对这个@AndreasHaferburg有什么想法?我知道一个Java系统很可能会降低本地C++的性能,但Java是一个硬编写的系统需求。) –

回答

0

四叉树强制您沿两个坐标轴分割。你的问题有一个广泛的方面,所以其中一个轴会过度分割。

你有2个解决方案:

  • 使用BSP。类似的概念,但不是拆分这两个坐标范围,你选择一个,并将其拆分为2.有了这个,你可以沿大范围分割而不是在较小范围内分割。
  • 在顶层使用QuadTrees网格。通过这种方式,您可以将空间分成粗糙的正方形,以便更好地使用这些位。 @Andreas在评论中也提到了这一点。