gl_FragDepth
OpenGL ES 2.0 にないOpenGL の機能を置き換えようとしています。
フラグメント シェーダーで深さを設定する方法が必要です。これは、頂点シェーダーで深さを設定するのが目的に対して十分に正確ではないためです。私の知る限り、これを行う唯一の方法は、最初のレンダリング パスが実行される Render-to-Texture フレームバッファを持つことです。この深度テクスチャには、画面上の各ピクセルの深度値が格納されます。次に、最終的なレンダリング パスで深度テクスチャがアタッチされるため、最終的なレンダラーは各ピクセルの深度を認識します。
iOS >= 4.1 がサポートしているので、深度テクスチャにまたはGL_OES_depth_texture
を使用しようとしています。テクスチャを作成するために次の呼び出しを使用しています。GL_DEPTH_COMPONENT24
GL_DEPTH_COMPONENT16
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, textureId, 0);
フレームバッファの作成は成功するが、進め方がわからない。フレーム バッファにアタッチされた深度テクスチャの基本的な理解が不足しています。
- フラグメント シェーダーで出力する値は何ですか? つまり
gl_FragColor
、テクスチャは深度テクスチャですが、まだ RGBA 値です。gl_FragDepth
OpenGL ES 2.0 にないため、フラグメント シェーダーで深さを設定できません。 - 深度テクスチャが としてアタッチされている最終レンダリング パスで、深度テクスチャからどのように読み取ることができ
sampler2D
ますか? - の 3 番目の引数
glTexImage2D
をGL_DEPTH_COMPONENT16
,GL_DEPTH_COMPONENT16_OES
またはに設定すると、不完全なフレームバッファが得られるのはなぜGL_DEPTH_COMPONENT24_OES
ですか? - にテクスチャを付けても
GL_DEPTH_ATTACHMENT
よろしいでしょうか?それを に変更するとGL_COLOR_ATTACHMENT0
、不完全なフレームバッファが得られます。