OpenGL ES 2.0、iOS 用のシンプルな 3D アプリケーションに取り組んでいます。
私がやりたいことは、フラグメントシェーダーの深度バッファーでシーンの深度値を取得したいということです。
そこで、深度バッファを 2D テクスチャとして作成しました
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, size.x, size.y, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
self.Dimension = IVVec3I_Make(size.x, size.y, 0);
self.BufferObjID = texture;
深度アタッチメントとしてフレーム バッファにアタッチしました。
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, pRD.BufferObjID,0);
シーンをレンダリングすると、深度バッファが正しく機能しています (深度テストと深度書き込みはすべて完全に機能しています)。
しかし、シェーダーのサンプラーにデプス バッファーを割り当て、フル スクリーン クアッド プレーンを使用してデプス バッファーを画面にレンダリングすると、すべて黒くなります。また、別の通常のテクスチャをサンプラーに割り当てると、テクスチャが正しくレンダリングされるため、シェーダー自体に問題はありません。
これがフラグメントシェーダーです。
uniform sampler2D DepthBuffer;
void main()
{
highp vec2 tex_coord = vec2(gl_FragCoord.x/1024.0,gl_FragCoord.y/768.0);
tex_coord.y = 1.0-tex_coord.y;
gl_FragColor = texture2D(DepthBuffer, tex_coord);
}
OpenGL ES フレームをキャプチャして深度バッファーを調べたところ、デバッガーは深度バッファーをすべて白で表示します (ほとんどすべての深度値が 1.0 にかなり近いため、これは正しいことです)。
では、ここで何が問題になる可能性がありますか?