0

Render to Texture のコンセプトを実装していますが、FBO の範囲について疑問があります。テクスチャへのレンダリングを使用してデフォルト FBO で glDrawArrays 呼び出しを行った後、テクスチャと非デフォルト FBO を削除しています。次に、glReadPixels を呼び出して、デフォルトの FBO のコンテンツを読み取ります。それで、私の質問は、FBO とテクスチャを削除する前に readpixel を呼び出す必要があるということですか?

デフォルトのFBOで描画した後、デフォルト以外のFBOとテクスチャは必要ないと想定していましたが、後でOpenGLの開発者が、上記を参照してアプリケーションで奇妙なことをしていると言いました。これを理解するのを手伝ってください。

これが私がフォローしている手順です:

  1. フレームバッファ オブジェクトを作成し、カラー アタッチメントとして適切なテクスチャをアタッチします。
  2. FBO をバインドしてクリアする
  3. いくつかのプリミティブをレンダリングする
  4. FBO のバインドを解除して、システム FBO に切り替えます
  5. カラーアタッチメントとして使用されるテクスチャをバインドします
  6. 上記で作成したテクスチャを使用して、システム FBO でレンダリングします。
  7. 作成されたテクスチャと FBO を削除します。
  8. システム FBO からの glReadpixel。

さて、システム FBO とそれでレンダリングしたように。テクスチャとして使用されていたテクスチャやその他の FBO が必要なのはなぜですか?

注: 私は用語システム FBO を使用して、2 つの FBO を私の用語で区別しています。

4

1 に答える 1

0

これを読むことをお勧めします: http://www.songho.ca/opengl/gl_fbo.html

全体として、ここにあるのは OpenGL での Render To Texture の擬似コードです。

init() {
    // setup FBO, attachments, etc...
}

render() {
    glBindFramebuffer(your_fbo);
    glClearBuffer(...);
    renderScene();

    glBindFramebuffer(0);  // setup default, system FBO
    glBindTexture(texture_id_that_was_attached_to_FBO);
    renderSecondScene();
}

シーンをレンダリングした後にテクスチャや fbo を削除する必要はありません。アプリケーションの最後にクリーンアップ プロシージャで削除します。

于 2013-02-15T06:52:14.673 に答える