0

グロー効果を作成しようとしています。OpenGL ES 3.0 を使用しています。ステンシル バッファを使用してオブジェクト (立方体) のアウトラインを作成できるので、問題はありません。また、FBO を使用してこのアウトラインをテクスチャにレンダリングし、ボックス ブラーまたはガウス ブラーを使用してブラー効果を実現することもできます。ただし、私が問題を抱えている部分は、結果として生じるぼやけたグローの輪郭 (つまり、後処理された画像) を元のオブジェクトと組み合わせて、立方体のエッジを並べることです。ぼやけたテクスチャを画面にブライトすることはできますが、これは低解像度のぼかし高解像度の立方体にコピーします。つまり、立方体が見えなくなり、ぼやけた輪郭のテクスチャだけになります。

質問: 両方を画面上の 1 つの画像に結合するにはどうすればよいですか?

両方の画像からなる合成画像を作りたいです。

おそらく簡単なことですが、それを行う方法が思い浮かびません。疑似コードが役立ちます。

ありがとう

4

1 に答える 1

1

これらの 2 つの画像の加算ブレンドが必要だと思いますよね。2 つのアプローチが思い浮かびます。加算ブレンドを使用する場合、値が合計されると自動的に明るい色になることに注意してください。

1) 元の立方体とぼかした立方体の両方がテクスチャにある場合は、次のようにフラグメント シェーダーを使用して単一の画面サイズのクワッドをレンダリングします。

#version 300 es

precision mediump float;

uniform sampler2D originalTexture;
uniform sampler2D blurTexture;

in vec2 texCoord;

void main()
{
    vec4 originalColor = texture(originalTexture, texCoord);
    vec4 blurColor     = texture(blurTexture,     texCoord);
    gl_FragColor = originalColor+blurColor;
}

このアプローチの利点は、色に乗数を簡単に追加して効果を微調整できることです。たとえば、グローが多すぎる場合はトーンダウンします。

または、ジオメトリからキューブを通常どおりにレンダリングすることもできます。その場合は、ブラー テクスチャからフラグメント シェーダにテクスチャ ルックアップを追加し、カラー値を追加するだけです。

2) 固定関数ブレンディングを活用できます。最初に元の立方体を通常どおりにレンダリングしてから、ブレンド モードを設定します。

glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);

これで、ブラー テクスチャとレンダリングを同じレンダー ターゲットにバインドすると、それらが重なり合い、効果が得られるはずです。これにより、上記のシェーダーと同等の結果が得られます。glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE)あまりにも使用して、結果の明るさを減らすことができます。このアプローチは、シェーダー アプローチよりも高速である必要があります。

ブレンディングが glBlitFramebuffer で機能するかどうかはわかりませんが、試してみる価値はあると思います。これがうまくいくことを願っています!

于 2013-10-03T06:01:08.670 に答える