低OpenGL alpha值裁剪

时间:2015-03-15 15:26:22

标签: opengl alphablending awesomium opengl-1.x

我已经在游戏过程中注入了一个DLL来制作叠加界面,但问题是alpha值被“裁剪”(根本不渲染)

我测试了几个alpha值,如果alpha低于0.3,它似乎会失败。

为了说明发生了什么,我试图渲染的图像是:

Transparency test

和渲染图像的游戏是:

Game render

这里到底发生了什么?它的当前状态是opengl?我是API的新手,我不知道为什么会这样。

更多信息:

使用以下内容从缓冲区创建纹理:

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, this->width, this->height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, this->buffer);

我从Awesomium收到此缓冲区,值正确...我已检查过alpha值。

渲染是使用此功能完成的(我也尝试过调用游戏的纹理渲染功能,但同样的问题也会发生):

void DrawTextureExt(int texture, float x, float y, float width, float height)
{
    glPushAttrib(GL_ALL_ATTRIB_BITS);
    {
        glPushMatrix();
        {
            glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

            glEnable(GL_BLEND);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            // glBlendFunc(GL_ONE, GL_ONE); << tried this too.. ugly results

            glEnable(GL_TEXTURE_2D);
            glBindTexture(GL_TEXTURE_2D, texture);

            glTranslatef(x, y, 0.0);

            glRotatef(0, 0.0, 0.0, 1.0);
            glTranslatef(-x, -y, 0.0);

            glBegin(GL_QUADS);
            {
                glTexCoord2f(0, 0); glVertex2f(x, y);
                glTexCoord2f(0, 1); glVertex2f(x, y + height);
                glTexCoord2f(1, 1); glVertex2f(x + width, y + height);
                glTexCoord2f(1, 0); glVertex2f(x + width, y);
            }
            glEnd();

            glBindTexture(GL_TEXTURE_2D, 0);
        }
        glPopMatrix();
    }
    glPopAttrib();
}

1 个答案:

答案 0 :(得分:1)

对我来说听起来就像你正在进行的程序一样是在它结束时使用alpha测试的渲染功能(这很有意义)并在结束时启用alpha测试,然后你就可以了碰上了。试试如果你在钩子中首先禁用alpha测试会发生什么。 (glDiable(GL_ALPHA_TEST))。