2012-02-19 21 views
1

OpenGLでFBO(Framebuffer Objects)になっています。今、私は単にFBOに何かをレンダリングしようとしており、それに関連付けられたテクスチャを使用して、そのイメージを画面にレンダリングします。私はこの問題を今日と昨日何時間も作業してきました。私は2つの異なる例ができるようにコピーを試みましたが、まだ同じ問題があります。私は絶対に立ち往生しています。OpenGLのglBindFramebufferを使用しても効果がないようです。

フレームバッファオブジェクトが実際にバインドされていないということが起こっているようです。コードでは、glClear()とglClearColor()コマンドの2つのセットがあります:フレームバッファに描画するための最初のものと、画面に描画するためのものです。しかし、2番目のセットをコメントアウトすると、最初のセットが画面に明らかに影響しています。 FBOがバインドされている場合、それらのコマンドを受信すべきではなく、ではなく、が実際の画面出力に直接影響しますか?開始するに

、私はglewInit()を使用し、その後、私はFBOを作成し、レンダオブジェクトとそれに関連付ける質感、そしてそれをすべて一緒に置くために必要な手順のすべてを実行します。

glewInit(); 

int width=512,height=512; 

glGenFramebuffers(1, &fbo); 
glGenRenderbuffers(1, &rbo); 
glGenTextures(1, &fboTex); 

glBindFramebuffer(GL_FRAMEBUFFER, fbo); 

glBindTexture(GL_TEXTURE_2D, fboTex); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_INT, NULL); 

glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fboTex, 0); 

glBindRenderbuffer(GL_RENDERBUFFER, rbo); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo); 

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
assert(status==GL_FRAMEBUFFER_COMPLETE); 

glBindTexture(GL_TEXTURE_2D,0); 
glBindFramebuffer(GL_FRAMEBUFFER,fbo); 

次に、フレームバッファオブジェクトに描画します。

glClearColor(0.5,0.5,0.5,1); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 

glColor4f(1.0,0,0,1); 
glBegin(GL_QUADS); 
glVertex2f(100,100); 
glVertex2f(200,100); 
glVertex2f(200,250); 
glVertex2f(100,200); 
glEnd(); 

私は、次の3つのオブジェクトの各バインド解除:その後、私は窓にテクスチャを描画しようと

glBindFramebuffer(GL_FRAMEBUFFER,0); 
glBindRenderbuffer(GL_RENDERBUFFER,0); 
glBindTexture(GL_TEXTURE_2D,0); 

を:

glEnable(GL_TEXTURE_2D); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glBindTextureEXT(GL_TEXTURE_2D, fboTex); 
glBegin(GL_QUADS); 
glTexCoord2f(0,0);glVertex3f(-.5,-.5,0); 
glTexCoord2f(1,0);glVertex3f(.5,-.5,0); 
glTexCoord2f(1,1);glVertex3f(.5,.5,0); 
glTexCoord2f(0,1);glVertex3f(-.5,.5,0); 
glEnd(); 
glDisable(GL_TEXTURE_2D); 
glFlush(); 

これは実際にいくつかのどちらかに持っています私がこのすべてを再入力したとき何らかの形で根絶した単純な間違いまたは誤解の2回、またはドライバの問題?私のドライバは、OpenGLのバージョン3.2を実行できるようになっています...

この不満な問題に関する助けがあれば助かります。

編集:最終的に間違っていたことがわかりました。私はglColorコマンドがフレームバッファがその時点でバインドされているかどうかにかかわらず、描画が完了したかどうかにかかわらず、その影響を受けなかったことを認識しませんでした。 FBOのテクスチャをすべての色で後でレンダリングするために、FBOに描画した後、glColor に(1,1,1)に変更する必要がありました。

+1

コードのスクラップではなく、コンパイルの最小限の例を与えた方が実際に簡単です。 – KillianDS

答えて

1

完全なコード例がないと、間違っていることを確認するのが難しいです。私が提供するFBOの取り組みをキックスタートさせるためにhttps://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/minimalfbo

+0

ありがとうございます。コンパイルして実行したような最小限の例は、わずかな労力で実現するはずでしたが、私はプロジェクトの中で同じコード部分をうまく使うことができました。私が間違っていたことを理解したら、私はここに戻ってきます... – Syriven

関連する問題