2012-01-21 1 views
1

私のOpenGLプログラムでは、すべてをメモリにレンダリングしたいと思います。私はウィンドウ/スクリーンにデータをレンダリングしたくありません。フレームバッファを作成しました。次は、そのフレームバッファに3Dモデルをレンダリングします。フレームバッファへのレンダリングモデル

モデルの読み込みを処理するAssimpライブラリをダウンロードしました。私はこれでどうやって作業するのか分かりません。すべてをウィンドウに直接描画すると思われますか?

私が今やりたいことは、そのモデルをロードしてフレームバッファに描画することだけです。それは基本的にすべてです。

これを簡単に行う方法に関するヒントやアドバイスはありますか?別のライブラリのヒント(これは私のニーズに合っているかもしれません)も歓迎します。私は私のフレームバッファに描画したい

私のコード、:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); // Bind our frame buffer for rendering 
glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT); // Push our glEnable and glViewport states 
glViewport(0, 0, window_width, window_height); // Set the size of the frame buffer view port 

glClearColor (0.0f, 1.0f, 0.0f, 1.0f); // Set the clear colour 
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the depth and colour buffers 
glLoadIdentity(); // Reset the modelview matrix 


// RENDER 3D MODEL HERE.... 
// TEAPOT AS EXAMPLE 
glTranslatef(0.0f, 0.0f, -5.0f); // Translate back 5 units 
glRotatef(rotation_degree, 1.0f, 1.0f, 0.0f); // Rotate according to our rotation_degree value 

//glFrontFace(GL_CW); 
glutSolidTeapot(1.0f); // Render a teapot 
//glFrontFace(GL_CCW); 

int r = glGetError(); 
int s = glCheckFramebufferStatus(GL_FRAMEBUFFER); 



glPopAttrib(); // Restore our glEnable and glViewport states 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // Unbind our texture 

答えて

1

assimpライブラリはちょうどローダーです。オフスクリーンのフレームバッファーかウィンドウのバックバッファーに描画するかどうかは気にしません。

glGetErrorglCheckFramebufferStatusからのリターンコードをチェックしてみます。私のOpenGLのプログラムで

+0

ありがとう、私は自分のコードに追加しました。私はティーポットをレンダリングしようとしている私のポストにコードの小さなスニペットを追加しました。しかし、glGetErrorは私に1282を与えました。フレームバッファステータスはOKです。なぜ私はglerrorを得ているのか調べなければならないだろう。 – w00

0

私は、メモリ内のすべてをレンダリングします。私はウィンドウ/スクリーンにデータをレンダリングしたくありません。フレームバッファを作成しました。次は、そのフレームバッファに3Dモデルをレンダリングします。

あなたはOpenGLのコンテキストを持っていますか?あなたがGLUTを使っているのが分かります。 OpenGLコンテキストを取得するためには、ウィンドウを作成する必要があります。 OpenGLコンテキストがなければ、フレームバッファオブジェクトを作成することはできません。

これはあなたがGLUTを使うことができないことを意味します。しかし、それは大したことではありません。なぜならGLUTは単なるライブラリなので、多くの人がOpenGLに不可欠なものだと思っています。

オフスクリーンレンダリングにPBufferを使用することをお勧めします。 X11/GLXではこれは簡単ですが、Windowsではちょっと面倒です。 Windowsでは、最初の拡張読み込みフェーズの中間OpenGLコンテキストを取得するために、プロキシウィンドウを作成する必要があります。これは、PBufferを作成するために関数にアクセスする必要があります。そのプロキシウィンドウは表示される必要はありません。この状況では、ピクセルはピクセルオーナーシップテストを通過せず、したがって処理されないため、オフスクリーンレンダリングのためにOpenGLコンテキストで非表示のウィンドウを使用することはできません。

関連する問題