【问题标题】:iPhone OpenGL ES incorrect alpha blendingiPhone OpenGL ES 不正确的 alpha 混合
【发布时间】:2009-07-08 22:37:36
【问题描述】:

我在 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 上测试了代码,结果符合预期:黑色被渲染为黑色。

【问题讨论】:

    标签: c++ iphone opengl-es alphablending


    【解决方案1】:

    发现问题。我忘记将 EAGLView 的 CAEAGLLayer 的 opaque 属性设置为 YES。

    【讨论】:

      【解决方案2】:

      这会有帮助吗? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) 我认为这只是将两者混合,而不是将两者与背景混合。

      对不起,如果我不明白。

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2011-12-14
        • 1970-01-01
        相关资源
        最近更新 更多