私はGLSLを使ってシェードダウンを作成することをcurently学んでいますが、私はここでいくつかの問題があります:
1. GLSL 3.3では、このステートメントをフラグメントシェーダで使用できます。
layout(location = 0) out float fragmentdepth;
深度16ビットのみをテクスチャに書き出す( GL_DEPTH_COMPONENT16
以前のように)、OpenGL 2.1(GLSL 1.20)ではどうすればいいですか?
- 私が知る限り、深度バッファを描画するために、我々は私たちが実際のシーンを描いている場合は、カメラの位置をライトの位置に変更し、カメラの方向をライトの方向に変更するだけで済みます。
回答:
回答№1の場合は3GLSL 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はそれ以来大きな前進を成し遂げました。
いずれかの方法 、 ここに あなたのバージョンに必要なものです。