OS を 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 OS を搭載した別のコンピューター (コンピューター A) でこのテスト コードをコンパイルしました。すべて正常に動作します。ubuntu OSを搭載したもう1台のコンピューター(コンピューター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");
}
2 つの同様の投稿があることに気付きましたが、回答も詳細な回答もありません: QGLFramebufferObject でレンダリングするときの間違ったアルファブレンディング QGLFrameBufferObject vs スクリーンにレンダリングするときのアルファ合成が間違っている