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

opengl - 凹面ポリゴン描画

OpenGL で複雑な凹面ポリゴンを描画するには、それを三角形にテッセレートするか、ステンシル バッファーを使用する方がよいでしょうか? ステンシル バッファは 1 つのフレームの場合は高速になると思いますが、ポリゴンが変更されない場合は、複数のフレームの場合は三角測量の方が適しています。ただし、実際に試したことがないのでわかりません。

0 投票する
4 に答える
3773 参照

c++ - OpenGL ステンシル テストは、フラグメント プログラムの実行前または実行後に行われますか?

すべての描画を効果的に無効に設定glStencilFunc( GL_NEVER, . . . )し、[シェーダーにバインドされた] プログラムを実行すると、フラグメント シェーダーを実行するよりもパフォーマンスが向上しません。ステンシル テストはフラグメント プログラムの前に行われたと思いました。そうではありませんか、少なくとも保証されていませんか?gl_FragColor に定数を書き込むだけのフラグメント シェーダーに置き換えると、FPS が高くなります。

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

opengl - OpenGl:ステンシルバッファの問題(壁+窓)?

ステンシルバッファを使用して、内部に窓のある壁を作成したいと思います。私のコードは次のようになります:

しかし、それはうまくいきません、私はその中に窓のない塗りつぶし壁全体を手に入れました、何か提案はありますか?

0 投票する
4 に答える
7584 参照

java - OpenGL-ESステンシルバッファを機能させる

Android用のopengl-esのステンシルバッファを使用して、画面の描画部分をマスクアウトしようとしています。正しく設定されていると思いますが、ステンシル以外の部分をマスクしているわけではありません。以下は、私が行っていることのコードの抜粋です。

誰かがこれに何か問題を見つけましたか?基本的には、画面の半分(カラーを有効にした場合に機能します)のボックスを描画し、その領域のステンシルバッファを1に設定します。そして最後に、画面全体に描画します。上半分だけに描きたいのですが、すべてを描きます。

前もって感謝します。

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

direct3d - ステンシルを機能させることができません

私のアプリでステンシルを動作させようとしていました。スプライトを使用して、デバイスにコンテンツをレンダリングします。コンテンツは、映画、写真、またはテキストである可能性があります。

これらのスプライトを使用してステンシルバッファを設定できますか?これは、レンダリングされている他のスプライトをステンシルアウトするために後のパスで使用できますか?

StencilFunction = Compare.Never!を設定しても、スプライトをステンシルで印刷することはできません。私がしているかもしれない何か間違ったことはありますか?

MDXのステンシルに関連する投稿をチェックするのにほぼ1日を費やしましたが、それを機能させることができませんでした。

もう少し検索すると、ステンシルバッファに追加する形状のシルエットを描画する手法にたどり着きました。私の場合、これは本当に必要ですか?スプライトを使用し、それらをステンシルバッファーに追加して、他のスプライトをステンシルアウトしたいと思います。

編集:わかりました..それで私はそれを成し遂げる方法を考え出しました。この投稿を参照-http://www.gamedev.net/community/forums/viewreply.asp?ID= 1999276

しかし現在、スプライトはアルファ値を無視し、スプライトを不透明にしています。アルファブレンディングがfalseに設定されている場合に得られる効果と同様です。何か案は?

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

opengl - OpenGLステンシルバッファまたは操作?

これが可能かどうかはわかりませんが、一見の価値があります。このアルゴリズムを使用して、遅延レンダラーでのライトボリュームのオーバードローを減らすためにステンシルバッファーを使用しています(カメラがボリュームの外側にある場合)。

  1. 安価なシェーダーを使用して、深度テストをLEQUALに設定して面を描画し、ステンシルバッファーでマークします。
  2. 高価なライティングシェーダーを使用して、深度テストをGEQUALに設定して前面を描画します。

これにより、ライトボリューム内のピクセルのみがシェーディングされます。これに伴う問題は、複数のライトを描画するときに発生します。まず、状態の変更には費用がかかるため、ライトごとに安価なシェーダーと高価なシェーダーを繰り返し切り替えるのはおそらく最善の方法ではありません。理想的には、安価なシェーダーで8つのライトボリュームをレンダリングし、次に高価なシェーダーで8つのライトボリュームをレンダリングすることにより、ステンシルバッファーの8ビットすべてを利用したいと思います。ただし、どのピクセルがどのライトに属しているかを判断する方法がないため、ライトが重なると問題が発生します。

頭に浮かぶ解決策は、ライトごとにステンシルバッファで1ビットを使用することです。したがって、ライトnの場合、安価なパスでステンシルバッファのn番目のビットをマークし、高価なパスでそのビットがオンになっているピクセルのみをレンダリングします。

私はこれまでステンシルバッファを使用したことがありませんが、私が読んでいることから、これは不可能のようです。これを機能させるには、ビット単位のORを使用してステンシルバッファを設定する必要があり、ステンシル関数はビット単位のANDである必要があります。ただし、私が見ることができるステンシルバッファの操作は、KEEP、ZERO、REPLACE、INCR、DECR、およびINVERTのみであり、関数は、NEVER、ALWAYS、LESS、EQUAL、LEQUAL、GEQUAL、GREATER、およびNOTEQUALのみです。

ステンシルバッファを使用して、このORおよびANDing動作を何らかの方法で取得する方法はありますか?そうでない場合は、ライトボリュームを効率的にレンダリングするための代替アプローチはありますか?

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

c++ - シャドウ ボリューム - 最終段階

ボリューム自体を完成させた後、 OpenGLでシャドウ ボリュームの作業を続けています 。ご覧のとおり、球は光源を表し、1 つのキノコはそのボリュームが画面に直接描画され、もう 1 つは描画されていません (代わりに影が表示されることを期待しています)。それらは完全に等しく、1 つのモデルを X 軸上のいくつかの単位で変換します。これが私が働いているコードです:

これが私のGL初期化関数です:

そして私の主な機能では:

私のコードは大丈夫ですか?影が見えず、ステンシル値が正しく設定されているかどうかを確認する方法さえ知らないからです。

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

c++ - 球でGL_STENCILを使用するOpenGL

私はOpenGLを使用していて、反射面を持つ球を作成しようとしています。私はそれを反映していますが、反射は正しくありません。反射のオブジェクトは、サーフェスのカーブに従って曲げたり変形したりする必要があります。代わりに、まっすぐな反射しか得られません。私はGL_STENCILをあまり使用していませんので、助けていただければ幸いです。球の作成や描画メソッドなどのコードを提供しました。誰かがもっと必要な場合は私に知らせてください。

作成:

描く:

GL_STENCILを使用するのは初めてなので、それが小さなものなのか、それともその反射角度を検出するためにさらに多くのことを行う必要があるのか​​がわかりませんでした。

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

opengl - OperGL ステンシル バッファが期待どおりに動作しない

私は単純な UI ウィジェット システムを持っており、ステンシル バッファーを使用してクリッパーとして機能させ、ウィジェットの子をウィジェットの外に描画できないようにしています。基本的に、このウィジェットの境界内にあるすべてのステンシル値がインクリメントされます。次に、クリッパーを作成した後に描画されたものはすべて、ボックス内にある必要があります。

クリッパー コンストラクターは次のようになります。

クリッパーがスコープ外になると、次のようなデストラクタが実行されます。

ただし、これを実行すると、ルート ウィジェットの直接の子のみが描画されます。子の子は全く描かれていません。私はこれのバリエーションをたくさん試しましたが、何か間違ったことをし続けています。これのどこが間違っているのかわかりません。

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

android - Androidネイティブコード(ndk)でOpenGL ES 2.0 FrameBuffer(FBO)とStencilを使用する

NDK (r5b) を使用して、frambuffer オブジェクトを生成し、ネイティブ Android アプリケーション内でステンシルを使用しようとしています。ターゲット デバイスは、OpenGL ES 2.0 をサポートする froyo 2.2 を実行しています。

そのため、私は C++ ネイティブ ライブラリで多くの gl コードをコーディングしてきましたが、これ以外の問題はありませんでした。私はそれを機能させることができないようです。

フレームバッファ作成のコード スニペットを次に示します。完成度は良いのですが、画面が真っ暗なままです。私が作成している fbo は、アプリの Java 部分によって作成された gl サーフェスに実際にはバインドされていないようです。私のアプリ コードの残りの部分はすべて問題ありません。fbo の作成とバインドを削除すると、アプリに必要なステンシルが機能していないことを除いて、すべてが正常に機能します。

また、レンダー バッファーの代わりに 2D テクスチャへのレンダリングを試みましたが、うまくいきませんでした。

それで、これを修正できる方法はありますか?ここで何か間違っていますか?誰かがアイデアを持っている場合は、教えてください....この問題を調べるのにあまりにも多くの時間を費やしています...へへ;)

前もって感謝します !

乾杯 !


編集 :

わかりました、ステンシル バッファを機能させることはできましたが、FBO は機能していません。OpenGL ES 2.0 は Android で完全にはサポートされていないと思います (ここでは r5b を使用しています)。メソッドスタブは定義されていると思いますが、完全には実装されていません。または、作成された GlSurfaceView が FBO と正しくリンクしていません。

ステンシルバッファに関しては、私がしなければならなかった

それらが正しく機能するために、glDepthMask の使用を削除します。