2012-06-21 95 views
4

我使用OpenGL编写程序。它实现了一个简单的功能:绘制一个茶壶。为了使它在屏幕上看起来不错,我启用了多重取样抗锯齿功能。它确实如此。请看下面的位图:使用glReadPixels检索位图时会失去抗锯齿功能

enter image description here

但是当我将它保存为bmp图片,它看起来不错。我使用FBO和PBO来做到这一点。现在,我在后部分我的代码在这里:

glGenFramebuffers(1,&m_frameBuffer); 
glBindFramebuffer(GL_FRAMEBUFFER,m_frameBuffer); 

glGenRenderbuffers(1,&m_renderBufferColor); 
glBindRenderbuffer(GL_RENDERBUFFER,m_renderBufferColor); 
glRenderbufferStorage(GL_RENDERBUFFER,GL_RGB, 
    m_subImageWidth,m_subImageHeight); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0, 
    GL_RENDERBUFFER,m_renderBufferColor); 

glGenRenderbuffers(1,&m_renderBufferDepth); 
glBindRenderbuffer(GL_RENDERBUFFER,m_renderBufferDepth); 
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT, 
    m_subImageWidth,m_subImageHeight); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT, 
    GL_RENDERBUFFER,m_renderBufferDepth); 

glBindFramebuffer(GL_FRAMEBUFFER,0); 

glBindFramebuffer(GL_FRAMEBUFFER,m_frameBuffer); 



glGenBuffers(1,m_subImageBuffer); 
glBindBuffer(GL_PIXEL_PACK_BUFFER,m_subImageBuffer); 
     glBufferData(GL_PIXEL_PACK_BUFFER,m_bufferSize, 
      NULL,GL_STREAM_READ); 

glBindFramebuffer(GL_FRAMEBUFFER,m_frameBuffer); 

glBindBuffer(GL_PIXEL_PACK_BUFFER,m_subImageBuffer); 
glPixelStorei(GL_PACK_ALIGNMENT,1); 
//注意:以BGR的顺序读取 
glReadPixels(0,0,m_subImageWidth,m_subImageHeight, 
     GL_BGR,GL_UNSIGNED_BYTE,bufferOffset(0)); 
GLUtils::checkForOpenGLError(__FILE__,__LINE__); 
m_subPixels[i] = static_cast<GLubyte*>(glMapBuffer(GL_PIXEL_PACK_BUFFER,GL_READ_ONLY)); 
gltGenBMP(subImageFile,GLT_BGR,m_subImageWidth,m_subImageHeight,m_subPixels[i]); 
glBindBuffer(GL_PIXEL_PACK_BUFFER,0); 
glUnmapBuffer(GL_PIXEL_PACK_BUFFER); 
glBindBuffer(GL_PIXEL_PACK_BUFFER,0); 

enter image description here

我很好奇。 为什么它们不同:呈现默认的famebuffer并保存到bmp图片?

实际上,我想要做的是在9个不同的相邻角度获得9个小型位图,然后合成一个位图以在立体视觉3D屏幕上显示。但合成的位图看起来很糟糕。

有人能告诉我为什么吗?

+0

首先,8位/ 24位BMP的,这是最常见的,不支持阿尔法。我不知道gltGenBMP是否生成非常见的32位BMP。你可能想验证一下。您最好使用第三方库并将其保存为PNG或TIFF。 –

+0

@Karthik Ku​​mar Viswanathan这是我写的一个函数来保存一个bmp,并生成24位BMP。 – XiaJun

回答