當我嘗試在對象上顯示紋理時,它可以正常工作,但僅禁用GL_BLEND
。當我啓用混合時:OpenGL - 紋理在啓用混合時不可見
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
紋理不再可見。黑屏。 我真的不知道發生了什麼事。其相同的JPG和PNG與alpha通道。
EDIT(詳細信息):
那麼,它很難粘貼代碼(對象,對象eveywhere和巨大的),但它是這樣的:
//初始化 - 我評論一切
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//製備紋理
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
int Mode = GL_BGR;
int nOfColors = image->format->BytesPerPixel;
if (nOfColors == 4) {
if (image->format->Rmask == 0x000000ff)
Mode = GL_RGBA;
else
Mode = GL_BGRA;
} else if (nOfColors == 3) {
if (image->format->Rmask == 0x000000ff)
Mode = GL_RGB;
else
Mode = GL_BGR;
}
// glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexImage2D(GL_TEXTURE_2D, 0, nOfColors, image->w, image->h, 0, Mode, GL_UNSIGNED_BYTE, image->pixels);
glDisable(GL_TEXTURE_2D);
//繪製
glColor4f(1.0f,1.0f,1.0f,1.0f);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _i);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(x, y);
glTexCoord2f(1, 0);
glVertex2f(x + width, y);
glTexCoord2f(1, 1);
glVertex2f(x + width, y + height);
glTexCoord2f(0, 1);
glVertex2f(x, y + height);
glEnd();
glBindTexture(GL_TEXTURE_2D, NULL);
glDisable(GL_TEXTURE_2D);
EDIT2
「黑屏」可能是有點混亂 - 我的意思是不顯示任何內容(我的背景是黑色的,但它不事關) - 如果我把混合過我在屏幕上得到質地不錯的 - 只與背景顏色混合
如果你'glBlendFunc(GL_SRC_ALPHA,GL_ONE)會發生什麼;'?你有任何GL_DST_ALPHA設置? – sqreept
這需要更多的信息。你還在畫什麼?這個紋理對象是場景中唯一的東西,還是當你繪製時,所有的東西都會消失?什麼是你的紋理的alpha? – Tim
嘗試在渲染紋理之前調用'glColor4f(1.0,1.0,1.0,1.0);'。 –