在Android OpenGL ES上使用alpha值堆积纹理的技术

在Android OpenGL ES上使用alpha值堆积纹理的技术,android,opengl-es,Android,Opengl Es,我正在开发2D图形程序,该程序使用OpenGL for Android 2.2及更高版本 通常,当半透明纹理堆积起来时,它会变得像左边的图像。我想先堆积一个纹理,让它像图片一样透明。通过画布堆积图像并使其成为纹理的方法效率低下。OpenGLAPI有什么方法吗 这只是一个想法,但可能值得一试:您可以在不混合的情况下绘制前景元素,然后使用“glBlendFuncSeparate”绘制背景。前景部分应该按照描述绘制元素,然后在blend func中,您仍然可以控制将其与背景混合所需的透明度。坏消息是如

我正在开发2D图形程序,该程序使用OpenGL for Android 2.2及更高版本

通常,当半透明纹理堆积起来时,它会变得像左边的图像。我想先堆积一个纹理,让它像图片一样透明。通过画布堆积图像并使其成为纹理的方法效率低下。OpenGLAPI有什么方法吗


这只是一个想法,但可能值得一试:您可以在不混合的情况下绘制前景元素,然后使用“glBlendFuncSeparate”绘制背景。前景部分应该按照描述绘制元素,然后在blend func中,您仍然可以控制将其与背景混合所需的透明度。坏消息是如果背景有更多的元素需要绘制

通常,应该使用帧缓冲区对象,并将纹理绑定到该对象,以绘制前景元素。然后在场景中使用绑定纹理:

(您必须找到替换Android此功能的方法)

这将创建一个画布,您可以绘制任何与主场景相关的内容,并且可以重用绑定的纹理。
请注意,“分辨率”可能需要为2的幂。您还需要在绘图之前设置矩阵和视口。

谢谢。我试试帧缓冲区。
    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, resolution, resolution, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);