0

(これは実際にはgamedevからのクロスポストですが、皆さんも役立つかもしれないと思いました!)

編集:オーバーレイの意味について詳しく説明しました。少し眠った後、glTexImage2Dへのポインタとしてnullを使用しているため、glGenerateMipmapsの呼び出しは役に立たないことがわかりました。

OpenGL 3.3、Ubuntu 11.04、nVidiaドライバー280.13、GeForceGT240。

遅延シェーダーを作成していて、画面の下部にある小さなオーバーレイにGバッファーを表示したいと考えています。この場合のオーバーレイは、z検定がなく、テクスチャスクリーンで整列されたクワッドであり、最後にレンダリングされることを意味します。

フルウィンドウでGバッファ(FBOテクスチャ)を(一度に1つずつ)レンダリングすると、正しく表示されます。これらのオーバーレイにレンダリングすると、ゴミが発生します(静的干渉としてランダムなGPUメモリのように見えますが、実行ごとに異なり、場合によっては鮮明な画像になります)。

たとえばファイルから別のテクスチャを作成すると、オーバーレイにゴミが表示されないため、コードは問題ありません。誰かが理由を説明できますか?GバッファのテクスチャにglGenerateMipmapを使用しました。

これでは十分な情報ではないかもしれませんが、これから始めます。関連情報についてはお問い合わせください。問題はFBOレンダリングとミップマップに関連している可能性がありますか?確かに私のコードは予約されていない/初期化されていないメモリを表示したいのですが、理由はわかりません。 以下の4つのテクスチャには、ゴミ箱のデータが含まれています。


フルウィンドウの緑色の画像は、GPUメモリが太いためにGPUメモリを節約するための解像度(256 * 256)での、照明段階からの現在の結果です。また、マテリアルシェーダー(Gバッファーの生成)では、「out vec4fragment [3]」を使用しており、テクスチャはさまざまな内部形式になっています。それは問題になる可能性がありますか?

PS。ライトは(-30,0,0)と(30,0,0)にありますが、「より近い」ようです。それは精度の問題になる可能性がありますか?法線にはGL_RGBA16F、位置にはGL_RGBA32F、深さにはGL_DEPTH_COMPONENT24、アルベドにはGL_RGBAを使用します(はい、膨大な無駄ですが、後で最適化します)。

4

1 に答える 1

1

OK、問題が見つかりました。意味のあるデータがメモリに入る前にミップマップを生成しました。関連するテクスチャのミップマッピングをオフにすると、問題が解決しました。とにかくご清聴ありがとうございました! ここに画像の説明を入力してください

于 2011-10-29T10:46:29.993 に答える