我在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");
它有什么明显的错误吗?
答案 0 :(得分:1)
嗯,无法保证存储在QImage中的基础像素数据(通过其QImage :: bits()函数获得)与OpenGL的glReadPixels()函数写入的内容兼容。
由于您使用的是QGLPixelBuffer,QGLPixelBuffer::toImage()出了什么问题?
答案 1 :(得分:0)
我从未直接使用过QImage,但我会尝试回答或研究以下几个方面:
希望这有帮助
答案 2 :(得分:0)
狂野猜测如下。
您正在使用QImage创建索引位图,但是您没有使用颜色表。我的猜测是默认颜色表使您的图像显示为白色。保存图片前请尝试此操作:
for ( int i = 0 ; i <= 255 ; i++ ) {
snapshot.setColor( i, qRGB( i, i, i ) );
}