2013-07-22 80 views
0

我爲我的遊戲使用OpenGL-ES 1.1。除了當我繪製99%透明的紋理時,alpha混合對我來說工作得非常好。例如,如果我有一個512x512的圖像,中間只有一條2px黑線。這些紋理在android上繪製爲絕對白色。OpenGL-ES主要是透明紋理繪製白色

我的混合功能:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 

任何幫助將不勝感激。

編輯:這是我如何設置紋理

glEnable(GL_TEXTURE_2D); 
glGenTextures(1, &textureCreated); 
glBindTexture(GL_TEXTURE_2D, textureCreated); 
maOpenGLTexImage2D(image); 

// Set texture parameters. 
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

回答

0

不能使用的OpenGL ES紋理Android的Bitmap類,除非它們是完全不透明的。這是因爲Bitmap類爲Porter-Duff混合存儲了預倍乘格式的像素,這與OpenGL ES混合不兼容。這篇文章給出了更多的細節:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1/

+0

那麼有什麼辦法呢? – user2238284

+0

使用本機代碼無論如何您都不需要Bitmap類。使用Java,您可以使用GLES11封裝器調用GLES11.glTexImage2D()並傳入ByteBuffer以避免使用GLUtils,PNGDecoder和Bitmap。 – ClayMontgomery

+0

感謝您的回覆。我添加了如何設置gl紋理的代碼。函數maOpenGLTexImage2D是一個等效於glTexImage2D()的mosync sdk函數。你能告訴我如何修改代碼嗎?對不起,我剛剛學習opengl – user2238284