2013-05-09 120 views
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(); 

如果我删除上面的初始化,四ap梨,但我的纹理不再透明。

我在这里做错了什么?

编辑:我应该打电话glDisable(GL_BLEND);每当我想画一些不是纹理?

+0

如果您想禁用混合,您应该调用'glDisable(GL_BLEND)'。但是,'glColor3'隐式设置alpha值为1,所以不清楚为什么你的代码不起作用。你在做什么?也许你可以发布绘制纹理对象的代码。 – 2013-05-09 20:45:29

回答

1

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

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

-1

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

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

我在与混合模式绘图通常关闭深度测试启用:

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

讷河blending一个很好的教程。

+0

他没有说明他是否希望四方透明。如果不是,则可以保存填充率禁用混合。如果他希望两者都是透明的,那么你的选择是好的:) – Trax 2013-05-09 17:28:58

+1

我认为他提到的纹理被应用于正在绘制的东西。 – karlphillip 2013-05-09 18:25:56

+0

是的,我想也一样,但他没有传递纹理坐标,所以可能是默认为(0,0),那里的纹理可能有alpha = 0.0我认为他需要提供更多关于他想要存档的信息我们不需要猜测太多;) – Trax 2013-05-09 18:58:51