Создание текстуры глубины в OpenGL ES 2.0 или 3.0

У меня есть сцена, которую я визуализирую с помощью OpenGL ES в Android (с использованием библиотек Java). Я хочу применить к сцене некоторые эффекты, такие как глубина резкости. Я нашел хороший шейдер боке, и для работы ему нужна текстура глубины. Что мне нужно, так это сгенерировать текстуру глубины для передачи в шейдер. Я копался в Интернете полтора дня, пытаясь понять это, и не могу найти хороший пример того, как создать текстуру глубины из существующей сцены. Кажется, мне нужно сделать несколько проходов, возможно, используя внеэкранный рендеринг в буфер кадра, а затем сгенерировать из него текстуру глубины, чтобы передать ее моему шейдеру боке для фактического рендеринга сцены.

Как создать текстуру глубины? Хороший рабочий пример будет высоко оценен.


person Christopher Perry    schedule 14.01.2015    source источник
comment
Что вы имеете в виду под сценой, из которой вы пытаетесь создать текстуру глубины?   -  person harism    schedule 14.01.2015


Ответы (2)


Вы можете получить доступ к значению глубины на пиксель из фрагментного шейдера, используя gl_FragCoord. Напишите фрагментный шейдер, записывающий глубину в gl_FragColor, примерно так:

gl_FragColor = vec4(gl_FragCoord.z, 0.0, 0.0, 1.0);

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

person samgak    schedule 15.01.2015

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

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

glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depth_texture, 0);

Демонстрации RenderToTexture и ShadowMapping PowerVR SDK должны содержать весь справочный код, который вам понадобится:

https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/RenderToTexture/OGLES2/OGLES2RenderToTexture.cpp https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/ShadowMapping/OGLES2/OGLES2ShadowMapping.cpp

person Joe Davis    schedule 18.01.2015