OS를 win7에서 Ubuntu 12.04 LTS로 변경할 때 QGLFrameBufferObject에 약간의 문제가 발생했습니다. 새로운 우분투 시스템에서 코드를 다시 컴파일하면 색상이 잘못됩니다. 그래서 나는 최소한의 테스트를했다. 색상 버퍼를 지우고 (1.0, 0.0, 0.0, 0.8), 그게 전부입니다.리눅스에서 QGLFrameBufferObject를 렌더링 할 때 색상이 잘못되었습니다.
화면에 직접 렌더링 할 때 모든 픽셀이 (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)에서이 테스트 코드를 컴파일했지만 모든 것이 정상적으로 작동합니다. 또한 우분투 OS로 한대 더 컴퓨터 (컴퓨터 B)에서 시험 해봤는데 모든 것이 잘 작동합니다.
NVidia GeForce GTX 570 GPU를 사용하고 Linux-64bit 용 최신 안정 드라이버 (304.60)와 이전 버전 (컴퓨터 B 용 290.10)을 사용해 보았지만 아무런 변화가 없습니다.
누구나 아는 이유는 무엇입니까? 아래는 코드입니다.
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