Получить буфер глубины из QGLPixelBuffer - PullRequest
0 голосов
/ 05 февраля 2009

Я использую OpenGL в приложении QT. В какой-то момент я рендеринг в QGLPixelBuffer. Мне нужно получить буфер глубины изображения, что я обычно делаю с glReadPixels (..., GL_DEPTH_COMPONENT, ...); Я попытался сделать текущий QGLPixelBuffer и затем использовать glReadPixels (), но все, что я получаю, это белое изображение.

Вот мой код

bufferCanvas->makeCurrent();
[ ...render... ]
QImage snapshot(QSize(_lastWidth, _lastHeight), QImage::Format_Indexed8);
glReadPixels(0, 0, _lastWidth, _lastHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, snapshot.bits());
snapshot.save("depth.bmp");

Что-то явно не так с этим?

Ответы [ 3 ]

1 голос
/ 29 мая 2009

Что ж, нет никакой гарантии, что данные базовых пикселей, сохраненные в QImage (и полученные с помощью его функции QImage :: bits ()), совместимы с тем, что пишет функция glReadPixels () OpenGL.

Поскольку вы используете QGLPixelBuffer, что не так с QGLPixelBuffer :: toImage () ?

0 голосов
/ 06 февраля 2009

Далее следует дикое предположение.

Вы создаете индексированное растровое изображение с помощью QImage, однако вы не используете таблицу цветов. Я предполагаю, что таблица цветов по умолчанию заставляет ваше изображение выглядеть белым. Попробуйте это перед сохранением вашего изображения:

for ( int i = 0 ; i <= 255 ; i++ ) {
    snapshot.setColor( i, qRGB( i, i, i ) );
}
0 голосов
/ 05 февраля 2009

Я никогда не использовал QImage напрямую, но я бы попытался ответить или посмотреть на следующие области:

  1. Вы вызываете glClear () с битом Depth перед чтением изображения?
  2. Включен ли в QGLFormat буфер глубины?
  3. Можете ли вы напрямую сбросить readPixel и проверить, есть ли у него правильные данные?
  4. Обеспечивает ли QImage :: bits () последовательное хранение в памяти с требуемым выравниванием?

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...