問題タブ [glblendfunc]
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.
opengl - glBlendFunc とアルファ ブレンディング
ユーザーが異なるシェーダーとそれらの組み合わせを切り替えることができるアプリケーションを作成しています。したがって、まったく同じシーンを複数回描きたいと思います。
最後に、すべてのパスを 1 つの出力に結合する必要があります。glblendfunc を使用することを考えたすべてのパスを結合するには、必要な結果が得られません。
各描画呼び出しで、透明領域などのアルファ値を持つテクスチャを描画します。最終的な結果として、主に最後のレンダー パスの効果が見られますが、境界 (アルファ値がわずかに低下する場所) では最初のシェーダー効果が見られます。私が考えているのは、2つのパスをブレンドできるようにする2番目のglBlendFuncを使用する必要があるということですが、希望する効果を破壊するアルファ値に触れない方法は考えられません。
私は何をすべきか?アルファブレンディング以外に何かありますか?
編集: 私の目標は、1 つまたは複数のパスを結合することです。色を混ぜたい (ほとんどの場合、それらを一緒に追加する) のですが、各パスの色は、異なるレイヤー間で次のブレンド関数を介して計算されます:
編集: こんにちは!私はこの問題に取り組んでいますが、行き詰まります。シェーダーで sampler2d を適切に設定する方法がわかりません...何が間違っていますか?
opengl - glBlendFunc はシェーダーを無効にします
私は非常に単純なシェーダー (背景の正方形を緑に設定するだけ) を持っていますが、これは完全に機能します。
最近、テクスチャが適用されたクワッドをいくつか追加しました。このテクスチャにはいくつかのアルファ値があるため、これを使用して呼び出します。
クワッドは透明度で問題なく表示されますが、背景のシェーダーはなくなりました。まだ描画されていますが、表示されていません。
glBlendFunc(...) の両方の行を削除すると、シェーダーが再び表示されます (ただし、アルファ ブレンディングは失われます)。ただし、その関数を呼び出すたびに、シェーダーが機能しなくなったようです。
なぜこれが起こっているのかについてのアイデアはありますか?
glBlendFunc を削除した画像:
glBlendFunc を使用した画像:
シェーダー読み込みコード:
Vert シェーダー (非常にシンプル):
フラグ シェーダー:
opengl - OpenGL:glTexEnvi、glBlendFunc、および画面上のテキストメッセージ
私はムービープレーヤーを開発しており、OpenGLを使用してフレームと画面上のメッセージを描画しています。
私が使用するフレームを描画するには:
画面上のメッセージを描画している間、表示するテキストの表現を含む長方形を描画します。透明性を処理するために、テキストメッセージを描画する前にこれを行います。
ここで、明るさをリアルタイムで変更するオプションを提供したいと思います。これを達成するために私は使用しています:
明るさは正しく変更されていますが、テキストメッセージが間違っています。テキストの周りの長方形は、明るさがデフォルト値であり、テキストでさえ明るさ補正の影響を受ける場合にのみ透明になります。(つまり、テキストはデフォルトで白で、明るさを下げるとますます灰色になります)。
輝度調整は0-1の外側のアルファスペクトルを変更しますか?どうすればこの問題を解決できますか?
これがばかげているように聞こえたら申し訳ありませんが、OpenGLを使用するのは初めてです
glsl - シェーダーから歪んだピクセル値を受け取る WebGL レンダー バッファー
後処理効果を実行できるように、ポリゴンのシーンを複数のレンダー ターゲットにレンダリングしています。ただし、フラグメント シェーダーで設定している値がピクセル シェーダーに正確に反映されていないようです。
現在、パイプラインは次のようになっています。
- 基本的なポリゴンを (以下の単純なシェーダーを使用して) 中間バッファーにレンダリングします。
- バッファーを画面サイズのクワッドとして画面にレンダリングします。
WebGL インスペクター (http://benvanik.github.com/WebGL-Inspector/) を使用して中間バッファー (を使用して作成) を表示していますgl.createFrameBuffer()
。
ポリゴンを描画するとき、次のような非常に単純なフラグメント シェーダーがあります。
そして、これは私の描画呼び出しの前に:
これにより、バッファー内に正確に (255,0,0,128) の値を持つピクセルが作成されると予想されますが、実際には (255,0,0,64) の値を持つピクセルが作成されます。予想通りのアルファ。
このプログラムはかなり大きくて複雑なので、答えがすぐにわからない場合は、投稿を具体的な詳細で更新します.
ありがとう!
ios - cocos2d での描画アプリのアルファ ブレンディング
cocos2d を使用して単純な描画アプリを作成します。必要なブラシの形状 (円) の 32 ビット テクスチャをコードで作成し、単純な硬度グラデーション (アルファ = 1 は中央、アルファ = 0 は端に近い) を使用します。は明らかに正方形なので、アルファは円の外では 0 です。ユーザーが画面にタッチして描画すると、分離定数に従ってテクスチャが繰り返されます。
アルファブレンディングを有効にせずに試してみましたが、ひどい結果になりました。
(ccblendfunc){GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA} を使用すると、テクスチャの各インスタンス間に境界が表示されます。ドラッグする代わりにタップして各ポイントを手動で作成すると、この効果は発生しません。
そして (ccblendfunc){GL_SRC_ALPHA,GL_ONE} を使用すると良い結果が得られますが、端では色が一緒に追加されます。青と緑 = シアン、赤と緑 = 黄色と赤、青 = 紫
Photoshop の標準のように機能するブレンド モードを簡単に作成するにはどうすればよいでしょうか????
webgl - WebGL BlendFuncのバグまたは誤解?
黒の背景に半透明の黒の三角形を描画しようとしています。
これが私のサンプルです:http://codewithoutborders.com/posted/blend.html
blendFuncが設定され、有効になっています(151行目)。
バッファは黒にクリアされます(129行目):
シェーダーは半透明の黒で塗りつぶされます(10行目)。
ドキュメントには次のように記載されているので、三角形は黒になると思います
どちらが黒ですか?
では、灰色はどこから来るのでしょうか?
objective-c - OpenGL ESブレンド関数なので、色は常に背景に対して表示されます
iPadアプリで線を引くためにOpenGLES1.1を使用しています。ユーザーが色を選択できないように、背景色に関係なく、描画された線が常に画面に表示されるようにしたいです。この効果を生み出すブレンド機能はありますか?したがって、描画される線の色は、その下に既に描画されている色に基づいて変化するため、常に表示されます。
java - 遅延レンダリング パイプラインがラップトップ グラフィックス カードで機能しない、および奇妙な「モデル ゴースト」問題 (glBlendFunc)
編集:フラグメント シェーダーを変更して、実行ごとに 1 つのライトのみが可能になるようにすると、最初の問題が解決されました。私の2番目の問題はまだ残っています。
あなたが提供できる助けを前もって感謝します。ここ数週間、LWJGL レンダリング エンジンのディファード シェーディング パイプラインに取り組んでいます。私はすべてを期待どおりに動作させることができたと思っていましたが、プログラムを数人の知人に配布した後、問題が発生し始めました。これをできるだけ短くしようと思います。私と一緒にいてくれてありがとう。
タイトルにある 2 つの問題のうち最初のものから始めます。私のマシン (AMD Phenom II 965 および Nvidia GTX 480) では、レンダラーの最終製品はまさに期待どおりでした。(私は画像へのリンクを投稿しようとしましたが、私は新しいユーザーであるため、ハイパーリンクを 3 つ以上投稿することができませんでした。しかし、あるべきように見えたと言っても過言ではありません。)
これはまさに私が意図したことなので、レンダラーは正常に動作していました。友人(GT 440を使用していた)に送ったところ、同じ結果が得られました.
この後すぐに、ラップトップ (GT 540M を使用) を持っている友人にエンジンのビルドを渡しました。これは、レンダラーが生成したものです (FPS カウンターは無視してください。機能しません)。
http://i.imgur.com/DxxFEpy.png
明らかに、これは私が期待した結果ではありません。テストできた他のすべてのモバイル グラフィックス カードで同じ結果が得られました。1 週間以上机に頭をぶつけた後、glBlendFunc が呼び出されるライティング パスに問題を絞り込むことができました。私のコードは次のとおりです。
最初に気付くのは、クワッドを描画してから深度とカラー バッファーをクリアしていることです。それは私の次の質問で対処されるでしょうが、私の次の質問の問題がこの質問の問題と密接に関連していたとしても驚かないでしょう. 問題がこの方法にあることはほぼ確実 (99%) です。これは、1 つのライトのみをサポートし、遅延パイプラインをまだ使用しているエンジンの古いビルドでテストしたときに、テストしたすべてのコンピューターで完璧な結果を得ることができたからです。 . 繰り返しになりますが、レンダラーはテストしたすべてのデスクトップ グラフィック カードで動作しますが、ラップトップ グラフィック カードでは動作しません。この方法を除いて、ほとんどすべてを除外しました。GL_RGBA32f
またはそうでない内部フォーマットのテクスチャを使用して成功しなかったことは注目に値するかもしれませんGL_RGBA16f
レンダー ターゲットとして。誰かがこれを以前に見たことがありますか、または誰かが支援を提供できますか? 私は何も持っていないので、この時点でどこから問題を探し始めるか、誰かが何か考えていれば幸いです. 私は完全に自分で解決策を見つけることができませんでした。
次に、2 番目の問題と 2 番目の質問に進みます。最後のコード ブロックの冒頭に、シェーダーなしで画面上にクワッドを作成する数行のコードがありました。
私が知る限り、このコードはまったく何もしないはずです。しかし、クワッドの描画を削除すると、ウィンドウに次のように表示されます。
http://i.imgur.com/mkMsP0F.png
これを「ゴースト」以外に何と呼べばいいのかわかりませんでした。これはゴースト イメージのようなものだからです (少なくとも、私にはそう見えます)。MV マトリックスを回転させると、回転方向に歪み、最初のライト セット (7 個のアレイを使用) がそれを照らしますが、残りは実際のモデルを照らします。なぜこれが起こるのか説明できません。なぜなら、この画像を生成するコードは上記のコードとまったく同じでありglCallList(quadList);
、ループに入る直前に深度バッファとカラー バッファがまだクリアされていることを意味します。私はこの問題をまったく説明できません。何が問題なのか、それを修正する方法、または少なくとも何が問題なのかについての考えを誰かが知っていますか?
編集これは、テクスチャ座標を持つモデルでのみ発生することがわかりました。どうしてか分かりません。
編集各シェーダーで許可されるライトの量を 1 に制限すると、ゴーストが目立たなくなりますが、まだ存在するように見えます。したがって、これは、フラグメント シェーダーを 1 回実行するとこれらのゴーストが発生することを意味すると思います。
これら 2 つの問題のいずれかについて誰かが助けてくれてありがとう、それは大歓迎です。ご不明な点がございましたら、お気軽にお問い合わせください。返信に時間がかかる場合がありますが、できるだけ早く返信できるように努めます。
編集申し訳ありませんが、シェーダーコードを忘れました:GeometryPass vertex:
GeometryPass フラグメント:
LightPass フォン頂点:
LightPass フォン フラグメント
iphone - スクラッチオフ画像効果の反対を行う方法
ここにあるコードをコピーしました:
http://www.cocos2d-iphone.org/forum/topic/12557
「スクラッチオフ」効果を成功させるには、つまり、バーンスプライトが最上層の画像にアクセスすると、バーンスプライトがある場所で透明になり、その下の最下層が表示されます。
逆にやりたい。一番上のレイヤーを透明にして、バーンスプライトが訪れた場所で見えるようにしたい.
以下に、私がやろうとしたことをリストします。
バーンスプライトのブレンド機能を に変更しました{GL_ZERO, GL_ONE}
。これは正しいことだと思います。一番上のレイヤーが透明ではないため、機能するかどうかはわかりません。
に変更 [topLayer clear:0.0f g:0.0f b:0.0f a:1.0f]
しましたが [topLayer clear:0.0f g:0.0f b:0.0f a:0.0f]
、何も起こりませんでした。透明ではありませんでした。
その後、topLayer.sprite.opacity = 0.0;
部分的にしか透明に見えませんでした。まだ私が望んでいたものではありません。
助けてください。
cocos2d-iphone - GL 関数減算 Cocos2d
Cocos2d 2.x の特定のスプライトのブレンド モードを GL_FUNC_SUBTRACT に変更する方法を知っている人はいますか?
いくつか試してみましたが、基本的には白(または黒)の円を使用してアルファを非表示にするレイヤーマスクを作成しようとしています。