Я хотел бы получить высоту z каждого пикселя отрисованного объекта в сцене.Мне также понадобится получить цвет, который отображается.
Какую технологию opengl реализовать?
glReadPixels и код стороны процессора
glReadPixels
используйте glReadPixels для получения буферов RGB и Depth.Вот примеры для обоих:
Это будет считывать буферы в доступную для CPU память.Этот способ медленный (из-за синхронизации), но должен работать на любой платформе.
Визуализация FBO в текстуру и шейдер графического процессора
Более быстрый методиспользовать FBO и визуализировать в текстуру и использовать этот вывод в следующем проходе рендеринга в качестве входной текстуры для вычисления ваших вещей внутри шейдеров.Это, однако, не будет работать должным образом на Intel и может потребоваться дополнительная настройка кода между nVidia и AMD .
Если у вас есть вывод на пиксельиспользуйте один QUAD, покрывающий ваш экран, как второй проход рендеринга.
QUAD
Если вы получили один вывод для всего экрана, вместо этого используйте один POINT рендер и вычислите все в фрагментном шейдере (отсканируйте всю текстуру внутри)как-то так:
POINT
Разница в том, что с помощью шейдеров и FBO вы не переноситеданные между GPU / CPU , поэтому он работает быстрее.
Содержимое целевых текстур все еще может быть прочитано с помощью CPU с использованием текстур GL функции
вычисляют шейдеры GPU
Есть также вычислительные шейдеры , но я их еще не использовал, поэтому яЯ просто предполагаю, однако, с ними это можетможно делать все за один проход, а также форма результата и вычислений не должна быть столь же ограничивающей.* Отложенное затенение , поэтому поиск таких тем / руководств может помочь.