Opengl es OpenGL将大部分透明纹理绘制为白色

Opengl es OpenGL将大部分透明纹理绘制为白色,opengl-es,Opengl Es,我在游戏中使用OpenGL ES 1.1。alpha混合对我来说非常好,除了当我绘制99%透明的纹理时。例如,如果我有一个512x512图像,中间只有2px黑线。这些纹理在android上绘制为绝对白色 我的混合功能: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 任何帮助都将不胜感激 编辑:这是我设置纹理的方式 glEnable(GL_TEXTURE_2D); glGenTextures(1, &a

我在游戏中使用OpenGL ES 1.1。alpha混合对我来说非常好,除了当我绘制99%透明的纹理时。例如,如果我有一个512x512图像,中间只有2px黑线。这些纹理在android上绘制为绝对白色

我的混合功能:

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);

不能将Android位图类用于OpenGL ES纹理,除非它们完全不透明。这是因为位图类以预乘格式存储像素,用于Porter-Duff混合,这与OpenGL ES混合不兼容。本文提供了更多详细信息:


那么怎么办呢?对于本机代码,您不需要位图类。使用Java,您可以使用GLES11包装器调用GLES11.glTexImage2D(),并传入ByteBuffer以避免使用GLUtils、PNGDecoder和位图。感谢您的回复。我已经添加了如何设置gl纹理的代码。函数maOpenGLTexImage2D是一个与glTexImage2D()等效的mosync sdk函数。你能告诉我如何修改代码吗?对不起,我只是在学习openglI,我想你是在使用本机代码吧?我会检查mosync代码,看看他们是否使用Bitmap类。否则,位图不应该是问题。