我遇到了QGLFrameBufferObject的一些問題,當我將操作系統從win7更改爲Ubuntu 12.04 LTS。在新的ubuntu系統中重新編譯代碼後,顏色出錯。所以我做了一個最小的測試。我只是用顏色(1.0,0.0,0.0,0.8)清除顏色緩衝區,就是這樣。錯誤的顏色與QGLFrameBufferObject渲染在Linux中
當我直接渲染到屏幕上時,我得到了正確的結果,所有像素都是(1.0,0.0,0.0,0.8)。
但是,離線渲染(帶有QGLFrameBufferObject)的結果是錯誤的,如offline.png給出的。這種顏色是(0.3,0.0,0.0,0.8)。
當alpha> 0.0和< 1.0時,會發生此問題。對於0.0和1.0,它工作正常。
我已經編譯了這個測試代碼在另一臺電腦(電腦A)與Win7操作系統,一切工作正常。還嘗試在一臺計算機(電腦B)與Ubuntu操作系統,一切工作正常。我使用的是NVidia GeForce GTX 570 GPU,並且嘗試了linux-64bit的最新穩定驅動程序(304.60)和舊版本(290.10,用於計算機B),但沒有任何更改。
任何人都知道爲什麼?以下是代碼。
mywidget::mywidget(QWidget * parent) :
QGLWidget(parent)
{
}
void mywidget::resizeGL(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 1.0, 0.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void mywidget::paintGL()
{
glClearColor(1.0, 0.0, 0.0, 0.8);
// DRAW ON THE SCREEN
{
glClear(GL_COLOR_BUFFER_BIT);
}
QGLFramebufferObject fbo(width(), height());
fbo.bind();
// DRAW ON THE FBO USING THE SAME CODE AND THE SAME CONTEXT
{
glClearColor(1.0, 0.0, 0.0, 0.8);
glClear(GL_COLOR_BUFFER_BIT);
}
fbo.release();
fbo.toImage().save("offline.png");
}
我注意到,有兩個類似的帖子,但沒有答案,或者詳細的解答: Wrong alpha blending when rendering on a QGLFramebufferObject; Alpha compositing wrong when rendering to QGLFrameBufferObject vs screen
「* fbo.toImage()。save(」offline.png「); *」我會更關心的是* this *會出錯。如果將FBO粘貼到屏幕上,FBO會是什麼樣子? –
是的!這是toImage函數的問題。當我直接綁定fbo的紋理時,我可以從屏幕上看到它工作正常。謝謝。然後我必須檢查toImage中有什麼問題。 – blueteaxk