/ OpenGL 2.1以降での/ FBO深度のテクスチャ - OpenGL、glsl

OpenGL 2.1以降のFBO深度テクスチャ - OpenGL、glsl

私はGLSLを使ってシェードダウンを作成することをcurently学んでいますが、私はここでいくつかの問題があります:
1. GLSL 3.3では、このステートメントをフラグメントシェーダで使用できます。

layout(location = 0) out float fragmentdepth;

深度16ビットのみをテクスチャに書き出す( GL_DEPTH_COMPONENT16 以前のように)、OpenGL 2.1(GLSL 1.20)ではどうすればいいですか?

  1. 私が知る限り、深度バッファを描画するために、我々は私たちが実際のシーンを描いている場合は、カメラの位置をライトの位置に変更し、カメラの方向をライトの方向に変更するだけで済みます。

回答:

回答№1の場合は3

GLSL 3.3では、このステートメントをフラグメントシェーダで使用できます。

深度16bitのみをテクスチャに書き出す(前にGL_DEPTH_COMPONENT16として設定)

いいえ、あなたはできません。

それは設定されます fragmentdepth に書き込む カラーバッファ。また、画像を添付することはできません GL_DEPTH_COMPONENT16 画像フォーマットa GL_COLOR_ATTACHMENTi FBOの接続点。そうしようとすると あなたに GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT エラー.

すべて GLSLのバージョンでは、添付された深度バッファに書き込む唯一の方法は、 gl_FragDepth。そして すべて GLSLのバージョンでは、FBOに1つの深度バッファを接続することしかできません。しかし 画像読み込み/保存 あなたはそれを回避することができますが、あなたは深さのテストなどを失います。


回答№2の場合は1

述べたように ここに ターゲティングする場合はFBO拡張(EXT)を使用する必要がありますあなたのハードウェアがあなたに許されているのであれば、OpenGL 3.3以降を使用し、デプスバッファデータを描画することができるテクスチャアタッチメント(またはレンダバッファ)を備えた(コア)FBOを活用してください。あなたは非難されたプロファイルでも同じことができますが、現代のOpenGLはそれ以来大きな前進を成し遂げました。

いずれかの方法 、 ここに あなたのバージョンに必要なものです。