4

私はOpenGLを使用してプログラムを作成します。ティーポットを描画するという単純な関数を実装します。画面上で見栄えを良くするために、マルチサンプルアンチエイリアシングを有効にします。そして、そうです。次のビットマップを見てください。

ここに画像の説明を入力してください

しかし、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);

ここに画像の説明を入力してください

とても興味があります。それらが異なる理由:デフォルトのfamebufferにレンダリングし、bmp画像に保存しますか?

実際、私がやりたいのは、9つの異なる隣接角度で9つの小さなビットマップを取得し、1つのビットマップを合成してステレオスコープの3D画面に表示することです。しかし、合成されたビットマップは見栄えが悪いです。

誰かが理由を教えてもらえますか?

4

1 に答える 1

4

フレームバッファでマルチサンプルを有効にしたからといって、FBOにもマルチサンプルがあるとは限りません。FBOを作成するときは、glRenderbufferStorageMultisampleを使用する必要があります。

参照:FBOブリッティングが機能していません

そして:http ://www.opengl.org/wiki/GL_EXT_framebuffer_multisample

これも関連しています:FBOのglReadPixelsはマルチサンプリングで失敗します

于 2012-06-21T07:21:08.953 に答える