2012-07-25 50 views
2

我的纹理本身有一个透明的背景,我想按原样渲染它。如何渲染纹理而不受glColor的影响?

glEnable(GL_TEXTURE_2D); 
glEnable(GL_BLEND); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glPushMatrix(); 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

glTranslatef(x, y, 0.0f); 
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); 
glVertexPointer(2, GL_FLOAT, 0, undoVertCoord); 
glTexCoordPointer(2, GL_FLOAT, 0, undoTexCoord); 
glBindTexture(GL_TEXTURE_2D, texUndo); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

问题出在glColor4f。该功能似乎覆盖了纹理的透明度,使部分在透明时不透明。但是,如果我给alpha值为0的glColor4f,整个纹理变得透明。你可以渲染一个忽略glColor4f的纹理,渲染纹理吗?或者以不影响alpha值的方式?

+0

glColor4f不应该'覆盖'纹理的颜色。默认情况下,进行调制,这意味着用的glColor4f(1,1,1,1),你将重现纹理色彩准确。如果透明度破坏,那么与glColor无关的透明度有其他问题。你确定alpha通道正在为你的纹理正确创建吗? – Tim 2012-07-25 20:59:53

回答

8

你的GL_TEXTURE_ENV_MODE设置为?尝试将其设置为GL_REPLACE

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);