2013-05-20 1 views
3

В настоящее время я занимаюсь разработкой и созданием визуализатора изображений на заказ для исключительно больших файлов изображений (иногда в гигапикселях). К счастью, они предоставляются как 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 в комментариях.
Смежные вопросы