問題タブ [blending]
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.
actionscript-3 - オブジェクトを互いにブレンドするが、バックグラウンド アクション スクリプト 3 とブレンドしない
互いにブレンドしたいオブジェクト (DisplayObjects として表される) がいくつかあります。
ただし、これらのオブジェクトの背後には、ブレンドに関与させたくない背景があります。
したがって、基本的には、これらのオブジェクトを互いにブレンドし、その後、このブレンドの結果を新しい DisplayObject として使用します (たとえば、ランダムに色付けされた背景の上に配置します)。
だから私が持っているものは次のとおりです:
私が試した最初の試みは、ブレンドモードが同じ DisplayObjectContainer に含まれるすべてのオブジェクトに対してのみ相対的であることを期待して、これらのオブジェクトを共通の DisplayObjectContainer に入れることでしたが、そうではないようです。
だから、それは私をどこにでも連れて行った。どんな助けでも大歓迎です。
編集: 最後のコード スニペットで DisplayObjectContainer を Sprite に変更しました
c++ - OpenGLでフェードトゥブラック効果を作る方法は?
フェードトゥブラック効果を実現しようとしていますが、その方法がわかりません。私はいくつかのことを試しましたが、openglの仕組みが原因で失敗しました
それがどのように機能するかを説明します:
1 つの白いピクセルを描画し、それを各フレームで 1 ピクセルの方向に移動すると、各フレームで画面ピクセルの R/G/B 値が 1 つ少なくなり (範囲は 0 ~ 255)、したがって 255 フレーム後に白いピクセルは完全に黒くなります。したがって、白いピクセルを移動すると、グラデーションの軌跡が白から黒に均等に移動し、前のピクセルの色と比較して 1 色の値が異なります。
編集:これを行うシェーダー以外の方法を知りたいのですが、それが不可能な場合は、シェーダーの方法も受け入れることができます。
編集 2:このあたりで混乱が生じているので、シーン全体に黒い透明なクワッドを描画することで、この種の効果を既に実行できることを伝えたいと思います。しかし、これは機能したいので機能しません。ピクセルが取得できる暗さには制限があるため、次の理由により、ピクセルの一部が常に「表示」されたままになります (ゼロの色値を超える)。1*0.9 = 0.9 -> 再び 1 に丸められるなど「これはトレイルを短くすることによるものですが、トレイルの長さを可能な限り調整できるようにしたいので、バイリニア(正しい言葉であれば)補間の代わりに線形が必要です(したがって、常に各rから-1を減らします。パーセント値を使用する代わりに、0 ~ 255 スケールの g,b 値)。
Edit3:まだいくつかの混乱が残っているので、はっきりさせておきます: glClear() から GL_COLOR_BUFFER_BIT を無効にすることによって行われる効果を改善したいのですが、画面上のピクセルを永遠に見たくないので、時間内にそれらを暗くしたいです、各ピクセルの色の値を 1 (0 ~ 255 スケール) 減らすシーンの上にクワッドを描画します。
Edit4:簡単にします。これにはOpenGLメソッドが必要です。効果は、電力、メモリ、または帯域幅をできるだけ少なくする必要があります。この効果は、画面のピクセルをクリアしなくても機能するはずなので、シーンに透明なクワッドを描画すると、以前に描画されたピクセルが暗くなります。しかし、上記で何度か説明したように、うまく機能しません。大きなNOは次のとおりです。1)画面からピクセルを読み取り、forループで1つずつ変更してからアップロードし直します。2) トレイル効果をエミュレートするために、異なる暗さでオブジェクトを X 回レンダリングします。3) ピクセルを黒くしないため、色の値を乗算することはできません。ピクセルは特定の明るさで画面に永久に表示されます (上記の説明を参照)。
c++ - テクスチャの色をその下の色に単純な乗算でブレンドする方法は?
だから私はテクスチャの色をその下の色で乗算したいのですが、これは glBlendFunc() でどのように行うことができますか?
たとえば、テクスチャの色 (0.31、0.51、0.124) があり、その下に色 (0.83、0.64、0.12) がある場合、結果の色は 0.31*0.83、0.51*0.64、0.124*0.12 になります。これを行う方法?
ipad - OpenGLESで2つの透明なTexture2Dをオーバーラップさせる
OpenGLを使ってiPad用の2Dゲームを作ろうとしています。私は一般的にOpenGLに慣れていないので、このブレンドは新しいものです。
私の描画コードは次のようになります。
(「テクスチャ」は背景が透明なTexture2Dです)テクスチャの周りの青いボックスが他のボックスを覆わないようにする方法を知る必要があります。
function - 2 つの関数の混合 (一方は逆関数)
まず考え方を説明します。実際の数学の問題は、スクリーンショットの下にあります。音楽的な目的のために、イベントの位置が数学関数 F(X) によって変換されるグルーブ アルゴリズムを構築しています。位置は溝の範囲内で正規化されるため、基本的には 0 から 1 の間の値を処理します (これにより、溝の曲線の形成が容易になります。唯一の制限は x'>=0 です)。このグルーブ アルゴリズムは、任意のイベント位置を受け入れ、タイムライン ノート トラックのようなデータ構造から静的ノートをフィルタリングすることによっても機能します。特定の範囲 (オーディオ ブロック サイズ) でイベントをフィルタリングするには、トラック内のノートを見つけてグルーブ スペースに変換する逆グルーブ関数が必要です。ここまでは順調ですね。できます!
つまり、(y=x) にミラーリングされているという事実のために、逆関数を使用します。したがって、値 x を差し込んで y を取得できます。この y は明らかに逆関数にプラグインして、最初の x を再度取得できます。
問題: グルーブを別のグルーブにブレンドできるようにしたいのですが、通常の線形 (ヒント ヒント) ブレンド コードが期待どおりに動作しません。簡単にするために、最初に y=x にブレンドしようとしました。
alpha=1 の場合、完全な曲線が得られます。alpha=0 の場合、直線が得られます。しかし、アルファが 0 から 1 の間の場合、B(x) と iB(x) はミラーリングされなくなり (近いが十分ではありません)、F(x) と iF(x) は引き続きミラーリングされます。
そのための解決策はありますか(曲線を線分に量子化する以外に)? 注目すべきテーマはありますか?
visual-c++ - アルファブレンディングがオルソで機能しないのはなぜですか?
これは、3Dオブジェクトを描画した後に正投影をオンにする方法です。
そして、これは私が3Dオブジェクトを描画した後、オルソでテクスチャをブレンドして描画する方法です。
Quad1はQuad2より少し大きく、Quad2の一部をカバーしています。両方のテクスチャには、RGBAとしてのアルファチャネルがあります。
問題は、Quad1とQuad2が3Dオブジェクトをアルファで正しくオーバーレイしますが、Quad1のアルファがQuad2の上にある場合は機能しないことです。RGBのみのようにQuad2の上に描画します。
どうすればこの問題を解決できますか?
opengl - 複数のテクスチャでアルファ ブレンディングを行うと、色付きの境界線が残る
次の問題: 2 つのテクスチャがあり、これら 2 つを新しいテクスチャに結合したいと考えています。したがって、一方のテクスチャが背景として使用され、もう一方がオーバーレイされます。オーバーレイ テクスチャは glClearColor(1.0, 1.0, 1.0, 0.0) で初期化されています。オブジェクトはテクスチャ上に描画され、これらのオブジェクトにはアルファ値があります。
2 つのテクスチャをブレンドすると、オブジェクトの周りに白い境界線が残ります。境界線は、2 番目のテクスチャの背景色が白であることに由来しますね。
オーバーレイ テクスチャの背景色を考慮する必要がないアルファ ブレンディングを使用するにはどうすればよいですか?
image - 画像を順次平均化する
これを尋ねるより良い場所があるかもしれないことは承知していますが、皆さんから貴重なフィードバックが得られると思います.
白いカバスに黒で形を描くよう求められます。次に、それらの描画が移動平均に追加されます。絵に共通する部分を見せて、他の絵と違う部分を消したいです。
私の 2 つの問題は、ImageMagick を使用して画像を処理していることです。つまり、一度に 2 つの画像の合成しか作成できません。これで、現在の合計イメージと、追加する最新のイメージが得られました。この方法では本当の平均を得ることができません。
第二に、特に異なる不透明度が関係している場合、ブレンドモードを完全には理解していません。どれが一番使いやすいかわかりません。
ios - 深度テストを使用したOpenGLポイントスプライト-ブレンディングの問題?
ポイントスプライトを(iOSでOpenGL ES 2.0を使用して)ユーザーの描画ストロークとしてレンダリングしています。これらのポイントを頂点バッファオブジェクトに保存しているので、スプライトが描画に送信されたときに正しい順序で表示されるように、深度テストを実行する必要があります。
次のスクリーンショットに示すように、これらの描画ストロークをレンダリングすると、奇妙な効果が見られます。
青のストロークの端の周りの背景色の「境界線」に注意してください。ここでは、緑の上に描画されています。ユーザーは緑のストロークの後に青のストロークを描画しましたが、VBOが再描画されると、青のストロークが最初に描画されます。緑のストロークを描くことになると、深度テストが開始され、青のストロークの後ろにあるはずであることがわかります。これもある程度の成功を収めています。ある種のブレンディングの問題であるように見えますか、それともフラグメントシェーダーで色を誤って計算することに関係していますか?すべてのストロークのエッジは透明である必要がありますが、フラグメントシェーダーは、それらのフラグメントを処理するときに、それを背景テクスチャと組み合わせているように見えます。
私のアプリでは、深度レンダーバッファーを作成し、glEnable(GL_DEPTH_TEST)
を使用して呼び出しましたglDepthFunc(GL_LEQUAL)
。glDepthMask()
私は無駄に実験しました。ブレンディングはに設定されglBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
、ポイントスプライトカラーは事前に乗算されたアルファ値を使用します。描画ルーチンは非常に単純です。
- レンダリングからテクスチャへのFBOをバインドします。
- 背景テクスチャを描画します。
- (多数のVBOから)ポイントスプライトを描画します。
- このFBOのテクスチャをメインフレームバッファに描画します。
- メインフレームバッファを提示します。
編集
これが描画ルーチンからのコードです。
描画前のセットアップ状態:
描画ルーチン:
助けてくれてありがとう。
ios - 透明度のある CCSprite を使用して CCRenderTexture の不透明な領域のみに描画できるように、openGL ブレンディングを設定するにはどうすればよいですか?
使用したブレンディングが原因で、透明度を含むテクスチャを含む CCRenderTexture への描画に問題があります。
私が描いているスプライトには、次のブレンド機能があります。
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA)
.
描画先のレンダリング テクスチャにはブレンド機能があります。
glBlendFuncSeparate(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA)
.
レンダー テクスチャは、ほとんどが透明で、完全に不透明な領域がいくつかあるように設定されています。上記のブレンド関数を使用すると、透明な領域を描画せずに、完全に固体のスプライトで描画することができます。
描画するスプライトを変更して透明度を含めようとすると、問題が発生します。レンダリング テクスチャの不透明な領域を「消去」する傾向があります。理想的には、描画するスプライトの透明な領域が影響を与えないようにしたいと考えています。openGL のブレンディングの第一人者が私にガイダンスを与えることができるかどうか疑問に思っていましたか?
明確にするために、達成しようとしている最終的な効果は、いくつかの透明な領域を含むスプライトをレンダリング テクスチャに描画できるようにすることです。スプライトの透明な領域はレンダリング テクスチャに描画されません。スプライトの不透明領域は、レンダー テクスチャの不透明領域上にある場合にのみ、レンダー テクスチャに描画する必要があります。