我在 iPhone 上使用 openGL ES 时遇到错误的 alpha 混合结果问题。
这是我创建纹理对象的代码:
glGenTextures(1, &tex_name);
glBindTexture(GL_TEXTURE_2D, tex_name);
glTextImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);
'tex_data' 是从用 zlib 打包的原始 RGBA8888 数据加载的。它按应有的方式加载,我已经用调试器检查过了。
这是我在渲染前设置纹理的代码:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, tex_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
我已经上传了一个样本,其中包含我所期望的和我在这里得到的:sample .在示例中,底部的大部分纹理是漆黑的,不透明度为 70%。但是 openGL 将其呈现为灰色。这个问题影响我使用混合的所有纹理。
我已经使用 OGLES PVRVFrame 在 Windows 上测试了代码,结果符合预期:黑色呈现为黑色。
最佳答案
发现问题。我忘记将 EAGLView 的 CAEAGLLayer 的不透明属性设置为 YES。
关于c++ - iPhone OpenGL ES 不正确的 alpha 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100917/