当我将操作系统从 win7 更改为 Ubuntu 12.04 LTS 时,我遇到了 QGLFrameBufferObject 的一些问题。在新的ubuntu系统中重新编译代码后,颜色出错了。所以我做了一个最小的测试。我只是用颜色(1.0、0.0、0.0、0.8)清除颜色缓冲区,就是这样。
当我直接渲染到屏幕上时,我得到了正确的结果,所有像素都是(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,它工作正常。
我已经在另一台装有win7操作系统的计算机(计算机A)上编译了这个测试代码,一切正常。还尝试在另一台带有 ubuntu OS 的计算机(计算机 B)上运行,一切正常。
我正在使用 NVidia GeForce GTX 570 GPU,并尝试了最新的稳定驱动程序 (304.60) 和旧版本 (290.10,用于计算机 B) 用于 linux-64bit,但没有任何变化。
有谁知道为什么?下面是代码。
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");
}
我注意到有两个类似的帖子,但没有答案或详细答案: 在 QGLFramebufferObject 上渲染时错误的 alpha blending;渲染到 QGLFrameBufferObject 与屏幕时 Alpha 合成错误