0

我像这样初始化OpenGL以使透明纹理透明:

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

我这样画我的纹理:

glPushMatrix();
    //translate
    //neutralize colors
    //bind texture
    //vertex points
glPopMatrix();

但是当我尝试在之后立即绘制一个四边形时,它不会出现:

glPushMatrix();
{
    glTranslatef(x, y, 0);
    glColor3f(1f, 0f, 0f);
    glBegin(GL_QUADS);
    {           
        glVertex2f(0, 0);
        glVertex2f(10, 0);
        glVertex2f(10, 10);
        glVertex2f(0, 10);
    }
    glEnd();
}
glPopMatrix();

如果我删除上面的初始化,会出现四边形,但是我的纹理不再透明。

我在这里做错了什么?

编辑:glDisable(GL_BLEND);每当我想绘制不是纹理的东西时,我应该打电话吗?

4

2 回答 2

1

您需要在绘制四边形之前禁用混合。

编辑:你能发布更多代码吗?问题可能出在其他地方,例如,如果您在绘制四边形之前没有禁用纹理。

于 2013-05-09T17:13:45.433 回答
-1

绘图时无需禁用混合。

glBlendFunc(GL_SRC_ALPHA, GL_ONE)当我需要绘制透明立方体(带有纹理)时,我会打电话。

我通常在启用混合模式的绘图时禁用深度测试:

    glEnable(GL_BLEND);                // Turn Blending On
    glDisable(GL_DEPTH_TEST);          // Turn Depth Testing Off

NeHe有一个很好的混合教程。

于 2013-05-09T17:24:23.280 回答