2

OpenGLで背景の上に画像をレンダリングする必要があり、Photoshopの「カラー覆い焼き」と同じ結果を得ようとしていますが、それができません。

今私はやっています:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// background
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, background);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0, 0.0);
...
glEnd();
glDisable(GL_TEXTURE_2D);

// image
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, image);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0, 0.0);
...
glEnd();
glDisable(GL_TEXTURE_2D);

背景はアルファチャネルのないtgaです。画像はアルファチャンネル付きのtgaです。

これにより、背景にアルファが付いた画像がレンダリングされますが、明るすぎます。

私はそれが次のように簡単であるべきだと読みました:

glBlendFunc(GL_ONE, GL_ONE);

ただし、アルファチャネルがあるにもかかわらず、画像は白い正方形としてレンダリングされます。

明らかに私は何か間違ったことをしている。

4

2 に答える 2

3

ブレンドを使用して、Photoshopの「カラー覆い焼き」効果に相当するものを取得することはできません。これは、標準のブレンディングロジックを使用して表現できるよりも複雑な数学関数です。したがって、それを機能させるには、プログラムによるブレンド方法を考え出す必要があります。

于 2012-09-16T23:43:17.780 に答える
0

GLブレンド関数で色をかわす方法があります。これは、そのミキシングモードのPhotoshopバージョンに似ていますが、フォトショップの「カラーダッジ」よりも暗いだけです。このタイプの関数を使用する必要があります。

glBlendFunc(GL_DST_COLOR, GL_ONE);
于 2016-02-23T11:11:58.970 に答える