Визуализация больших объемов пространственных векторных данных с помощью WebGL

Я планирую сделать приложение, которое визуализирует большие двухмерные мозаичные изображения. Приложение должно достичь следующего:

  1. Аддитивное смешивание слоев, т. е. каким-то образом установка уравнения смешивания WebGL как аддитивного: gl.blendEquation(gl.FUNC_ADD).
  2. Раскрашивание черно-белых изображений (умножение на постоянный цвет, например, красный. Это будет соответствовать настройке gl.blendColor(1, 0, 0, 1); и gl.blendFunc(gl.CONSTANT_COLOR, gl.ONE);).
  3. Отрисовка больших объемов простых векторных данных (в основном полигонов).
  4. Управление контрастом/яркостью/диапазоном интенсивности

Согласно моим исследованиям, для этих целей рендерер должен быть основан на WebGL. Я сделал первоначальный прототип с помощью Openlayers 3. Мне удалось реализовать все, кроме (3), используя хуки precompose и postcompose и собственный шейдер для диапазона манипуляций с интенсивностью. Однако я видел, что рендеринг полигонов с использованием WebGL еще не поддерживается, и я не видел недавних обновлений по этой проблеме/состоянию разработки. Мой вопрос заключается в том, есть ли возможность/какая-то отправная точка для реализации этого самостоятельно или что-то вроде цезия лучше подходит для моих нужд.


person qzr    schedule 24.08.2015    source источник


Ответы (1)


Я не могу говорить о дорожной карте OpenLayers, но сам Cesium должен быть в состоянии удовлетворить ваши требования из коробки. Вот несколько примеров (с кодом), показывающих функции, которые вы ищете

Аддитивное смешивание слоев

Многоугольники Это GeoJSON, но мы также обрабатываем KML, TopoJSON, CMZL и имеем программный API. Мы также обрабатываем разнообразный набор геометрии< /а>

Настройка изображения

Если вы решите попробовать Cesium, у нас есть очень активный форум это может помочь вам начать работу, так что не стесняйтесь задавать любые вопросы, которые у вас есть. cesiumjs.org также содержит множество дополнительной информации, справки и демонстраций.

person Matthew Amato    schedule 24.08.2015
comment
Это действительно выглядит многообещающе. Что касается смешивания, я не уверен, правильно ли я это понял. В приведенном вами примере слои смешиваются исключительно аддитивно? Потому что мне нужно в основном установить уравнение смешивания на GL_FUNC_ADD и раскрасить отдельные черный и белый слои, установив blendFunc на GL_CONSTANT_COLOR с blendColor, например, (1, 0, 0, 1), то есть красным. Это все еще возможно? - person qzr; 26.08.2015
comment
Например: один черно-белый слой нужно раскрасить красным, другой зеленым. Затем смешивание должно просто добавить каналы, чтобы сложение двух пикселей работало так: (255, 0, 0) + (0, 255, 0) = (255, 255, 0). Возможно ли это из коробки или есть возможность соответствующим образом настроить средство визуализации (т. Е. Как я упоминал ранее, установив уравнение смешивания перед визуализацией слоя). - person qzr; 26.08.2015
comment
Смешивание слоев является аддитивным, но вы также должны учитывать альфа-канал, поэтому непрозрачный цвет перезапишет другой непрозрачный цвет. Ваш пример будет более точным, например, (1, 0, 0, 0,5) + (0, 1, 0, 0,5) = (1, 1, 0, 1). Я рекомендую вам проверить учебное пособие по слоям изображений, которое должно охватывать большую часть того, что вам нужно. - person Matthew Amato; 26.08.2015
comment
Извините, случайно нажал Enter. Я хотел добавить, что должно быть легко протестировать наш вариант использования, и если у вас возникнут какие-либо проблемы, вы получите больше внимания к своему вопросу через наш форум, чем к переполнению стека. - person Matthew Amato; 26.08.2015