我試圖在彩色四邊形上方繪製部分透明的紋理,以便顏色透過透明部分,製作輪廓。這是代碼:OpenGL中的透明紋理不能代替四角alpha
// Setup
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
// (...)
// Get image bits in object 't'
glBindTexture(GL_TEXTURE_2D, textureIDs[idx]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
// (...)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
// Underlying coloured quad
glColor4d(0.0, 1.0, 0.0, 1.0);
glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_QUADS);
glVertex3d(coords11.first, coords11.second, -0.001);
glVertex3d(coords12.first, coords12.second, -0.001);
glVertex3d(coords21.first, coords21.second, -0.001);
glVertex3d(coords22.first, coords22.second, -0.001);
glEnd();
// Textured quad
glColor4d(1.0, 1.0, 1.0, 0.5);
glBindTexture(GL_TEXTURE_2D, textureIDs[castleTextureIndices[0]]);
glBegin(GL_QUADS);
glTexCoord2d(0.0, 0.0); glVertex3d(coords11.first, coords11.second, 0);
glTexCoord2d(1.0, 0.0); glVertex3d(coords12.first, coords12.second, 0);
glTexCoord2d(1.0, 1.0); glVertex3d(coords21.first, coords21.second, 0);
glTexCoord2d(0.0, 1.0); glVertex3d(coords22.first, coords22.second, 0);
glEnd();
紋理是黑色的,除非它具有城堡的輪廓;該部分是透明的(和白色)。因此,預期的行爲是一個帶有綠色輪廓的黑色矩形。我得到的卻是一個綠色的矩形白色輪廓:
與對紋理四爲0.5 Alpha的。如果我把它設置爲1.0,我會回覆沒有透明度的紋理,就像(哦,不能將第二個截圖作爲鏈接發佈;它在s330.photobucket.com/albums/l412/TWBWar/?action =查看& current = replace10.png)。隨着alpha爲0,我得到一個綠色的矩形。因此,在我看來,紋理四邊形正在使用glColor4d設置的alpha值進行混合,而不是來自紋理的值,這是我對GL_REPLACE的期望。 (我也嘗試過使用GL_DECAL和GL_MODULATE,但我無法獲得我想要的行爲。)任何人都可以告訴我如何讓OpenGL使用紋理而不是四邊形進行混合?
謝謝,那就是問題所在。 – 2011-01-06 03:31:05