2009-12-16 69 views
3

我正試圖在一個簡單的四邊形上疊加另一張圖像。我將底部圖像設置爲紋理單元0,然後將頂部圖像(具有可變阿爾法)作爲紋理單元1.單元2具有模式GL_DECAL,這意味着底部紋理應在alpha爲0時顯示,頂部當alpha爲1時紋理應該顯示。但是,只有頂部紋理顯示出來,底部紋理完全不出現。底部紋理應該顯示的只是白色。在iPhone上使用多紋理添加貼花紙

glGetError()不報告任何問題。任何幫助表示讚賞。謝謝!

glVertexPointer(3, GL_FLOAT, 0, boxVertices); 
glEnableClientState(GL_VERTEX_ARRAY); 

glClientActiveTexture(GL_TEXTURE0); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords); 
glClientActiveTexture(GL_TEXTURE1); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords); 

glClientActiveTexture(GL_TEXTURE0); 
glEnable(GL_TEXTURE_2D); 
glClientActiveTexture(GL_TEXTURE1); 
glEnable(GL_TEXTURE_2D); 

glClientActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, one.texture); 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

glClientActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, two.texture); 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 

glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 

回答

0

由於您使用的頂點數組,你需要設置你的紋理COORDS時使用glClientActiveTexture而不是glActiveTexture

+0

謝謝...現在我的頂部紋理顯示出來,但它仍然不正確。底部紋理完全不顯示(頂部紋理的alpha值爲0時只是白色)。我將用新信息編輯我的帖子。 – whooops 2009-12-16 06:58:57

+0

那麼......也許你應該閱讀glClientActiveTexture和glActiveTexture的文檔?客戶端控制頂點數組設置(客戶端狀態),glActiveTexture控制紋理圖像。所以將所有調用切換到glClientActiveTexture不是正確的事情(啓用/綁定/ texenv仍然由glActiveTexture控制) – Bahbar 2009-12-16 08:58:30

+0

啊,你是對的。謝謝。它現在有效。 – whooops 2009-12-16 16:16:24