2009-02-05 212 views
0

我在QT應用程序中使用OpenGL。在某些時候,我正在渲染一個QGLPixelBuffer。我需要得到圖像的深度緩衝區,我通常用glReadPixels(...,GL_DEPTH_COMPONENT,...)完成的;我試圖使QGLPixelBuffer目前,然後使用glReadPixels(),但我得到的是一個白色的圖像。從QGLPixelBuffer獲取深度緩衝區

這裏是我的代碼

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"); 

任何明顯的錯誤呢?

回答

0

我從來沒用過的QImage直接,但我會盡量回答或可考慮以下幾個方面:讀取圖像前

  1. 你打電話glClear()與深一點?
  2. 您的QGLFormat是否啓用了深度緩衝區?
  3. 可以直接轉儲readPixel並驗證它是否有正確的數據?
  4. QImage :: bits()是否確保連續內存存儲與所需的對齊?

希望這有助於

0

胡亂猜測如下。

你正在使用QImage創建一個索引位圖,但是你不是在分配一個顏色表。我的猜測是,默認的顏色表讓你的圖像顯示爲白色。保存圖像之前試試這個:

for (int i = 0 ; i <= 255 ; i++) { 
    snapshot.setColor(i, qRGB(i, i, i)); 
} 
1

嗯,是存儲在QImage的下面的像素數據(並通過其QImage的::位()函數獲得)沒有保證什麼OpenGL的glReadPixels兼容()函數寫道。

由於您使用的是QGLPixelBuffer,因此QGLPixelBuffer::toImage()有什麼問題?