OpenGLのデプスバッファへの書き込み方法
質問
私はレンダリングされた背景画像とプリセット奥行き情報は、シーン内の他のオブジェクトを閉塞するために使用されている古い学校の技術を実装しようとしています。
あなたがフォアグラウンドで天井からぶら下がっていくつかのワイヤで部屋の絵を持っているのであれば、たとえば、これらはデプスマップの浅い深度値が与えられ、正しくレンダリング時にされている、「後ろ」の文字が歩くことができますワイヤが、部屋内の他のオブジェクトの前に
これまでのところ、私が使用して深度テクスチャを作成しようとしました。
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Image.GetWidth(), Image.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);
それからちょうどクワッドにそれを結合して、画面上のことをレンダリングするが、それはテクスチャからの深さ値を書き込むdoes notのます。
私も試してみた:
glDrawPixels(Image.GetWidth(), Image.GetHeight(), GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);
しかし、約0.25 fpsの...
への私のフレームレートダウンこの遅くなりますハードウェアを有効に私はあなたがテクスチャからの値にgl_fragDepthを設定することによりpixelshaderでこれを行うことができます知っているが、私は非pixelshaderでこれを達成できるかどうかを知りたいですか?
解決
仕事にデプステクスチャを取得しようとした後、私はその後、私はトリックを行うには非常に単純な(と古いハードウェアとのゆえに広く互換性のある)GPUアセンブリフラグメントシェーダを書くことができるかどうかを確認するためにARB_fragment_program拡張を試みたが、私は最終的にちょうどARB_fragment_programの拡張子は廃止されているように見えるとして使用GLSLに決めたか、少なくともその使用は、今日で眉をひそめるされます。
他のヒント
あなたがやりたいフレームバッファオブジェクトを使用して試すことができます。
fbo1を作成し、色と深度バッファを添付してください。 背景でシーンをレンダリングしたり設定します。
fbo2を作成し、カラー及び深さバッファを取り付けます。
fbo2にfbo1から色および深度バッファをブリットする各更新で使用するフレームバッファブリット。
fbo2
の中に残りをレンダリングメインディスプレイバッファにfbo2カラーバッファのフルスクリーンブリットを行います。
カラーバッファに無効書き込み(使用:glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE
)、次いで適切なZ座標