如何使用带Alpha通道的图像?从现在开始我试过这个:
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
width, height,
0,
GL_BGRA,
GL_UNSIGNED_BYTE,
bits);
使用此opengl命令:
glBindTexture(GL_TEXTURE_2D, texgun5);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3f(gun5[0], gun5[1], gun5[2]);
glTexCoord2f(1.0, 0.0);
glVertex3f(gun5[3], gun5[4], gun5[5]);
glTexCoord2f(1.0, 1.0);
glVertex3f(gun5[6], gun5[7], gun5[8]);
glTexCoord2f(0.0, 1.0);
glVertex3f(gun5[9], gun5[10], gun5[11]);
glEnd();
glDisable(GL_BLEND);
我正在使用加载了Freeimage的png图像,但是trasparent像素都是黑色的,错误在哪里?
答案 0 :(得分:1)
我想你忘了在纹理环境中指定混合。在glTexParameteri调用后立即插入:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
答案 1 :(得分:0)
透明像素为白色,因为您指定的颜色为白色。根据{{1}}参考GL_DECAL
格式,此处应用的公式为RGBA
,现在当您的纹理完全透明时,Cp * (1- As) + Cs*As
将变为As
导致最终颜色值等于0
,这是Quad(白色)的颜色。
我认为在这种情况下,您应该使用Cp
答案 2 :(得分:0)
纹理已正确加载,但未显示。使用glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
代替glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
如果这还不够,请尝试glDepthMask(GL_FALSE);
查看您是否至少有alpha值。如果那还不够,试试
glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_NOTEQUAL, 0.0 );