【问题标题】:OpenGL: glTexEnvi, glBlendFunc and On Screen Text MessagesOpenGL:glTexEnvi、glBlendFunc 和屏幕文本消息
【发布时间】:2011-09-25 09:13:08
【问题描述】:

我正在开发一个电影播放器​​,我正在使用 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 以外的 alpha 光谱吗?我该如何解决这个问题?

如果这听起来很愚蠢,我很抱歉,但这是我第一次使用 OpenGL

【问题讨论】:

  • 对不起..我不是英语,我认为 OSD 是正确的术语.. 当我修改亮度时,我在屏幕上显示一条文本消息,上面写着“亮度 = xx” 该消息是图像我从富文本创建的,它类似于字幕消息(即它具有透明背景)

标签: opengl alphablending brightness alpha-transparency glblendfunc


【解决方案1】:

请记住,OpenGL 是一个状态机。您可以设置 TexEnv 状态,绘制框架,然后将 TexEnv 状态恢复为正常状态,然后绘制 OSD。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多