ios - OpenGL ES 2.0 纹理是透明的,但不显示后面的 OpenGL 内容

标签 ios opengl-es ios4 opengl-es-2.0

iOS 4 上使用 OpenGL ES 2.0

我有一个继承自 UIViewOpenGL View 。它位于提供背景的 UIImageView 的前面。

我有一个具有透明度的 .png 图像,我将其用于 OpenGL 纹理。

我遇到的问题是 OpenGL View 中图像的透明度显示到 UIImageView 背景中的图像。我想在具有透明纹理的元素后面的 OpenGL View 中显示内容。

下面的 OpenGL 纹理正在渲染,但任何顶部有透明纹理的部分都不会显示下面的 OpenGL 纹理。它显示了 UIImageView 背景。

我需要做什么才能使透明度显示透明内容后面的 OpenGL View 中的内容?

编辑:

我重构了索引数组,所以所有具有透明纹理的元素都在末尾,并且在我调用 glDrawElements 时应该在所有不透明元素之后呈现。

仍然存在透明度问题。

我设置了一些数据,以便我有 4 个顶点和 2 个三角形的 6 个索引来绘制具有不透明纹理的正方形。 2 个三角形也有 4 个顶点和 6 个索引,用于绘制一个带有透明纹理的正方形,该透明纹理位于顶点/索引数组中的其他条目之后。透明元素坐标将其呈现在不透明元​​素之前。

我可以看到透明元素,也可以看到不透明元素的边缘从后面伸出来。 然而,透明元素并没有显示紧靠在透明元素后面的不透明元素,而是直接穿过并显示 OpenGL View 后面的 View 背景。

不透明的黄色方 block :

Opaque yellow square

透明测试图片:

Transparent test image

透明图像覆盖不透明图像,但透明度显示背景而不是后面的不透明图像:

enter image description here enter image description here

最佳答案

您是否尝试过混合?像这样:

//draw your background scene here
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//draw your foreground scene here
glDisable(GL_BLEND);

----------------编辑评论----------------

所以你想在片段着色器中进行混合:

vec4 color1 = texture2D(backgroundTexture, ...);
vec4 color2 = colorYouGetFromSecondaryTextureOrSomeOtherElement;

vec4 outputColor = color1*(1.0-color2.a) + color2*(color2.a);
outputColor.a = 1.0; //or some function of color1.a and color2.a

gl_FragColor = outputColor;

----------------编辑 2------------------------

同时考虑到您的结果,我会说您忘记了管道中的某些东西。您可能使用 2 个或更多纹理,但只有您的第二个被绑定(bind),导致我发布的片段片段全黑但您的前景..您使用“事件纹理”吗?像这样:

- (void)bindFirstTexture {
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_1D, firstTextureID);
}
- (void)bindSecondTexture {
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, secondTextureID);
}

在创建多个纹理之前和绘制多个纹理之前,您都需要这样的绑定(bind)。

关于ios - OpenGL ES 2.0 纹理是透明的,但不显示后面的 OpenGL 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665027/

相关文章:

objective-c - 使用 OpenGL ES 模板时的错误信息

android - 是否有使用 Oxygene 制作的可交叉编译的 OpenGL 示例?

ios - 函数 glGenFramebuffers 的隐式声明

iphone - 在横向模式下显示 2 个 PDF 页面

ios - 横向模式下的 Xcode iPad 分辨率

ios - 是否需要请求 Siri 授权?

ios - Xcode 自动布局 - 动态约束

iphone - 为 ios4.3、ios5 和 ipad 编写应用程序的最佳实践

ios4 - 在 iOS 4 上使用 MPMusicPlayerController 支持后台音频和远程控制。这甚至可能吗?

ios - 在 ViewController 之间传递 NSString 返回 NULL