問題タブ [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 投票する
1 に答える
798 参照

opengl - glPolygonOffset がポリゴンの勾配に関連している理由

OpenGL を使用してシャドウ マッピングを行っています。深度をシャドウ マップと比較すると、Z ファイティングの問題が発生します。glPolygonOffset を使用して問題を解決できます。この関数は、Z ファイティングの問題が解決されるように、ポリゴンを少しプッシュ (またはプル) するのに役立ちます。しかし、関数 glPolygonOffset について質問があります。ポリゴンの傾きがオフセットに関係している理由がよくわかりません。

ここから:

factor パラメーターは、ビューアーのほぼ真横にある塗りつぶされたプリミティブの正しい結果を保証するために必要です。この場合、同一平面上にある 2 つのプリミティブによって生成された同じピクセルの Z 値の差は、X または Y の最大 Z 勾配と同じくらい大きくなる可能性があります。この Z 勾配は、ほぼエッジオンのプリミティブでは大きく、ほとんど存在しません。正面向きのプリミティブ用。factor パラメータを使用すると、このタイプの変数の差を結果の深度オフセットに追加できます。

ここで、「2 つの共平面プリミティブによって生成された同じピクセルの Z 値の差が、X または Y の最大 Z 勾配と同じくらい大きくなる可能性がある」理由がわかりません。

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

opengl - OpenGLで動作する深度テストを取得できません

SFMLを使用してウィンドウを作成します。

このスクリーンショットでは、立方体はピラミッドの後ろにあるはずですが、機能しません。 スクリーンショット

これが私が使用した最小限のコードです:

さまざまな深度関数、GL_LESS、GL_EQUALを試しましたが、それらすべてを試しました。また、さまざまな場所での深度テストを有効または無効にしても、何も機能していないようです。

私はMacOSX 10.7(Lion)を実行していますが、それが重要かどうかはわかりませんが、アップグレードする前はこのようなことで問題はなかったようです。

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

c++ - GL 深度関数に GL_LEQUAL が推奨されるのはなぜですか (そして、それが機能しないのはなぜですか)?

GL wikiでは、深度関数に GL_LEQUAL を使用することを推奨しています。また、深度関数のデフォルトは GL_LESS です。これらの関数のいずれかを使用すると、奇妙な結果が得られます。この図では、赤い正方形が青い正方形の前にある必要があります (両方の正方形は同じサイズです)。 GL_LESSで

ただし、 を使用glClearDepth(0.0)してから を使用すると、glDepthFunc(GL_GREATER)変更されていないプログラムを実行すると、次のようになります。 GL_GREATER で

もう少し考えてみると、GL_LESS が結果を与えるのは理にかなっています: 入力深度値が格納されている値よりも小さい場合、フラグメントが書き込まれます。

カメラを に配置して(1, 0, 0)方向を見た場合、 のオブジェクトが のオブジェクトの前にある(0, 0, 0)と予想されます。GL_LESS を使用すると、オブジェクトはそのフラグメントが書き込まれるものではないでしょうか?(0.5, 0, 0)(0, 0, 0)(0, 0, 0)

編集:ニコル、射影行列について言及してくれてありがとう。設定が間違っていたようです。私はしばらくの間、arcsynthesis.org のチュートリアルに従い、コードを自分のプロジェクトに適合させていましたが、射影行列から逸脱し、glFrustum のマニュアル ページに記載されている数学を使用して、その関数の独自のバージョンを実装し、NeHe の gluPerspective を使用しましたgluPerspective を置き換える置換。行列の計算が正しいため、置換が機能しなかった理由がわかりません (さまざまなオンライン計算機と比較して確認しました)。マトリックスを使用すると、GL_LESS で正しい結果が得られます。

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

opengl-es - OpenGLのアルファ値を持つテクスチャの深さ

Android用のOpenGLES1.xでアプリを開発していますが、アルファマスクを使用したポリゴンの深度テストで問題が発生しています。alpha!= 0の値でのみ深度テストを計算するプログラムを作成するにはどうすればよいですか?で試してみましglEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.1f);たが、何も変わらないので、理由がわかりません。

前もって感謝します。

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

c++ - OpenGLでアルファを持つテクスチャを使用した3Dモデルのレンダリング

そのため、適用されたテクスチャの一部にアルファチャネルがある場合に、OpenGLで3Dモデルをレンダリングするための最良の方法を見つけようとしています。

デプスバッファを有効にして、3Dモデルのすべての三角形の描画を開始したときに、モデル内の別の三角形の前にある三角形を描画すると、それに到達したときに後ろの三角形がレンダリングされません。問題は、前の三角形がアルファ透明度を持ち、後ろの三角形まで透けて見えるはずなのに、後ろの三角形がまだレンダリングされていない場合です。

デプスバッファを無効にすると、その問題は解消されますが、三角形が不透明な場合でも、後でレンダリングすると、その背後にある三角形が上にレンダリングされるという明らかな問題が発生します。

たとえば、基本的にいくつかのコーンが互いに積み重ねられ、ベースが透明な松の木をレンダリングしようとしています。次の図は、デプスバッファが有効になっている場合に発生する問題を示しています。

デプスバッファが有効

透明な三角形の輪郭がどのように見えるかがわかります。

次の図は、デプスバッファが無効になっている場合の様子を示しています。

デプスバッファが無効になっています

ここでは、ツリーの背面にある三角形の一部が、ツリーの残りの部分の前にどのようにレンダリングされているかを確認できます。

この問題に対処し、松の木を適切にレンダリングする方法はありますか?

PS私はすべてをレンダリングするためにシェーダーを使用しています。

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

android - NDK r7b を使用する Android 用の FrameBuffer / ColorBuffer / DepthBuffer を備えた OpenGLES 1.1

NDK のドキュメントと OpenGLES に関する私のすべての本を読んだ後、壁にぶつかりました。iOS OpenGLES の設定を Android NDK R7 以降にコピーしようとしています。これは主に、コーディング時に見落としていた深度バッファーを取得するためです。

問題は、以下に示すようにカラー バッファを有効にすると一部のオブジェクトのテクスチャが失われ、オブジェクトをバックグラウンドに送信すると深度バッファが機能しないことです。

OGLES 1.1 FFP および NDK R7 以降を使用しています

これが私の初期化コードです:-

これが私のレンダリングコードです:

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

opengl - 深度/ステンシル バッファをフレーム バッファにアタッチする際のエラー

この一連のコマンドを OpenGL に発行して、深度/ステンシル バッファーを作成します。

次に、それをフレームバッファにアタッチしようとします

しかし、への呼び出しはglCheckFramebufferStatusEXT戻りますGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。深度ステンシル バッファをアタッチしない場合、このテストは問題なく実行されます (ただし、明らかにディスプレイが壊れています)。

手がかりはありますか?

編集: 変更: テクスチャの作成を基本的なテクスチャの形式に簡略化しました。

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

ios - OpenGL ES 2.0 バッファのセットアップ

カラー バッファーの前に深度バッファーをバインドすると、アプリケーションが意図したとおりに動作することに気付きました。

ただし、後で深度バッファーをバインドすると、glClearColor 設定が無視されても、何もレンダリングされません。

個々のコンポーネントを徹底的に調査することで、OpenGL ES 2.0 がどのように機能するかの流れの一部を理解するようになりましたが、これは、誰もがチュートリアル/本で行う唯一のことのように見えますが、その理由は説明されていません. 何か案は?これは問題ですか、それともセットアップの残りの部分で何か問題があるのでしょうか? (そうであれば、すべてのコードを含めます)

編集

@cli_hlt - 深度バッファは既にフレームバッファに追加されています:

編集

前の深さ境界:

ここに画像の説明を入力 ここに画像の説明を入力

後にバインドされた深さ:

ここに画像の説明を入力

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

opengl - OpenGL、フレームバッファからの深度バッファを通常の深度バッファとして使用する方法

深度コンポーネントと 4 つのテクスチャを備えた 4 つのカラー アタッチメントを備えたフレーム バッファがあります。

フラグメント シェーダー (ディファード ライティング) に 4 つのテクスチャを使用して、いくつかのものを描画し、その後バッファーをバインド解除します。後で、フレームバッファの深度バッファを使用して、画面にさらに何かを描画したいのですが、可能ですか?

再度フレームバッファをバインドしてglDrawBuffer(GL_FRONT)を指定してみましたが、うまくいきません。

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

opengl - 特定の範囲の深度テストを行うにはどうすればよいですか?

特定の範囲の深さをテストする最も一般的/最も簡単/最速の方法は何ですか?

pass if (currentDepth-offset < newDepth && newDepth < currentDepth)

  • currentDepth := 深度バッファの値
  • オフセット := 定数 (コンパイル時に認識され、すべてのフラグメントで同じ)
  • newDepth := フラグメントの深さ

理想的には、関数 glDepthFunc(...) がより柔軟になります。