4

レンダリングされた背景画像とプリセットの深度情報を使用してシーン内の他のオブジェクトを遮る、昔ながらの手法を実装しようとしています。

たとえば、前景の天井からぶら下がっているワイヤーがある部屋の写真がある場合、これらには深度マップで浅い深度値が与えられ、正しくレンダリングされると、キャラクターはワイヤーの「後ろ」を歩くことができますが、部屋の他のオブジェクトの前。

これまでのところ、以下を使用して深度テクスチャを作成しようとしました:

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Image.GetWidth(), Image.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);

次に、それをクワッドにバインドして画面上にレンダリングするだけですが、テクスチャから深度値を書き込みません。

私も試しました:

glDrawPixels(Image.GetWidth(), Image.GetHeight(), GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);

しかし、これによりフレームレートが約 0.25 fps に低下します...

gl_fragDepth をテクスチャの値に設定することでピクセルシェーダーでこれを実行できることは知っていますが、ピクセルシェーダーが有効でないハードウェアでこれを達成できるかどうか知りたいですか?

4

3 に答える 3

0

カラーバッファへの書き込みを無効にしてから(:を使用glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)、適切なZ座標を使用して「前面」の画像を表すポリゴンをレンダリングします。

于 2010-04-08T21:01:08.163 に答える
0

深度テクスチャを機能させようとした後、ARB_fragment_program 拡張機能を試して、非常に単純な (したがって古いハードウェアと広く互換性のある) GPU アセンブリ フラグメント シェーダーを記述してそのトリックを実行できるかどうかを確認しましたが、最終的には使用することにしました。 ARB_fragment_program 拡張機能としての GLSL は非推奨のように見えるか、少なくともその使用法は最近では嫌われています。

于 2010-04-11T17:31:09.710 に答える
0

フレーム バッファ オブジェクトを使って、やりたいことができます。

fbo1 を作成し、色と深度のバッファーをアタッチします。背景のシーンをレンダリングまたは設定します。

fbo2 を作成し、色と深度のバッファーをアタッチします。

更新ごとにフレーム バッファ ブリットを使用して、カラー バッファと深度バッファを fbo1 から fbo2 にブリットします。

残りを fbo2 にレンダリングする

fbo2 カラー バッファのフル スクリーン ブリットをメイン ディスプレイ バッファに実行します。

于 2010-04-28T17:26:49.143 に答える