OpenGL — использование glReadPixels для чтения компонента глубины возвращает неверные значения

Я пытаюсь считывать пиксели текстуры, которая имеет только компонент глубины, однако glReadPixels дает мне массив, где каждое значение = 1.

Создание текстуры / Framebuffer:

GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);

GLuint texture;
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT,width,height,0,GL_DEPTH_COMPONENT,GL_FLOAT,0);
glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,m_depthTexture,0);

Чтение из текстуры:

glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
float *depths = new float[width *height];
glReadPixels(0,0,width,height,GL_DEPTH_COMPONENT,GL_FLOAT,&depths[0]);
// glGetError reports no errors, but every value inside 'depths' is 1.
delete[] depths;

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

Это определенно не пустой, так почему он говорит мне, что глубина составляет 1 для всех пикселей?

0

Решение

Поскольку вы используете настольную версию OpenGL, я предлагаю вам использовать glGetTexImage вместо glReadPixels.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector