2013-07-22 79 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