説明できないopenglの奇妙なバグがあります。チュートリアルのコピー&ペーストを使用してシャドウ マップを「プログラム」しました。シャドウ マップを表示したかったので、それを表示する小さなルーチンを作成しました。動作しません (白い四角しか表示されません)。最終的に、多くのことを試して、シーンのメイン レンダリングで影がほぼ正しいものになるようにしました。しかし、ルーチンのコメントを外してシャドウマップを表示すると、シャドウがレンダリングされなくなります。(これはメイン レンダリングの前に行われます)
glBindTexture(GL_TEXTURE_2D, depthTex)
(シャドウバッファに保存されている)と関係があると思います。シャドウ マップを表示するために this を参照するように求められない場合depthTex
、どういうわけかシャドウが構築されますが、 this を表示するように求められるとdepthTex
、計算されたシャドウはナンセンスです。
一度glBindTexture(GL_TEXTURE_2D, depthTex)
シャドウマップの表示を求められたらdepthTex
、シャドウシェーダーの計算にリンクできなくなったのだろうか。
glBindTexture
読み取り用なのか書き込み用なのかわかりません...これdepthTex
は実際、シャドウマップが格納されているテクスチャとして定義されています。
要約すると、2 つのコードが干渉するため、テクスチャのレンダリングは、通常の opengl コマンドを使用してテクスチャを表示するよりも複雑に見えます。あたかもglBindTexture(GL_TEXTURE_2D, depthTex)
一度だけ呼び出すことができるかのように。
シャドウ マップ ルーチンの表示で、プログラムの別のテクスチャ (「床」など) を表示するように要求すると、レンダリングされたメイン シーンでは影は問題ありませんが、表示を要求すると"depthTex"
、影は表示されません。もう動作します。