2017-02-03 2 views
2

продолжает этот вопрос:экранных в RGB и буфер глубины фрагмента шейдера: GLSL

GLSL : accessing framebuffer to get RGB and change it

Можно ли разработать программу, основанную на GLSL следующей?

  1. рисовать object1
  2. Получить буфер глубины с помощью шейдеров (также сохранить RGB)
  3. дро объект 1, объект 2 одновременно
  4. получить detph чек
  5. , если глубина различны (глубина 2 в зависимости от глубины 4)
  6. draw object 1 : для диапазона, глубина которого не изменяется -> нарисовать как оригинал RGB : для диапазона, который изменилась глубина -> нарисовать с разным RGB

Я подтвердил этот алгоритм, который отличает объект 1, спрятан другим объектом с использованием функций пересыхания. Я использовал функции glReadbuffer, glDrawbuffer. Однако это слишком медленно, я хочу использовать GLSL.

+1

Это похоже [проблему XY] (Http: //meta.stackexchange. ком/вопросы/66377/что-это-The-ху-проблема). Если все, что вы хотите сделать, это выяснить, скрыт ли объект и нарисовать что-то другое в этом случае, для этого вам не нужны специализированные шейдеры или множество буферов глубины. –

ответ

2

Если единственная цель - визуализировать объект1 с другим цветом, установленным, когда он скрыт за объектом2 (которые являются пикселями объекта1, где глубина изменилась), я бы выбрал совершенно другой подход.

  1. Draw object2 с глубиной-писать только (glDrawBuffer(GL_NONE) или glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE))
  2. Draw object1 с тестом глубины установлен на glDepthFunc(GL_GREATER) и окраску вы хотите, когда object1 позади Объект2
  3. Draw object1 с тестом глубины установлен на glDepthFunc(GL_LESS) и цвет, который вы хотите, когда object1 находится перед объектом2.

В отличие от алгоритма, описанного в вопросе, нет никакой необходимости в каких-либо обратного чтения операций или дополнительных фреймбуферов

+0

OMG ... Ты гений !? Я думаю, что алгоритм, который вы дали, правилен и намного быстрее. Однако, когда я пишу коды, у него есть некоторые недостающие точки. не могли бы вы помочь мне? Я задал еще один вопрос: http://stackoverflow.com/questions/42059541/opengl-gldepthfunc-doesnt-work – Wooni