1

Apple が提供する Open GL ES ガイドを読んでいますが、完全には理解できず、質問があります。ご理解いただけると大変助かります。描画に関する章の 28 ページには、次のように書かれています。

フレームバッファを正しく作成するには:

  1. フレームバッファ オブジェクトを作成します。
  2. 1 つまたは複数のターゲット (レンダー バッファーまたはテクスチャ) を作成し、それらにストレージを割り当て、それぞれをフレーム バッファー オブジェクトのアタッチ ポイントにアタッチします。
  3. 完全性のためにフレームバッファをテストします。

私の質問は次のとおりです。ポイント 2 では、「1 つ以上のソースを作成する...」と言うべきではありませんか? 私が現在理解しているように、フレーム バッファーは、描画メソッドで画面にレンダリングされるものです。したがって、レンダリングしたい画像をフレーム バッファにアタッチして指定することは、私には理にかなっています。明らかに、私が説明している内容では、ターゲットはスクリーンであり、それ以外はすべてソースであるため、基本的なことを誤解しています。

4

5 に答える 5

2

ターゲットは正しい。フレームバッファはメモリの領域にレンダリングし、後で画面に合成するために使用されるか (レンダバッファ)、セカンダリ レンダ パスでテクスチャとして使用されます。

于 2013-02-13T10:17:30.243 に答える
2

プログラムは、OpenGL がフラグメントをフレームバッファーにラスタライズするアクションを実行することにより、フレームバッファーにレンダリングします。

ただし、ドキュメントに記載されているとおりにターゲットに送信しない限り、フレームバッファはどこにも表示されません。

これは少し似ています(非常に大まかで、私の頭のてっぺんから外れています):

+----------+   +--------+   +---------------------+   +----------------------+
|draw calls|---|pipeline|---|pixels in framebuffer|---|pixels in renderbuffer|
+----------+   +--------+   +---------------------+   +----------------------+
于 2013-02-13T10:15:08.687 に答える
2

フレームバッファのアタッチメントは、最初に書き込みのターゲットになり、次に読み取りのソースになります。仕様に「ターゲット」と記載されている場合、実際の操作に関係なく、通常はアクティブなオブジェクトが処理または変更されることに注意してください。

于 2013-02-13T10:20:45.013 に答える
2

明らかに、私は基本的なことを誤解しています。なぜなら、私が説明している内容では、ターゲットは画面であり、それ以外はすべてソースだからです。

はい、あなたは根本的に何かを誤解しています。Framebuffer オブジェクトは、画面ではなく画面外の画像にレンダリングする場合に使用されます。たとえば、テクスチャ、または後で後処理される画像などです。画面だけにレンダリングしたい場合は、FBO は必要ありません。

したがって、レンダリングしたい画像をフレーム バッファにアタッチして指定することは、私には理にかなっています。

いいえ。フレームバッファ オブジェクトは画像コンテンツのソースではありませんが、描画できる「キャンバス」、レシーバーです。または、より正確には、実際のキャンバスの「フレーム」であり、ターゲットは描画するキャンバスです。

于 2013-02-13T11:58:39.447 に答える
1

フレームバッファ ソースは、レンダリングするものとは何の関係もありません。各フレームバッファに複数のレンダー ターゲットをアタッチして、それらを切り替えることができます。ただし、これは実際には必要のないものであり、複数のパスを使用するか、他のレンダリング トゥ テクスチャーが必要になるまで、レンダリング ステップ自体とは関係ありません。

OpenGL 学習のこの部分をスキップして、VBO とシェーダーから直接開始し、この時点でフレームバッファー用のテンプレートを使用します。後で必要になるかもしれませんが、今は必要ありません。

于 2013-02-13T10:15:03.167 に答える