2013-05-09 117 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