用透明纹理绘制,然后是不透明的颜色

时间:2013-05-09 17:05:45

标签: java opengl

我像这样初始化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);吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

没有需要在绘图时禁用混合。

当我需要绘制透明立方体(带纹理)时,我会调用glBlendFunc(GL_SRC_ALPHA, GL_ONE)

我通常在启用混合模式的情况下禁用DEPTH测试:

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

NeHe blending上有一个很好的教程。