OpenGL ES 2.0 を使用して、次のシーンを作成しています。
画面全体に背景画像を描画し、その上に別のオーバーレイ画像を描画してフェードインおよびフェードアウト (アルファ変化)
Screen blend
また、オーバーレイと背景テクスチャをブレンドする ために " " を使用する必要があります。
そこで、2 つのテクスチャをブレンドするシェーダーを作成しました。ユニフォーム ( randomAlpha
) を使用して、オーバーレイ テクスチャのアルファを時間の経過とともに変更し、フェード アニメーションを作成できると考えましたが、次のコードではうまくいきません。オーバーレイ テクスチャの不透明度変わりません!
オーバーレイと背景テクスチャをブレンドするために使用できる「アルファ ブレンド」があることは知っていますが、問題は、最終オーバーレイ (不透明度の変更後) で背景を「スクリーン ブレンド」ではなく「スクリーン ブレンド」とブレンドすることです。アルファブレンド」
これは私のフラグメントシェーダーのメインメソッドがどのように見えるかです:
void main()
{
mediump vec4 background = texture2D(backgroundTexture, backgroundCoords);
mediump vec4 overlay = texture2D(overlayTexture, overlayCoords);
overlay.a = randomAlpha;
// add overlay to background (using screen blend)
mediump vec4 whiteColor = vec4(1.0);
gl_FragColor = whiteColor - ((whiteColor - overlay) * (whiteColor - background));
}
明らかに、ここで重要な何かが欠けています..
テクスチャの不透明度を変更するにはどうすればよいですか? フェード効果を作成するにはどうすればよいですか?