2

こちらの画像をご覧ください。

期待されるイメージと要件

  1. クリッピング四角形をアニメーション化できる一方で、テクスチャのクリップされた詳細を表示したいので、画像を前もってトリミングすることはできません。画像の位置もアニメーションします。
  2. 背景の前に表示したいと思います。背景は色またはテクスチャそのものです。
  3. 画像と背景の両方を不透明度 < 1.0 で組み合わせて宛先にブレンドしたいと思います。
  4. ここでの実際の要件は、一時バッファーを回避して、1 つのステップでレンダリングすることです。そのためには明らかに(単純な)シェーダーが必要です。

私がすでにこれを達成しようとしたこと:

  • 最初に背景をレンダリングし、次に不透明度が 1 未満の画像をそれぞれレンダリングします。ここでの問題: 背景が画像を通して輝いてしまいます。画像自体が不透明な場合、背景を表示することはできません。

  • opacity = 1 を使用して一時バッファーにレンダリングし、このバッファーを opacity < 1 で宛先にレンダリングする場合に機能しますが、これにはより多くの (多すぎる) リソースが必要です。

  • シェーダーで 2 つのテクスチャ (背景、画像) を結合し、それぞれのテクスチャ座標を異なる変換行列で変換できます。ここでの問題は、画像をクリップできないことです。レンダリングされたジオメトリは、2 つの三角形で構成される単純な四角形です。

誰かが正しい方向に私をほのめかすことができますか?

4

1 に答える 1

2

基本的にこれをレンダリングしようとしています。(背景とブレンドされた画像)目的地とブレンドされた

括弧内の部分は、シェーダーで実行できます。宛先とのブレンドは、glBlendFuncで行う必要があります。これは、宛先がピクセルシェーダーで使用できないためです。

シェーダーで画像をクリップし、テクスチャ座標をアニメーション化して回転させる方法を知っているようです。

チャイルドレブが付いた画像をImageA、灰色の正方形のImageBと呼びましょう

シェーダーで各ピクセルでこれを生成する必要があります。

outputColor.rgb = ImageA.rgb * ImageA.a + ImageB.rgb * (1.0 - ImageA.a);

これにより、2つの画像が希望どおりにブレンドされます。次に、ピクセルシェーダーからのアルファ出力を目的のアルファ(<1.0)に設定します。

outputColor.a = <some alpha value>

次に、シェーダーを使用してクワッドをレンダリングするときに、ブレンド関数を次のように設定します。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
<draw quad>
于 2012-10-16T01:03:06.673 に答える