問題タブ [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.
java - 半透明のテクスチャを使用して背景の一部を「マスク」する
「霧の中の穴」効果を作成しようとしています。特定の領域が表示されていないことを示すために使用する「霧」テクスチャがある背景グリッド画像が重なっています。現在表示されている領域を示す「霧」からチャンクを切り取ろうとしています。画面から霧の一部を「マスク」しようとしています。
私が求めているものを説明するのに役立ついくつかの画像を作成しました:
背景:
「マスク画像」(完全な透明度は、使用する目的のために外側の縁ではなく内側にある必要があります):
霧(申し訳ありませんが、見にくいです..ほとんど透明です):
最終製品として欲しいもの:
私が試してみました:
- Stencil-Buffer: 1 つの事実を除いて、これは完全に機能しました...「マスク」イメージのフェード透明度を保持する方法を理解できませんでした。
- glBlendFunc: さまざまなバージョンのパラメーターと、それを使用する他の多くのメソッド (glColorMask、glBlendEquation、glBlendFuncSeparate) を試しました。この Web サイトで見つけたいくつかのパラメーターを使用することから始めました。「glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);」を使用しました。これは私が探していたもののように見えたので...これが結果として起こったことです:(ここで何が起こっているのかを伝えるのは難しいですが...背景のグリッドを覆う霧があります.しかし、マスクは、霧の中で透明な部分であるはずなのに、完全に不透明な黒い塊になってしまいます。
以前のコード:
(もっと多くのコードを投稿したかったのですが、多くのことを試した後、古いコードが非常に雑然としていたので削除し始めました (ブロックコメントで「バックアップ」しました))
opengl-es - OpenGl ES 2.0 を使用したステンシル
背景テクスチャの特定の領域を切り取って、その背景の特定のカスタム パターンが画面に表示されないようにする方法を見つけようとしています。例えば:
この正方形は任意のパターンにすることができます。この種の効果を得るために、Frame Buffer Object と Stencil Buffer を使用しています。コードは次のとおりです。
ただし、これはまったく機能していません。ステンシル バッファーを使用してこれを行うにはどうすればよいですか? また、glStencilFunc と glStencilOp を理解するのに苦労しています。誰かがこれら2つに光を当てることができれば、非常に役に立ちます。
更新: glColorMask を使用して同じ種類のものを作成しようとしました。コードは次のとおりです。
このコードはこれを生成しています:
このようなものの代わりに: (ウィンドウのサイズと色調を無視してください)
注: libgdx ライブラリを使用しています。
ios - iOS でステンシル バッファを使用する
「ステンシル バッファ」を使用してテクスチャからレンダリングの一部を表示しようとしましたが、レンダリングがマスク効果なしで表示されます。
これは、OpenGL ES 2.0 を使用した 2D iOS プロジェクト用です。これは私のコードの関連部分です。
どんな助けでも大歓迎です!
(フランスの開発者としてはいつものことですが、私の英語で申し訳ありません!)
precision : "_maskTexture" は白黒画像です。
解決 :
私はrotoglubとtimの指示で問題を最終的に解決しました。あなたがた両方に感謝します。
1/ ステンシル バッファが正しく作成されていません。次のように初期化する必要があります。
私のレンダリングがマスクの影響を受けなかった主な理由です。
2/ テクスチャをマスクとして使用できるようにするために、黒色をアルファ チャネルに置き換え、レンダリングでのブレンドを有効にしました。
私の最終的なレンダリングコードは次のようになります:
opengl - Opengl のステンシル バッファ
OpenGL Red Book でのステンシル テストは次のように述べています。
ステンシル テストは、ステンシル バッファーがある場合にのみ実行されます。
OpenGL / グラフィックス カードの実装にステンシル バッファがあるかどうかを確認するにはどうすればよいですか?
ios - Stencil Buffer を iOS 4+ で動作させることができません (5.0 は正常に動作します)。[OpenGL ES2.0]
そのため、マスキング/クリッピングの目的で iOS でステンシル バッファを使用しようとしています。このコードが機能しない理由がわかりましたか? これは、私が Stencils に関連付けたすべてです。iOS 4 では、黒い画面が表示されます。iOS 5 では、期待どおりの結果が得られます。ステンシルに描いた画像の透明な部分だけが後で描かれます。
コードは以下です。
ここで、frameBuffer、深度、およびステンシルをセットアップします。iOS では、深度とステンシルが組み合わされています。
これが、ステンシルを設定して描画する方法です。(以下のシェーダーコード。)
ステンシルを使っているところです。
最後に、これが私のフラグメント シェーダーです。
opengl - opengl:影の中に立つと影が消えるのはなぜですか?
影の中に立っていないと影の効果は完璧に見えますが、影の中にいると影が消えてしまいます。
これがシャドウ効果を実現するための私のコードです。
クラスSECTORは次のようになります。
opengl - openglでz-failアルゴリズムを実現するには?
私は NeHe チューターのレッスン 27 が私に言ったようにコーディングしますが、それは z-pass アルゴリズムです。そのため、z-fail アルゴリズムの調査に 2 日間を費やしましたが、ついに、それがわかりません。
wiki に記載されている z-fail アルゴリズム:
深度の失敗 2000 年頃、何人かの人々が、深度を逆にすることでハイドマンの方法をすべてのカメラ位置で機能させることができることを発見しました。オブジェクトのサーフェスの前にあるシャドウ サーフェスを数える代わりに、その背後にあるサーフェスを同じように簡単に数えることができ、同じ最終結果が得られます。これにより、目とオブジェクトの間のシャドウ ボリュームがカウントされないため、目が影になるという問題が解決されますが、シャドウ ボリュームの後端をキャップする必要があるという条件が導入されます。無限に逆戻り。
深度バッファとカラー バッファへの書き込みを無効にします。
前面カリングを使用します。
ステンシル操作を深度失敗時にインクリメントするように設定します (オブジェクトの背後にある影のみをカウントします)。
シャドウ ボリュームをレンダリングします。
バック フェース カリングを使用します。
深さの失敗時にステンシル操作をデクリメントするように設定します。
シャドウ ボリュームをレンダリングします。
私が考える主な質問は、深度テストです。ステップ 3 と 6 では、ステンシル操作は深度失敗に基づいています。影を表示することはできますが、その前のオブジェクト (つまり、深度バッファー値がそれよりも小さいオブジェクト) に影がかかる可能性があります。影の効果がめちゃくちゃに見えます。
しかし、z パス アルゴリズムでは、ステンシル操作は深度パスに基づいています。つまり、影を表示できるだけでなく、目のシステムに一致する背後のオブジェクトにのみ影を付けることができます。
この問題を解決して、深度失敗アルゴリズムが正しいオブジェクトの影を表示するようにする方法。
これが私のz-failアルゴリズムコードです(どこかにあるかもしれません、見つけてください、影の効果はひどいです)
VECTOR クラスは次のようになります。
SECTOR クラスなどは次のようになります。
私の main.cpp の DrawGLScene 関数は次のようになります。
私の評判は10未満なので、影の効果をキャプチャして、その見た目がどれほど悪いかを示すことができません! plsは私を助けてください、私はあなたの注意とあなたの時間のためにあなたをthxします!!!
私に5つの評判を与えてくれたthx Najzero、今私は効果を示すために画面をキャプチャすることができます.私は詳細な説明を以下に追加します.
Z パス アルゴリズム効果: 効果の中にいなくても大丈夫です! (オレンジ色のポットは光を表します)
しかし、私が wall_shadow にいるときは、問題ありません! wall_shadow はなくなりましたが、brick_shadow はまだそこにあります。
したがって、この問題を解決するには z-fail アルゴリズムが必要ですが、コードが最後に実現した効果は次
のようなものです。ダニは影の効果を表し、十字は影がオブジェクトに表示されないようにします。
別のスクリーンショット、
java - Libgdx SpriteBatchはStencilBufferに描画しますか?
OpenGL ES 1.0でlibgdxを使用していますが、SpriteBatchがステンシルバッファに書き込み/描画できるかどうか疑問に思っています。私はそれに書き込もうとしていて、まったく結果が得られません。ステンシルバッファを使用した経験はありませんが、たくさん読んでいるので、次の何かが間違っている場合は訂正してください。基本的に私がやりたいのは、SpriteBatchを使用してテクスチャをステンシルバッファに描画することです。そのため、他の何かを描画すると(ステンシルバッファが無効になっている場合)、ステンシルバッファが1に等しい領域にのみ描画されます。
これが私の望ましい結果です。星の形をしたテクスチャをステンシルバッファに描画してから、赤いテクスチャをカラーバッファに描画する場合、赤いテクスチャで、星がステンシルバッファにあるピクセルを省略します。
これはこれまでの私のコードです:
c++ - 深度ステンシルが機能しない - DirectX 10 C++
DirectX10 + C++ の問題があります。
基本的に、レンダリングの初期段階にあり、何らかの理由で深度ステンシルがモデルを理解できていないようです。基本的に、ここに私たちがやっていることすべてがあります:
- シェーダー、モデル、テクスチャーを読み込む
- DirectX の初期化
- 描く
モデル、シェーダー、テクスチャはすべて正しく読み込まれ、機能しますが (下のスクリーンショットに示すように)、深度ステンシルは明らかに機能しておらず、シェーダーが間違った場所で使用されています。理解するために必要な場合に備えて、初期化メソッドも含めました。ほとんどすべてを試したと思いますが、運が良ければ、重要なコードの 1 行を見逃している可能性があります ^.^
他の誰かが同じ問題を抱えていることも確認しましたが、彼らの修正は機能しませんでした (彼らの問題は、近くのクリッピング プレーンを 0.0 に設定したことでしたが、私たちのものは 0.0 ではないため、それは問題ではありません)。
前もって感謝します!
macos - ステンシル バッファをテクスチャに視覚化する
遅延レンダラーで使用するテクスチャにステンシル バッファを入れようとしています。
他のカラーと深度のアタッチメントを取得してglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textures[color1], 0);
いますが、結果は正しいです。
しかし、ステンシル バッファをテクスチャにアタッチしようとすると
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT ,GL_TEXTURE_2D, textures[stencil], 0);
、FBO がバッファをクリアしていないかのように、文字化けした結果が得られます。
何が問題なのかわからない。私の疑いは、ステンシル テクスチャの設定に問題があるということです...
セットアップでエラー コードが表示されないため、問題が何であるかがわかりません。
編集:多分私はこれを正しくやっていません。ステンシル バッファをテクスチャに書き込む方法を知っている人がいれば、別のコードを記述してもかまいません。機能する方法が必要です。