問題タブ [stencil-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 に答える
715 参照

opengl - glStencilFunc(GL_NEVER, 0, 0) はまだレンダリングされますか?

ステンシル バッファの使用に問題があり、煮詰めるとまったく機能しないようです。次のコードがあるとします。

三角形はまだ描かれている!? ここで些細なことを見逃していますか?

注: 私はフレーム バッファにレンダリングしていません。glStencil...Separate を使用しているのは、それが front\back に関連していないことを確認するためだけです。私には関連していないように見えるコードのビットを保持しています。

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

hlsl - ステンシル バッファ テスト設定 DirectX9

希望の色の三角形をレンダリングする関数があります。ステンシル テストを有効にして、黄色の三角形をレンダリングし、その上に赤い三角形をレンダリングしようとしています。ステンシル ウィンドウとして円を使用しています。以下の出力を得るには、私のステンシル テスト方程式と演算はどうあるべきですか。DirectX09 のみでのすべてのレンダリング。 望ましい出力 以下の API のいくつかの適切で単純な例を親切にガイドしてください....

SetRenderState(D3DRS_STENCILFUNC,
SetRenderState(D3DRS_STENCILREF,
SetRenderState(D3DRS_STENCILMASK,
SetRenderState(D3DRS_STENCILWRITEMASK,
SetRenderState(D3DRS_STENCILZFAIL,
SetRenderState(D3DRS_STENCILFAIL
SetRenderState(D3DRS_STENCILPASS,

DirectX09 シェーダー エフェクト ファイル (vs_3_0 および ps_3_0) で Stencil 操作を使用するにはどうすればよいですか?

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

opengl - OpenGL の反射と深さ

OpenGL でミラーを作成しようとしています。私が見つけたほとんどの参考文献では、ステンシル バッファーを使用してミラー自体の境界を定義し、実際の反射に変換マトリックスとスケーリング マトリックスを組み合わせて使用​​することを推奨しています。鏡の前にオブジェクトがないように、シーンが表示されているときにこれを機能させることができました。ただし、オブジェクトがミラーの前にある場合、重なり部分が表示されないため、鏡の後ろにあるかのように見えます。ステンシル バッファーを使用するのはこれが初めてなので、ステンシル バッファーのしくみを誤解している可能性は十分にありますが、深さなどに関して間違いを犯している可能性もあります。提案をいただければ幸いです。これがコードです。

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

opengl - OpenGLステンシルバッファの複数同時使用

シーン内の単一のインスタンスに OpenGL のステンシル バッファを使用することに成功しました。しかし、同じシーンで2つの異なる場所で使用する方法がわかりません。2 つのステンシル シェイプを順番に定義すると、どちらも機能しなくなります。同じシーンでステンシル バッファが複数使用されている例を見てきましたが、コードを理解することも適応させることもできませんでした。これが私がこれまでに取り組んできたことです。

プログラムが動作しているスクリーンショット

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

opengl - OpenGL水の反射

森の中の木々を近くの湖に反射させようとしています。ステンシルバッファを使用して反射を描画するためのすべての標準的な手順に従いました。しかし、「水」では下のオブジェクトが見えないようです。これが私の機能です:draw_sea()-反映する計画を描き、drawFigTree(fig_tree)-下の木を描きます。問題はどこにありますか?

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

directx-10 - 深度ステンシルとシャドウ リソースが空です

シャドウ マッピングを機能させるために約 3 日間費やした後、シャドウ マップをシェーダーに渡すのに問題が発生しました。

最初に深度ステンシルとリソース ビューを初期化し、次に深度ステンシルに描画します (と思います)。私が見つけている問題は、深度ステンシルに関連付けられたデータがないことです。

Pix のリソース ビューまたは深度ステンシルにデータが表示されません。深度ステンシルの画像をファイルに保存できません (非シャドウ深度ステンシルを使用しています)。DrawSceneShadow() を呼び出して rendertarget にレンダリングし、必要なものを取得できます。

どんな助けでも感謝します。

初期化する

シーンをレンダリング

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

objective-c - 凹面ポリゴンをレンダリングするための GL_STENCIL_TEST の使用

Quartz Composer に適合したカスタム ジオメトリ ライブラリに取り組んでおり、プラグインでいくつかの凹面ポリゴンを描画しようとしています。

poly2tri ライブラリを実装したので、ユーザーは三角形化するかどうかを選択できますが、フレームごとのポリゴン変換レンダリングには適していません。

私は OpenGL の初心者で、ステンシル バッファと奇数/偶数操作について多くのことを読んでテストしてきましたが、他の人にとってはうまくいくように見えるコードでさえ、私にとってはうまくいきません。

レンダー コンテキストは CGLContextObj で、NVidia GEForce GT650 を搭載した MacBook Pro Retina ディスプレイで作業しています。すべての構成にステンシル バッファーがないことを読みましたが、私が望んでいるとは限りませんが、時々機能するように見えます。

同じ種類の構成を持つ誰かが機能するコードを使用していて、私のコードを見ることができるかどうか疑問に思っていました。特に、頂点の数または「凸欠陥」に応じて、要求されたパスの数についても興味があります...

から情報を取得しました:

...しかし、まだ明確ではありません...

これが私のコード(実際には、非常に多くの構成をテストしたため、そのうちの1つです)と結果の写真です。実際には、各ポリゴンに対して呼び出されるメソッドに実際のレンダリングを配置していましたが、より明確になるように書き直しました。


編集

実際、ステンシル バッファのビット値を反転するために、各三角形を描画する必要があることを理解しました。だから私はこれに私のコードを書き直しました:

しかし、それでもうまくいきません。これが私の結果と、元の画像と説明へのリンクです。

http://what-when-how.com/opengl-programming-guide/drawing-filled-concave-polygons-using-the-stencil-buffer-opengl-programming/

ステンシルの失敗

編集2:

実際、Quartz Composer によって有効化されたコンテキストは、ステンシル バッファーを実装していません。ステンシル バッファを使用して OpenGL で直接レンダリングすることは不可能のようです。

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

opengl - OpenGL、ステンシルを使用したオフスクリーン ハード シャドウの計算

画面外の複数の光源からハードシャドウを計算できるかどうか、またどのように計算できるかを理解しようとしています。

プリアンブル: シーンは非常に複雑で、最大数百万の三角形、最大 100 の異なる光源、ライト、マテリアルと深度が有効で、最大の精度 (少なくとも 10kx10k ピクセルの地上解像度) です。影は、平面に投影された影に他なりません。つまり、(光源の位置と平面を指定して) 影のマトリックスを事前に乗算することにより、オブジェクト自体をレンダリングしています。複数のオブジェクト、複数の光源がありますが、平面は 1 つだけです。

このため、リアルタイムは不可能です。また、1 バイト (255 の有用な値) しかなく、255 を超える光源がある可能性があるため、増分ステンシル値について考えるのも不可能です。

したがって、私の考えは、オフスクリーンでレンダリングすることでした(テクスチャまたはレンダリングバッファイメージに)。

光源ごとに、シャドウ マトリックスを計算して適用します。次に、最初のオブジェクトを特定のステンシル番号 (つまり 1) でレンダリングします。次に、2 番目のオブジェクトをレンダリングします。ハード シャドウのみに関心があるため、ステンシル番号が 1 の場合にのみレンダリングする必要があり、他のすべてのピクセルをゼロにする必要があります。次に、3 番目のオブジェクトなどです。最後に、2 番目の光源などについてすべてのプロセスを繰り返します。

出来ますか?より良いテクスチャまたはレンダリング バッファ イメージ? ハード シャドウが計算されたら、CPU で取得して分析し、シーンの地面にもレンダリングする必要があります。

理想的には、FBO にアタッチされたステンシル バッファーのみが必要ですが、ここでは次のように述べています。

ステンシルは決してステンシル バッファーを作成しないでください。すべての GPU とすべてのドライバーが、独立したステンシル バッファーをサポートしているわけではありません。ステンシル バッファが必要な場合は、D24S8 とも呼ばれる Depth=24、Stencil=8 バッファを作成する必要があります。このページで GL_EXT_packed_depth_stencil に関する例を検索してください。

これは今日でも有効ですか?

周りを見回すと、各オブジェクト間にフルスクリーンのポリゴンをレンダリングすることで、他のすべてのピクセルをゼロにする方法を見つけましが、もっと効率的な方法があるのでしょうか..?

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

java - SpriteBatch 使用時の LibGDX ステンシル バッファ

これは、私の以前の問題と投稿の続きです。そこで受け取った回答のおかげで、OpenGL の学習を進めるだけでなく、目標に少し近づくことができたと感じていますが、ステンシル バッファーの操作の基本を理解した直後に、問題が発生しました。 .

ステンシル バッファにスプライトを描画すると、無意識に望んでいたように完全に透明ではないピクセルだけではなく、正方形の領域全体が描画されるようです。なぜそうなるのかはなんとなくわかりますが、解決策がどこにあるのかわかりません。ステンシル自体をかなり試し、スプライトバッチが低アルファ フラグメントを破棄するために使用するシェーダーを変更しましたが、全体像を把握できていないようです。

問題の視覚的な例として、前の質問で使用した例を続けます。現在、2つの円を互いに重ねて描画しようとしています(したがって、それらは完全にブレンドされ、重なり合うことはありません)、私はこれを取得しています:

ステンシルテスト

したがって、基本的に、複雑な形状で LibGDX の Sprite および SpriteBatch 機能を使用してステンシル バッファーを利用する方法はありますか (円は例としてのみ使用されています)、または代替ルートを探す必要がありますか?

編集 ::