2

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));

  } 

明らかに、ここで重要な何かが欠けています..
テクスチャの不透明度を変更するにはどうすればよいですか? フェード効果を作成するにはどうすればよいですか?

4

1 に答える 1