0

テクスチャへのオフスクリーンレンダリングの場合、添付ファイルGL_COLOR_ATTACHMENT0で次のように定義されたテクスチャをアタッチします。

glTexImage2D(GL_TEXTURE_2D、0、GL_RGBA、width、height、0、GL_RGBA、GL_FLOAT、NULL);

次に、vec4を出力するフラグメントシェーダーを使用してFBOにレンダリングするので、通常は問題ありません。テクスチャが正しく表示されていることを確認するには、関数を使用します

glTexSubImage2D()

テクスチャの中央にいくつかの灰色のピクセルを追加します。テクスチャは正しく表示されますが(これらのピクセルは適切な場所に完全に表示されます)、残りのテクスチャはノイズの多いアーティファクト(黒でない場合)のみです。

これは、GL_RGBAテクスチャにGL_FLOATを使用しているという事実から来ていますか?はいの場合、GLSLでuvec4をvec4に変換するにはどうすればよいですか?メインシェーダーの出力はvec4であり、usampler2Dテクスチャのuvec4出力を最終的なvec4に変換する方法がわかりません。

あなたが提供するかもしれないどんな答えにも感謝します:)

編集:解決策を見つけました:2つのレンダリングの間にGL_COLOR_BUFFER_BITをクリアしませんでした。

4

1 に答える 1

3

この質問は自己回答でしたが、これについて話し合う必要があります。

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_FLOAT,NULL);

これは浮動小数点テクスチャを作成しません。正規化された符号なし整数を含むテクスチャを作成します。

テクスチャの実際のフォーマットは3番目のパラメータです。テクスチャに実際に含まれるものを定義します。最後の3つのパラメーターは、データをテクスチャにアップロードする方法を定義します。ポインターがNULLの場合(およびPBOがバインドされていない場合)、パラメーターは何も意味しません。

于 2011-07-27T18:56:12.023 に答える