1

私はムービープレーヤーを開発しており、OpenGLを使用してフレームと画面上のメッセージを描画しています。

私が使用するフレームを描画するには:

glBegin(GL_QUADS);
// Draw the quads
glTexCoord2f(0.0f, 0.0f); 
glVertex2f (_movieRect.origin.x,_movieRect.origin.y + _movieRect.size.height); 

glTexCoord2f(0.0f, _imageRect.size.height);
glVertex2f (_movieRect.origin.x, _movieRect.origin.y );

glTexCoord2f(_imageRect.size.width, _imageRect.size.height);
glVertex2f (_movieRect.origin.x + _movieRect.size.width,_movieRect.origin.y); 

glTexCoord2f(_imageRect.size.width, 0.0f);
glVertex2f (_movieRect.origin.x + _movieRect.size.width, _movieRect.origin.y + _movieRect.size.height);

glEnd();

画面上のメッセージを描画している間、表示するテキストの表現を含む長方形を描画します。透明性を処理するために、テキストメッセージを描画する前にこれを行います。

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

ここで、明るさをリアルタイムで変更するオプションを提供したいと思います。これを達成するために私は使用しています:

double t = _brightnessValue;

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
if (t > 1.0f)
{
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,      GL_ADD);
    glColor4f(t-1, t-1, t-1, t-1);
}
else
{
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,      GL_SUBTRACT);
    glColor4f(1-t, 1-t, 1-t, 1-t);
}
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB,         GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB,         GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA,    GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA,       GL_TEXTURE);

明るさは正しく変更されていますが、テキストメッセージが間違っています。テキストの周りの長方形は、明るさがデフォルト値であり、テキストでさえ明るさ補正の影響を受ける場合にのみ透明になります。(つまり、テキストはデフォルトで白で、明るさを下げるとますます灰色になります)。

輝度調整は0-1の外側のアルファスペクトルを変更しますか?どうすればこの問題を解決できますか?

これがばかげているように聞こえたら申し訳ありませんが、OpenGLを使用するのは初めてです

4

1 に答える 1

1

OpenGLはステートマシンであることを忘れないでください。TexEnvの状態を設定し、フレームを描画してから、TexEnvの状態を通常に戻し、OSDを描画することができます。

于 2012-01-08T12:13:05.870 に答える