2

gl_FragDepthOpenGL ES 2.0 にないOpenGL の機能を置き換えようとしています。

フラグメント シェーダーで深さを設定する方法が必要です。これは、頂点シェーダーで深さを設定するのが目的に対して十分に正確ではないためです。私の知る限り、これを行う唯一の方法は、最初のレンダリング パスが実行される Render-to-Texture フレームバッファを持つことです。この深度テクスチャには、画面上の各ピクセルの深度値が格納されます。次に、最終的なレンダリング パスで深度テクスチャがアタッチされるため、最終的なレンダラーは各ピクセルの深度を認識します。

iOS >= 4.1 がサポートしているので、深度テクスチャにまたはGL_OES_depth_textureを使用しようとしています。テクスチャを作成するために次の呼び出しを使用しています。GL_DEPTH_COMPONENT24GL_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_FragDepthOpenGL ES 2.0 にないため、フラグメント シェーダーで深さを設定できません。
  • 深度テクスチャが としてアタッチされている最終レンダリング パスで、深度テクスチャからどのように読み取ることができsampler2Dますか?
  • の 3 番目の引数glTexImage2DGL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT16_OESまたはに設定すると、不完全なフレームバッファが得られるのはなぜGL_DEPTH_COMPONENT24_OESですか?
  • にテクスチャを付けてもGL_DEPTH_ATTACHMENTよろしいでしょうか?それを に変更するとGL_COLOR_ATTACHMENT0、不完全なフレームバッファが得られます。
4

1 に答える 1