タグ付けされた質問 「depth-buffer」

2
2.5Dワールドで深度テストとテクスチャの透明度を一緒に使用するにはどうすればよいですか?
注:私はすでに答えを見つけました(この質問の後に投稿します)-私はそれを正しく行っているのか、それとももっと良い方法があるのか​​と思っていました。 OpenGL ES(JOGL)を使用して「2.5D」アイソメトリックゲームを作成しています。「2.5D」とは、世界が3Dであることを意味しますが、2Dアイソメトリックタイルを使用してレンダリングされます。 私が解決しなければならなかった元々の問題は、テクスチャを順番に(後ろから前に)レンダリングする必要があり、タイルが適切に重なり合って適切な効果が得られるようにすることでした。少し読んだ後、私はこれが「古い帽子」の2Dアプローチであることにすぐに気付きました。3Dワールドはプレーヤーによって変更できるため(これは3D空間のどこにでも表示される可能性があるため)、これを効率的に行うことは困難になりました。深度バッファーを利用するのは理にかなっているようです。これは、私がものを正しい順序でレンダリングすることについて心配する必要がなかったことを意味しました。 しかし、私は問題に直面しました。GL_DEPTH_TESTとGL_BLEND一緒に使用すると、オブジェクトがzオーダーで「ソート」される前にオブジェクトが背景とブレンドされる効果が作成されます(つまり、透明度が必要な場所で奇妙なオーバーラップが発生します)。 問題を説明する疑似コードをいくつか示します(ちなみに、私はAndroidでlibgdxを使用しています)。 create() { // ... // some other code here // ... Gdx.gl.glEnable(GL10.GL_DEPTH_TEST); Gdx.gl.glEnable(GL10.GL_BLEND); } render() { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); // ... // bind texture and create vertices // ... } だから問題は:透明性の重なり問題をどうやって解決するのですか?

2
OpenGLでは、深度バッファーの深度範囲をどのように発見できますか?
iOS用のGLマルチパスレンダリングアプリを実行しています。最初のパスは、深度バッファーテクスチャにレンダリングします。2番目のパスでは、深度バッファーの値を使用して、フラグメントシェーダーのアプリケーションを制御します。深度バッファーの値を有用なものに再スケーリングしたいのですが、その前に、深度バッファー値の深度値の範囲を知る必要があります。どうすればいいですか?

1
スキャンラインを使用したZバッファーの深度補間
私は独自のソフトウェア3dラスタライザを作成する必要があります。これまでのところ、三角形で作られた3dモデルを2d空間に投影できます。 ポイントを回転、移動、投影して、各三角形の2D空間表現を取得します。次に、3つの三角形のポイントを取り、スキャンラインアルゴリズムを実装して(線形補間を使用)、三角形のエッジ(左と右)に沿ってすべてのポイント[x] [y]を見つけて、三角形を水平にスキャンできるようにします。行ごとに、ピクセルで塗りつぶします。 これは機能します。ただし、zバッファリングも実装する必要があります。これは、三角形の3つの頂点の回転および変換されたz座標がわかっているため、スキャンラインアルゴリズムで見つけた他のすべての点のz座標を補間する必要があることを意味します。 概念は十分にはっきりしているように見えます。私はまずこれらの計算でZaとZbを見つけます。 var Z_Slope = (bottom_point_z - top_point_z) / (bottom_point_y - top_point_y); var Za = top_point_z + ((current_point_y - top_point_y) * Z_Slope); 次に、各Zpに対して水平方向に同じ補間を行います。 var Z_Slope = (right_z - left_z) / (right_x - left_x); var Zp = left_z + ((current_point_x - left_x) * Z_Slope); そして、現在のzがそのインデックスで以前のzよりもビューアに近い場合は、カラーをカラーバッファに書き込み、新しいzをzバッファに書き込みます。(私の座標系はx:左->右、y:上->下、z:あなたの顔->コンピュータ画面です;) 問題は、それが問題になることです。プロジェクトがここにあり、「Z-Buffered」ラジオボタンを選択すると、結果が表示されます(「Z-Buffered」モードでは、ペインターのアルゴリズム(ワイヤフレームを描画する場合のみ)を使用していることに注意してください)デバッグ用) PS:補間する前にzを逆数(つまり)に変換する必要があることをここで読みましたz = …

1
デプスマップから「磁気デフォーマ」を作成するには、どのようなフィルタが適していますか?
私のプロジェクトでは、非常に詳細なメッシュ(衣類)を変形して凸​​型メッシュに「フィット」させるシステムを作成しています。これを行うには、アイテムと「船体」の深度マップを使用して、偏差が発生するワールド空間のポイントと範囲を決定します。 隠されたすべての頂点を「ハル」で定義された深度に単純に変換することはかなり効果的であり、パフォーマンスは良好ですが、メッシュの機能を維持しないという問題があり、誤検出を避けるために広範囲のカリングが必要です。 代わりに、デプスデビエーションマップから、変形したメッシュのすべての頂点を外側に(ワールドスペースで)「プッシュ」*する一連の単純な「デフォーマ」を生成したいと思います。この方法では、メッシュのすべての機能が保持され、不適切な頂点をカリングするために複雑なヒューリスティックを使用する必要はありません。 ただし、このデフォーマセットを生成する方法がわかりません。特定の範囲内の連続した偏差の各パッチに球面を一致させようとするアルゴリズムのようなものを想像していますが、これをどこから始めればよいかわかりません。 誰かがデフォーマを生成するための適切なフィルタまたはアルゴリズムを提案できますか?それとも、深度マップを「圧縮」する別の言い方をすると? (*押し込みは、凸型の「ふさふさした」ヒューマノイドにフィットするため、変換はサーフェスのPOVから「球状」になる可能性があります。) 編集:これは、私が達成しようとしていることを示す、正しく提案された画像/図です。 また、この質問が投稿されて以来、私はこの問題に多くのことを取り組み、デフォーマを取得する方法を解決したことはありませんが、結局、このデプスマップは次のように不適切であると判断しました。 変形したメッシュが完全でない場合、凸状メッシュの反対側にあることを意図したマップ内のテクセルを取得することができます(正しい側のカメラに近いものによって隠されていないため)。 変形ごとに6つのマップが必要なため、効率は期待していたほど高くはありませんでした。 これらは解決できないというわけではありませんが、GPUで実行されているカーネルでの衝突テストを含む他のソリューションは、それほど高速ではないかもしれませんが、より高い品質の結果をもたらし、はるかに単純でした。 私はまだこの質問の問題は興味深いと思いますが、それが好まれる状況があると確信しているので、どんな答えにも興味があります。

4
シャドウマッピングと透明なクワッド
シャドウマッピングでは、深度バッファーを使用して、シャドウを描画する場所を計算します。 私の問題は、いくつかの半透明のテクスチャクワッドに影を落としてほしいということです。深度値は、表示されている部分だけでなく、すべてのクワッドに設定されるため、クワッドシャドウが投影されますが、これは私が望んでいることではありません。 シャドウマッピングを使用して、透明なクワッドに正しいシャドウをキャストさせるにはどうすればよいですか?

3
2Dレンダリングにフル解像度の深度バッファーを使用する
私は正投影を使用して2Dエンジンの前面から背面へのレンダラーに取り組んでいます。オーバードローを避けるために深度バッファーを使用したい。16ビットの深度バッファーがあり、Z = 100でZ = 0を見ているカメラ、zNearが1、zFarが1000です。レンダリングされた各スプライトは、Z座標を次第に離れた値に設定し、深度テストでレンダリングをスキップできるようにします下にあるものは何でも。 ただし、Z位置がZバッファ値で終わる方法が非線形であることは知っています。私は、16ビットの深度バッファのフル解像度を利用したいと考えています。つまり、65536の一意の値を許可しています。したがって、レンダリングされるすべてのスプライトについて、Z位置を次の位置にインクリメントして、次の一意の深度バッファー値に関連付けます。 言い換えると、描画されるスプライトのインクリメントインデックス(0、1、2、3 ...)を各スプライトの適切なZ位置に変更して、一意の深度バッファー値を設定します。この背後にある数学についてはわかりません。これを行うための計算は何ですか? 注:私はWebGL(基本的にはOpenGL ES 2)で作業しており、幅広いハードウェアをサポートする必要があるため、gl_FragDepthなどの拡張機能でこれが簡単になる場合もありますが、互換性の理由で使用できません。

1
FBOに描画するときにデフォルトの深度バッファーを使用できますか?
デフォルトの深度バッファーをFBOに接続する方法は?FBOにアタッチされた深度レンダーバッファーバッファーを(描画後に)デフォルトの深度バッファーとして使用する方法 基本的に、FBOレンダリングとバックバッファーレンダリングの両方に同じ深度バッファーを使用したいと思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.