c++ - iPhone OpenGL ES 不正确的 alpha 混合

标签 c++ iphone opengl-es alphablending

我在 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/

相关文章:

c++ - C++ 是否支持归纳类型定义?

android - iOS iPhone-录制无需在服务器端进行转码即可在Android上播放的压缩音频文件

javascript - WebGL。它是在 GPU 中创建缓冲区吗?

iphone - 类 "__ARCLite__"警告

iphone - 许多 CLLocationManager 实例

opengl - 为什么 GLsizei 没有定义为无符号?

android - 检查是否执行了 MotionEvent.ACTION_MOVE

c++ - 返回 0 之前主要崩溃

c++ - 无法调用模板构造函数

C++ 类模板构造函数继承与指针