1

我正在開發一個電影播放器​​,我使用OpenGL繪製幀和屏幕上的消息。OpenGL:glTexEnvi,glBlendFunc和屏幕上的文本信息

要畫我使用框架:

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以外的alpha光譜?我怎麼解決這個問題?

我很抱歉,如果這聽起來很蠢,但它是第一次,我使用OpenGL

+0

什麼是「OSD消息」? –

+0

對不起。我不是英語,我認爲OSD是正確的術語.. 當我修改亮度時,我會在屏幕上顯示一條文字信息,說「亮度= xx」 該信息是我從富人文字,它與字幕消息類似(即它有一個透明的背景) – Andrea3000

回答

1

記住,OpenGL是一個狀態機。您可以設置TexEnv狀態,繪製框架,然後將TexEnv狀態更改回正常狀態,然後繪製OSD。