Как я понимаю, буфер глубины вычисляет отношение фрагмента к дальним / ближним плоскостям отсечения и выводит значение глубины из этого перед записью. Однако это не то, чего я хочу, так как я не использую плоскости отсечения или вообще 3-е измерение. Тем не менее, глубинное тестирование было бы очень полезно для меня.
Мой вопрос, Есть ли способ указать, какое значение записывается в буфер глубины вручную, для всей геометрии, отображаемой после ее установки (которая проходит Альфа-тест), независимо от ее истинной глубины в сцене? Буфер трафарета работает таким образом, со значением, указанным в качестве второго аргумента glStencilFunc (), поэтому я подумал, что glDepthFunc () мог вести себя аналогично, но я ошибся.
Основная причина, по которой мне нужно тестирование глубины в 2D-игре, заключается в том, что моя модель освещения использует трафареты очень часто. Объекты, расположенные ближе к камере, чем источник света, должны быть отрисованы в первую очередь, чтобы трафареты для теней были правильно размещены, а источники света должны рисоваться после этого. Это довольно сложный порядок прорисовки, но в основном это просто означает, что свет должен быть прорисован после того, как сцена закончена, вот и все.
Я использую версию OpenGL 2.0, хотя я стараюсь по возможности избегать фрагментный шейдер.
Кажется, вы говорите о технике, называемой Параллакс-скроллинг. Вам не нужно записывать в буфер глубины вручную, просто включите его, а затем вы можете использовать подход слоя и указать Z вручную для каждого объекта. Затем визуализируйте сцену спереди назад (сортировка).
Других решений пока нет …