2011-08-18 31 views
0

我正在嘗試使用OpenGL爲iPad製作2D遊戲。我一般都是新手,所以這個混合的東西是新的。在OpenGL ES中重疊2個透明Texture2Ds

我的繪製代碼如下所示:

static CGFloat r=0; 
r+=2.5; 
r=remainder(r, 360); 

glLoadIdentity(); 
//you can ignore the rotating and scaling 
glRotatef(90, 0,0, -1); 
glScalef(1, -1, 1); 
glTranslatef(-1024, -768, 0); 

glClearColor(0.3,0.8,1, 1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnable(GL_TEXTURE_2D); 
glEnable (GL_BLEND); 
glBlendFunc (GL_ONE,GL_ONE_MINUS_SRC_ALPHA); 

[texture drawInRect:CGRectMake(512-54, abs(sin(((r+45)/180)*3.14)*500), 108, 108)]; 
[texture drawInRect:CGRectMake(512-54, abs(sin((r/180)*3.14)*500), 108, 108)]; 

(「紋理」是具有透明背景的一個Texture2D) 所有我需要知道如何做的是讓這個圍繞着一個藍色的盒子紋理不掩飾另一個。

回答

0

聽起來像你只需要打開你最喜歡的圖像編輯器中的紋理圖像,並將藍色區域設置爲alpha通道中0%不透明(即0)。 GL_ONE_MINUS_SRC_ALPHASRC_ALPHA部分表示源紋理中的alpha值。

機會是你正在使用32位顏色,在這種情況下,你將有四個通道,紅色,綠色,藍色和阿爾法8位。

+0

我100%確定圖像(http://i55.tinypic.com/34rsv9l.png)是完全透明的。 – milo

+0

你說我可能使用32位顏色。這會影響到什麼嗎? – milo

+0

不錯,32位應該不錯。你說你看到藍色,你的意思是你看到你的背景藍色的顏色應該是透明的而不是另一個?如果是這種情況,我懷疑這是你的抽籤順序。有了透明度,你需要首先渲染最遠的多邊形,所以當新的透明區域與背景混合時,後面的透明區域已經在幀緩衝區中,否則你會與背景混合,然後在背後畫另一個但它會被應該透明的區域所掩蓋。 –