問題タブ [depth-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
348 参照

ios6 - iOS6 で深度テクスチャを作成する方法。R16Fはオプションですか?

テクスチャに奥行きを書き込もうとしています。直線的な奥行きが欲しいのでR16Fのテクスチャを使ってみました。次のようなテクスチャを定義しました。

しかし、iPhone5 でフレーム キャプチャを使用して Xcode でデバッグすると、カラー バッファーに不明なテクスチャが表示され、深度バッファーには何も書き込まれません。

また、深度テクスチャを作成してみました:

しかし、この場合も、深度バッファには何も書き込まれていないようです。

深度バッファにレンダリングする唯一の方法は、最初のテクスチャを RGBA32 として定義することです...

EXT_color_buffer_half_float と深度拡張機能は iOS6 でアクティブになっていませんか??

0 投票する
0 に答える
264 参照

c++ - 単一のFBOで複数の深度テクスチャを切り替える

遅延レンダラーを作成し、FBOを使用してこれを実現しようとしています。最初に、3つの異なるFBO(gbuffer、lbuffer、および "screen")を使用しましたが、機能しました。ただし、パフォーマンスは非常に劣っていました。ここで、1つのFBOを使用し、glFramebufferTexture2Dを使用してテクスチャを切り替える方がはるかに高速であることを読みました。

この手法の問題は、デプステクスチャから説明できない予測できない動作が大量に発生することです(デプスピーリングを実行しているため、2つのデプステクスチャを切り替えています)。デプステクスチャAからテクスチャBに切り替えるたびに、Aはゼロにクリアされ、その逆も同様です。

glFramebufferTexture2Dを使用して同じFBOの深度テクスチャを切り替えることに問題があるかどうか誰かが知っていますか?テクスチャをチェックするためにgDebuggerを使用しています。

Visual C++2010で開発しています。

0 投票する
2 に答える
2398 参照

c++ - Z バッファの計算の何が問題になっていますか?

三角形で満たされた単純なシーンでどのピクセルを描画する必要があるかを判断するために、Z バッファーを実装しています。三角形、頂点、ベクトル (もちろん数学的な (x、y、z) の種類) の構造表現と、個々のピクセルを画面に描画する関数があります。ここに私が持っている構造があります:

残念ながら、三角形を画面にスキャン変換すると、深さの計算に依存して表示されるものと描画されるものを決定するため、不正確/非現実的な Z 値が得られます (たとえば、三角形のある点の深さが3 つの頂点すべての深さの境界)! 私は自分のコードを何度も見直してきましたが、数学が間違っているのか、不注意な間違いがあるのか​​ わからないので、他の誰かが何かを見ることができることを期待して、私がやろうとしていることを正確に提示しようとします.私はしません。(そして、浮動小数点値が浮動小数点値のままであること、引数を正しく渡していることなどを注意深く調べたので、これは本当に不可解です!)

全体として、私のスキャン変換アルゴリズムは、次のようにスキャン ライン全体にピクセルを塗りつぶします (疑似コード):

各スキャン ラインの zInit の値を取得するには、平面方程式 Ax + By + Cz + D = 0 を考慮し、それを並べ替えて z = -1*(Ax + By + D)/C を取得します。ここで、x と y はそれぞれ、スキャン ライン全体の現在の x 値と現在のスキャン ライン値自体としてプラグインされます。

スキャン ラインを横切る後続の z 値については、zk+1 = zk - A/C として補間します。ここで、A と C は平面方程式から得られます。

これらの z 計算の A、B、および C を取得するにvertex v[3]は、現在の三角形の 3 つの頂点 (配列 ) によって定義される平面の法線ベクトルが必要です。この法線 (コードでは planeNormal と名付けました) を取得するために、クロス積関数を定義しました。

平面方程式/my z 計算の D 値を取得するには、平面方程式 A(x-x1) + B(y-y1) + C(z-z1) = 0 を使用します。ここで、(x1, y1, z1)平面内の基準点にすぎません。参照点として三角形の頂点 v[0] を選択し、再配置しました。

Ax + By + Cz = Ax1 + By1 + Cz1 したがって、D = Ax1 + By1 + Cz1

最後に、z 計算の A、B、C、D を取得するために、三角形ごとにこれを行いました。ここで、trianglelist[nt]はシーンの三角形配列全体の現在のインデックス nt にある三角形です。

ここから、説明したスキャン変換アルゴリズム内で、zs を計算しました。

残念ながら、慎重に作業した結果、何かがおかしくなっています。一部の三角形では、深さの値がリアルになります (記号を除く)。頂点 (200, 10, 75)、(75, 200, 75)、および (15, 60, 75) によって与えられる三角形では、すべての深さは -75 になります。すべての頂点が同じ深さの他の三角形でも同じことが起こりました。しかし、頂点 (390, 300, 105)、(170, 360, 80)、(190, 240, 25) では、すべての z 値が 300 を超えています! 最初のものは 310.5 になり、残りは大きくなり、最大値は約 365 になります。これは、最も深い頂点が z = 105 にある場合には発生しません!!! それで、とりとめのないすべての後、誰かがこれを引き起こした可能性のあるものを見ることができますか? それが記号に関連するものである場合、私は驚かないでしょうが、どこで(結局のところ、絶対値は一定の深さの場合に正しいのですか)?

0 投票する
1 に答える
9062 参照

c - glPolygonOffsetのfactorパラメーターの意味と使用法

関数の最初のパラメーターの意味を理解するのに苦労していglPolygonOffsetます。

公式文書には、その要因が記載されています

各ポリゴンの可変深度オフセットを作成するために使用される倍率を指定します。

そしてそれ

各フラグメントの深度値は、適切な頂点の深度値から補間された後にオフセットされます。オフセットの値は係数×DZ+r×単位です。ここで、DZはポリゴンの画面領域に対する深さの変化の測定値であり、rは特定の値に対して解決可能なオフセットを生成することが保証されている最小値です。実装。

r私は何であるかを理解してunitいます。私が理解していないDZのは、「ポリゴンの画面領域に対する深度値の変化の測定」が何を意味するのか、そしてなぜ係数を0以外に設定する必要があるのか​​ということです。

ワイヤーフレームをオフセットしたい場合、必要なのは深度値に/から数単位を追加/実体化することだけですよね?factorパラメーター(およびドキュメントに記載されているDZ)の意味、目的、および使用例は何ですか?

0 投票する
2 に答える
1694 参照

opengl - Separate Frame Buffer and Depth Buffer in OpenGL

In DirectX you are able to have separate render targets and depth buffers, so you can bind a render target and a depth buffer, do some rendering, remove the depth buffer and then do more rendering using the old depth buffer as a texture.

How would you go about this in opengl? From my understanding, you have a framebuffer object that contains both the color buffer(s) and an optional depth buffer. I don't think I can bind several framebuffer objects at the same time, would I have to recreate the framebuffer object every time it changes(probably several times a frame)? How do normal opengl programs do this?

0 投票する
2 に答える
1015 参照

opengl - 深度テストを保持する OpenGL で 2D 画像 (深度あり) をレンダリングする

深度バッファーもある外部ソース (ソフトウェア レイ トレーサーなど) からの画像があります。OpenGL 深度バッファが正しく更新されるように、OpenGL シーン (他のいくつかの 3D オブジェクトを含む) でその画像をレンダリングしたいと考えています。つまり、正しい深度テストを使用して画像と他の 3D オブジェクトを組み合わせる必要があります。何か案は?シェーダーのないソリューションがいいでしょう。

0 投票する
0 に答える
972 参照

ios - OpenGL ES 2.0 平面モーフ/歪み効果 GPUImage iOS

すばらしい GPUImage フレームワークで少し遊んで、フラグメント シェーダーで「凸」のような効果を再現することができました。

ただし、GPUImage またはその他の OpenGL レンダリングをテクスチャに使用して、3D でより複雑な平面曲線を作成できるかどうか疑問に思っています。

私が到達しようとしている効果は、このようなものです。深度バッファーと頂点シェーダーを使用して同様のものを得る可能性はありますか?または、Z 座標をエミュレートするより洗練されたフラグメント シェーダーを開発する必要がありますか?

ライブカメラ出力 - 普通紙です

これは、フラグメントシェーダーと定期的なバルジングのみを使用して取得したものです GPUImageのフラグメントシェーダーで得られるものは次のとおりです-それほどクールではありません

ありがとう

もう1つの考えは、3Dモデリングアプリで曲面のプロトタイプを作成し、何らかの方法でテクスチャをそれにマッピングすることは可能でしょうか?

0 投票する
1 に答える
753 参照

opengl - OpenGL 深度テクスチャ アーティファクト

小さな 3D エンジンにシャドウ マッピングを実装しています。ただし、深度テクスチャにアーティファクトがあるようです。これは、テクスチャを使用して影を観察するか、クワッドに深度テクスチャを描画することで確認できます。

クワッドに描画されたときの深度テクスチャは次のようになります。

はい、それらの小さな白い四角形はそこにあるべきではありません。

それで、それを引き起こしている可能性があるのは何ですか?

glfw ウィンドウを開く:

深度フレーム バッファとテクスチャの作成:

深度テクスチャへのレンダリング:

0 投票する
1 に答える
7030 参照

opengl - glDepthRange はどのように機能しますか?

私の頂点コードは次のとおりです。

今、私は次のようにzコードを変更しています:

現在、glDepthRange 呼び出しにより z コードが -0.5 から 0.5 の範囲にマップされ、適切な立方体が表示されることを期待していますが、上記の glDepthRange 呼び出しを歪んだジオメトリでコメントした場合と同じように o/p が返されます。

0 投票する
1 に答える
636 参照

shader - CGシェーダー、フラグメントごとのZ-Writeを制御しますか?

デプスがデプスバッファに書き込まれるかどうかをフラグメントごとに制御することはどういうわけか可能ですか?

オブジェクトの深度テストを適切に行う必要がありますが(したがって、テストのためにフラグメントごとに正確な深度を出力する必要があります)、一部のフラグメントのみをバッファーに書き込みます。

それを行う方法はありますか?