問題タブ [zbuffer]

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 投票する
1 に答える
5957 参照

opengl - ZバッファからZ値を取得する方法

OpenGLでの描画に問題があり、デプスバッファに配置されている値を正確に確認する必要があります。誰かがこれらの値を取得する方法を教えてもらえますか?ありがとうクリス

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

c++ - Z-Buffer の効率的な実装

現在、Z-Buffer アルゴリズムを使用して独自のレンダラーを実装しています。必要な計算を行ったら (私の Z バッファには正しい値が入力されています)、SDL を使用して必要なピクセルに色を付けます。これには HWSurface を使用しています。

私の質問は、これをできるだけ速くレンダリングするにはどうすればよいですか? これは、描画自体を意味します。構造、アルゴリズムで最適化を行うことができます。これは後で行いますが、描画自体が可能な限り高速であることを確認したいと考えています。

私は ZBuffer の独自の実装を持っているため (後で他のアルゴリズムが実装される予定です)、OpenGL を使用できません。代替手段はありますか?

ここで、Z バッファ内のすべてのポイントを調べて、描画する必要があるすべてのピクセルを 1 つずつ描画します (Z バッファリングなので、これを行う必要がありますよね?)。 DrawPixel メソッド。SDL に関しては、Z バッファを通過する前にサーフェスをロックし、すべてのピクセルを描画してからロックを解除します。私の知る限り、これは速くなりません。

助言がありますか?

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

c# - DirectXZバッファの問題

C#マネージドDirectXアプリケーションで見られる奇妙なアーティファクトの原因を知っている人はいますか?これが私が抱えている問題のスクリーンショットです:

ここに画像の説明を入力してください

あなたが見ているのは、その下に平らな面がある地形です。

  • 左側には、表示されるべきではない(下にある)にもかかわらず、地形のに飛行機が表示されています。
  • 真ん中には、私が「ブラインド」と呼んでいるものを見る移行段階があります
  • 右側には正しく表示されています

これはZバッファの問題であるに違いありませんが、私はそれを整理することができませんでした。他の誰かがこれと同じ問題に遭遇しましたか?それは私を狂わせています!

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

opengl - OpenGL Z バイアス (ポリゴン オフセット) の制限

私は2つの共面ポリゴンを持っています。

やってみました。

そして、一方が他方の上に明確に「上にある」と予想しました。

これは、約 70 ~ 75 ユニット離れたところまで当てはまります (ニア クリッピング プレーンが 1、ファー クリッピング プレーンが 10,000 の場合)。次に、Z ファイティングがある約 50 単位の領域があり、その上に別のポリゴンが表示されているように見えます。

ポリゴン オフセットは、通常の Z 計算の前または後に追加されますか? 後でしたら、すべての距離で「うまくいった」と思っていたでしょう。

間違った値を使用していませんか? 期待される結果を誤解していますか? それとも、これは機能するはずですか?おそらく他の場所で何か間違ったことをしているでしょうか?

シーンには他のオブジェクトがあり、数値が十分に大きい場合は、遠く離れたオブジェクトの前に「ジャンプ」する可能性があるため、より大きな値を試すことを恐れていました.

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

opengl - 深さに応じてピクセルに優先順位を付けるのではなく、Zバッファを使用する利点

これはもう少し学術的な質問です。確かに私は試験の準備をしていて、この概念を本当に理解しようとしています。

文脈をいくらか説明させてください。手元にある問題は、画面に描画するときにオブジェクト(またはより具体的にはポリゴン)を互いに隠すことです。どちらが最後に描画され、したがって最前線に描画されるかを決定するために、計算を行う必要があります。

先日の講義で、私の教授は、深さの値の観点からピクセルに優先順位を付けることは計算上非効率的であると述べました。次に、Zバッファーについて簡単に説明し、ピクセルの深度値をテストして、バッファー内のピクセルの深度値と比較する方法について説明しました。これは、「深さの点で優先順位の高いピクセル」とどのように異なりますか。

ありがとう!

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

directx - DirectX 9.0c で事前に変換されたメッシュの深度バッファー制限を変更する

事前に変換された頂点を受け取り、それらを画面に表示する小さなアプリケーションを作成しています。

頂点の FVF は次のように定義されています (変更できません)。

Z バッファは、D3DPRESENT_PARAMETERS のフィールドを介して作成されます (これは変更可能です)。

問題は、ファー クリッピング プレーンが非常に短いことです (すべてのメッシュがカメラから 1.0f でクリッピングされます)。マトリックス射影を使用できません (前述のとおり、事前に変換された頂点を既に取得しています)。深度バッファ制限を設定する方法はありますか? または、事前に変換された頂点に長いファー クリッピング プレーンを持つ z バッファを使用する他の方法はありますか?

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

opengl - gl_PositionのZbufferルール

重要な場合に備えて、openglの設定は次のとおりです。

しばらくの間、クリッピングプレーンは、gl_Position.zが-1から1の外側にあるものすべてに適用されると思いました。しかし、シェーダーでgl_Position.zを一定の数に強制した場合でも、次のようになります。

gl_Position.wに基づく正しいzバッファリングとクリッピングがまだあります!それで、ルールは何ですか?

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

direct3d - DirectX9.0cのピクセルシェーダーで深度バッファーにアクセスする方法

DX 9.0cのピクセルシェーダー2.0を介して深度バッファーにアクセスすることは可能ですか?私は少しグーグルで調べました、そして私が見つけた唯一の解決策はGeForce6と7でのみ機能するGPUハックを説明しています。

私が達成しようとしているのは、被写界深度シェーダー効果を作成することです。他の後処理に使用されるテクスチャへのレンダリングトリックも行っているため、頂点のZ座標を単純に取得することはできません。

編集:

私はこれを試しました:

SaveTextureToFileは失敗し、シェーダーは真っ白なRGB(1、1、1)のテクスチャを取得します

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

glsl - [GLSL]ワールド座標のすべての頂点のz値を比較するにはどうすればよいですか?

これは簡単な質問かもしれません。GLSLの初心者として、私はむしろここで質問したいと思います。これで、頂点シェーダーで、次の方法でワールド座標系の位置を取得できます。

問題は、すべての頂点の中でposWorldの最大/最小値を取得できるかどうかです。頂点の深さの範囲を取得できるようにしますが、深さバッファーの範囲は取得できません。

これが不可能な場合、ワールド座標系で近距離/遠距離平面のz値を取得するにはどうすればよいですか?

敬具、

ジャン

0 投票する
3 に答える
1176 参照

c - Zバッファ実装の最適化に関する提案はありますか?

私は自分のプロジェクトの一部として3Dグラフィックライブラリを書いています。すべてが機能する段階にありますが、十分ではありません。

特に、私の主な頭痛の種は、ピクセルの充填速度がひどく遅いことです。ターゲットマシン(確かに古いコンピューターですが、古いコンピューターですが、これを管理できるはずです... )

実行可能ファイルでgprofを実行すると、次の興味深い行が表示されます。

この関数vSwapは私のダブルバッファスワッピング関数であり、vsychingも実行するので、テストプログラムがそこで待機することに多くの時間を費やすことは私には理にかなっています。は私の三角形描画関数です。これは、エッジリストを作成してから、実際に三角形を塗りつぶすためにgrScanlineFill呼び出します。grInterpolateHLine

私のエンジンは現在、隠面判定を実行するためにZバッファを使用しています。(推定される)vsynchオーバーヘッドを割り引くと、テストプログラムは実行時間の85%程度を、深度バッファーをクリアするか、深度バッファーの値に従ってピクセルを書き込むために費やしていることがわかります。私のデプスバッファクリア機能は単純さそのものです。floatの最大値を各要素にコピーします。関数grInterpolateHLineは次のとおりです。

vSetPixel特にそれがマクロであることを考えると、どうすればそれを改善できるのか本当にわかりません。

最適化のための私のアイデアのすべてのストックは、正確に1つに絞り込まれました。

  1. 整数/固定小数点深度バッファを使用します。

整数/固定小数点の深さバッファーで私が抱えている問題は、補間が非常に煩わしい可能性があることであり、実際にはまだ固定小数点数のライブラリーを持っていませんそこにさらに考えはありますか?任意のアドバイスをいただければ幸いです。