2016-07-29 2 views
0

Есть ли хороший/рекомендуемый способ обработки изображений в шейдерах фрагментов, а затем экспортировать результаты в внешнюю структуру Javascript?Обработка изображений в шейдере и результаты экспорта

В настоящее время я использую текстуру шейдеров с THREEJS (WebGL 1.0) для отображения моих данных. Он содержит массив 2D-текстур как единый. Я использую его для эмуляции трехмерной текстуры.

На этом этапе все мои данные хранятся в шейдере фрагментов, и я хочу запустить некоторую обработку изображений по всем данным (а не только по пикселям на экране), например, пороговое значение, а затем экспортировать результаты сегментации в надлежащий объект JS.

Я хочу сделать это в шейдерах, так как он работает намного быстрее.

Рендеринг текстур не помог бы в этом случае (я считаю), потому что я хочу изменить/обновить всю трехмерную текстуру, а не только то, что видно на экране.

Мне кажется, что композитор эффектов от THREEJS не является тем, что я ищу.

Имеет ли смысл? Я что-то упускаю?

Есть ли доступный код/​​демо/литература о том, как сделать «расширенную» обработку изображений в шейдерах (или еще лучше с текстурой шейдеров THREEJS), а затем сохранить результаты?

Лучшие

ответ

0

Вы можете вынести, как обычно в холст, а затем использовать canvas.getImageData() для получения изображения.

Тогда есть способ renderer.readRenderTargetPixels() (см. here). Я еще не использовал его, но он, похоже, делает то, что вы хотите.

Таким образом, вы можете просто визуализировать, как вы описали (рендеринг текстуры не будет переписывать ваши текстуры, насколько я могу судить) в фреймбуфер (т. Е. Используя THREE.WebGLRenderTarget), а затем использовать этот метод для извлечения данных изображения.

+0

Хмм, похоже, не помогает - в основном я предоставляю форму моему шейдеру, тогда я хочу обновить его из самого шейдера, если это возможно ... – Nicolas

+0

К сожалению, это не сработает. Униформы (и фактически все нелокальные переменные) всегда читаются только. Единственный способ вывода изображения из шейдерного вычисления - это записать его в фреймбуфер. –

Смежные вопросы