- 4,045
- 63
- 645
Всем доброго дня!
Запрашиваю тяжёлую артиллерию, а именно ребят, шарящих в OGL.
@Dahaka-у, @CumingSoon-а и @Oldestkon-а отмечу сразу, потому что надеюсь на них и уповаю )
Основной вопрос в названии.
Собираюсь создавать постэффект (знающие люди догадаются какой именно), буду рисовать на экран полигон с собственным шейдером, куда хотелось бы в виде
В идеале хочу получить что-то типа этого (простейший пример, для наглядности):
Проблема в том, что я не знаю, как именно загрузить глубину в шейдер.
Вторая проблема в том, что глубину, скорее всего, придётся грузить в формате
На данный момент имею следующее (прошу поправить меня, если это не верно):
Копирование глубины в текстуру:
Загрузка текстуры в качестве униформы в шейдер и отрисовка квада:
На выходе имею белый экран.
Победой будет хотя бы обычная визуализация чёрно-белой картинки глубины.
Прощу наставить на путь истинный )
Не бейте, если написал полную ахинею.
И заранее спасибо, если поможете )
Запрашиваю тяжёлую артиллерию, а именно ребят, шарящих в OGL.
@Dahaka-у, @CumingSoon-а и @Oldestkon-а отмечу сразу, потому что надеюсь на них и уповаю )
Основной вопрос в названии.
Собираюсь создавать постэффект (знающие люди догадаются какой именно), буду рисовать на экран полигон с собственным шейдером, куда хотелось бы в виде
uniform sampler2D
(или чего-то ещё) загрузить буфер глубины из ванильного FBO, а так же второй буфер из собственного FBO, с которыми и буду работать.В идеале хочу получить что-то типа этого (простейший пример, для наглядности):
Код:
#version 120
uniform sampler2D depth1;
uniform sampler2D depth2;
void main() {
vec2 texcoord = vec2(gl_FragCoord.xy);
gl_FragColor = texture2D(depth1, texcoord.xy) + texture2D(depth2, texcoord.xy) ;
}
Проблема в том, что я не знаю, как именно загрузить глубину в шейдер.
Вторая проблема в том, что глубину, скорее всего, придётся грузить в формате
GL20.GL_DEPTH_COMPONENT24
, а как именно достать из него цвет внутри шейдера я тоже не в курсе... Прошу подсказать.На данный момент имею следующее (прошу поправить меня, если это не верно):
Копирование глубины в текстуру:
Java:
// Как я понял, текстура биндится в текущий FBO и из него же достаётся информация о глубине
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL12.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL12.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL20.GL_DEPTH_COMPONENT24, mc.getMainWindow().getFramebufferWidth(), mc.getMainWindow().getFramebufferHeight(), 0, GL12.GL_DEPTH_COMPONENT, GL12.GL_UNSIGNED_INT, 0);
Загрузка текстуры в качестве униформы в шейдер и отрисовка квада:
Java:
ShaderProgram.useShader(ShaderProgram.program);
GL20.glActiveTexture(GL20.GL_TEXTURE0);
GL20.glBindTexture(GL20.GL_TEXTURE_2D, texture);
GL20.glUniform1i(GL20.glGetUniformLocation(ShaderProgram.program, "depth"), 0);
drawQuad();
ShaderProgram.releaseShader();
На выходе имею белый экран.
Победой будет хотя бы обычная визуализация чёрно-белой картинки глубины.
Прощу наставить на путь истинный )
Не бейте, если написал полную ахинею.
И заранее спасибо, если поможете )