簡體   English   中英

從QGLPixelBuffer獲取深度緩沖區

[英]Get depth buffer from QGLPixelBuffer

我在QT應用程序中使用OpenGL。 在某個時候,我正在渲染到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");

顯然有什么問題嗎?

好吧,不能保證存儲在QImage中的基礎像素數據(並通過其QImage :: bits()函數獲得)與OpenGL的glReadPixels()函數所寫的兼容。

由於您使用的是QGLPixelBuffer,所以QGLPixelBuffer :: toImage()有什么問題?

我從來沒有直接使用過QImage,但是我會嘗試回答以下問題:

  1. 您是否在讀取圖像之前用Depth位調用glClear()?
  2. 您的QGLFormat是否啟用了深度緩沖區?
  3. 您可以直接轉儲readPixel並驗證其是否具有正確的數據嗎?
  4. QImage :: bits()是否確保按要求的對齊順序存儲順序?

希望這可以幫助

瘋狂的猜測隨之而來。

您正在使用QImage創建索引位圖,但是沒有設置顏色表。 我的猜測是默認的顏色表使您的圖像顯示為白色。 在保存圖像之前,請嘗試以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM