Почему я не могу получить значения из текстуры глубины, используя FBO? - PullRequest
0 голосов
/ 20 августа 2011

Я не могу получить значения глубины из текстуры глубины FBO. Рабочий процесс программы выглядит следующим образом:

Настройка1. Сделать pass1 FBO (цвет текстуры + текстура глубины)2. Сделать pass2 RBO (цветной рендеринг буфера + глубина рендеринга буфера)

Рендеринг1. только обработка вершин (pass1)2. получить значения глубины из текстуры глубины pass0 FBO3. обработка вершин и фрагментов с использованием предыдущих значений глубины

Setup.1 code (create pass0 fbo)

glActiveTexture(GL_TEXTURE0);
glGenTextures(2, &pass1_tex);
glBindTexture(GL_TEXTURE_2D, pass1_tex[0]);
glTexImage2D(GL_TEXTURE_2D, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, pass1_tex[1]);
glTexImage2D(GL_TEXTURE_2D, GL_DEPTH_COMPONENT, w, h, 0, GL_DEPTH_COMPONENT, 0);
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);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
glGenFramebuffers(1, pass1_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, pass1_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMEMNT0, GL_TEXTURE_2D< pass1_tex[0], 0);
glBindFramebuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMEMNT, GL_TEXTURE_2D< pass1_tex[0], 0);

И чтобы получить значения глубины при рендеринге, я сделал следующее:

glBindFramebuffer(GL_FRAMEBUFFER, pass1_fbo);
// vertex processing..
glActiveTexture(GL_TEXTURE1);
glGetTexImage(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, GL_FLOAT, &debug_buf[0]);

Но естьтолько 1.0 или 0.0 в массиве debug_buf.Конечно, все объекты находятся на расстоянии от 1,0 до -1,0 (NDC), а в ближайшем и дальнем значениях в gluPerspective () 1,0 и 2,0.

Почему я не могу получить правильные значения глубины из текстуры глубины FBO?

Ответы [ 2 ]

1 голос
/ 19 октября 2013
glBindFramebuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMEMNT0, GL_TEXTURE_2D< pass1_tex[0], 0);
glBindFramebuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMEMNT, GL_TEXTURE_2D< pass1_tex[0], 0);

Вы использовали цветовую текстуру pass1_tex [0] для буферов цвета и глубины

1 голос
/ 22 августа 2011

Вы можете найти ответ на свою проблему в этой статье . При использовании GL_COMPARE_R_TO_TEXTURE выборка текстуры глубины возвращает результат сравнения значений текстуры глубины с опорным значением (которое является интерполированной координатой текстуры r). Вместо этого вы должны указать следующие параметры текстуры:

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
glTexParameteri (GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...