Я переключился с буфера визуализации на глубину текстуры в своем FBO. Но похоже, что он не содержит данных глубины. Если я отрисую эту текстуру на полноэкранный квадрат, все будет черным. Я довольно убедитесь, что текстура и настройка FBO в порядке. FBO завершен, и если я очищаю глубину, скажем, до серого:Проблемы визуализации текстуры FBO
glClearDepth (0.5f);
Затем я вижу цвет в blit pass, но не данные геометрии.
Во всяком случае, как я создаю текстуру:
glBindTexture (GL_TEXTURE_2D, _id);
glTexStorage2D(GL_TEXTURE_2D,1,intFmt,theWidth,theHeight);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
glTexParameteri (GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
glBindTexture(_target,0);
Где intFmt является GL_DEPTH_COMPONENT24 или GL_DEPTH_COMPONENT32 (пробовал как ..)
Вот как я прикрепить его к FBO:
glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
glBindTexture(GL_TEXTURE_2D, _id);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, target,_id, 0);
И это Blit фрагмент проходят шейдер:
#version 420
layout(binding=0) uniform sampler2D COLOR_MAP_0;
smooth in vec2 uvsOut;
out vec4 OUTPUT;
void main(void) {
ivec2 tsize = textureSize(COLOR_MAP_0, 0);
vec2 screntc = gl_FragCoord.xy * (1.0/vec2(tsize));
OUTPUT = vec4(texture(COLOR_MAP_0, screntc).rrr ,1) ;
}
Возможно, я должен явно писать глубину в шейдере фрагмента?
Я попытался линеаризовать глубину в blit-фрагменте shader.It works.Now, я вижу глубину. Но я вижу белые и серые оттенки без него. В снимке: левая часть рисуется с использованием линеаризации, а справа частично из глубины текстуры.
Как вы отображаете текстуру глубины для проверки данных? Что такое ближние и дальние обрезающие плоскости и расстояние до геометрии, которую вы рисуете? – keltar
Около 0,1, далеко 10000. Расстояние до геометрии составляет от 0 до 1000. Для глубины отображения я просто привязываю текстуру глубины, рисую полноэкранный квадрат с использованием frag shader, упомянутого выше. –
Я не вижу ничего плохого в коде, который вы представили. Так что неправильная часть отсутствует. Вы проверили, что glGetError() равно 0, и уверены ли вы, что ваши матрицы геометрии/представления верны? – keltar