Использовать буфер глубины кадрового буфера по умолчанию в fbo - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу добиться эффекта контура после процесса на некоторых актёрах в моей игре, и я хочу, чтобы другие актёры были ближе к камере.Для этого я планировал визуализировать элементы, которые должны быть контурными, в FBO и контурном шейдере.Чтобы отказаться от окклюзированного пикселя, я хочу использовать буфер глубины кадрового буфера по умолчанию.

Я прочитал и искал, но я не нашел, как правильно использовать буфер глубины кадрового буфера по умолчанию в другом кадровом буфере или какскопировать или в любом случае использовать информацию о буфере глубины по умолчанию для fbo.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я прочитал и искал, но я не нашел, как правильно использовать буфер глубины кадрового буфера по умолчанию в другом кадровом буфере

К сожалению, в OpenGL нет способа сделать это.

или как копировать или в любом случае использовать информацию буфера глубины по умолчанию на fbo.

Это довольно просто.Просто создайте FBO с соответствующим вложением глубины (независимо от того, используете ли вы текстуру или буфер визуализации) и blit буфер глубины по умолчанию к нему:

glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, your_target_fbo);
glBlitFramebuffer(0,0,width,height,0,0,width,height,GL_DEPTH_BUFFER_BIT, GL_NEAREST);

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

0 голосов
/ 10 декабря 2018

К сожалению, невозможно прикрепить буфер глубины по умолчанию к FBO или прочитать его из шейдера.

Вы можете скопировать кадровый буфер по умолчанию в буфер визуализации (или текстуру, прикрепленную к кадровому буферу, см. glBlitFramebuffer), но это может быть относительно медленно.

Другой вариант -чтобы сначала отрисовать всю сцену в FBO (цвет + глубина), затем использовать контурный шейдер для чтения из этого FBO, объединить результат с вычислением контура и записать окончательный результат в кадровый буфер по умолчанию.

...