Рендеринг больших прямоугольных плиточных изображений с OpenGL QuadTree
В настоящее время я проектирую и разрабатываю программу просмотра изображений на заказ для исключительно больших файлов изображений (иногда в гигапикселях). К счастью, они предоставляются в виде листов размером 256x256 в слоях с поэтапным разрешением, а затем при необходимости передаются в OpenGL.
Сами плитки управляются с помощью QuadTree, которое выглядит как мощное решение для изображений "почти в два раза". Однако, учитывая изображение с чрезвычайно широким соотношением сторон (например, 1 гигапиксель х 50000), модель начинает давать сбои с большим количеством нулевых плиток. Только один раз будет отображаться только ограниченное количество плиток.
Я использую Java 7 с LWJGL для предоставления контекста OpenGL.
Подходит ли решение QuadTree для этой проблемы или есть более эффективные альтернативы управлению данными?
Изменить: отредактировал заголовок, чтобы сделать его более понятным.
1 ответ
Квадратное дерево обеспечивает разделение по обеим координатным осям. Ваши проблемы имеют широкий аспект, поэтому одна из осей будет разделена.
У вас есть 2 решения:
- Используйте BSP. Аналогичная концепция, но вместо разделения обоих координатных диапазонов вы выбираете один и делите его на 2. При этом вы можете разделять большой диапазон чаще, чем меньший.
- Используйте сетку QuadTrees на верхнем уровне. Таким образом, вы разбиваете пространство на грубые квадраты, чтобы лучше использовать биты. Это также было предложено @Andreas в комментариях.