Opengl es 使用OpenGL ES 2.0合成透明多边形

Opengl es 使用OpenGL ES 2.0合成透明多边形,opengl-es,opengl-es-2.0,alphablending,compositing,Opengl Es,Opengl Es 2.0,Alphablending,Compositing,我有一个2D对象,需要使用OpenGL ES 2.0将其渲染为半透明。但是,该对象由多个重叠多边形组成。当我使用混合函数时 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 结果是,多边形重叠的对象部分明显不太透明,这是有意义的,例如,如果我渲染一个由两个稍微重叠的圆组成的对象,alpha=.5,圆重叠的对象区域仅为25%透明,而非重叠区域为50%透明。但是,我的目标是以统一的颜色和透明度渲染对象 我知道我可以将对象渲染为不透明的中间纹理,

我有一个2D对象,需要使用OpenGL ES 2.0将其渲染为半透明。但是,该对象由多个重叠多边形组成。当我使用混合函数时

 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
结果是,多边形重叠的对象部分明显不太透明,这是有意义的,例如,如果我渲染一个由两个稍微重叠的圆组成的对象,alpha=.5,圆重叠的对象区域仅为25%透明,而非重叠区域为50%透明。但是,我的目标是以统一的颜色和透明度渲染对象


我知道我可以将对象渲染为不透明的中间纹理,然后以正确的透明度渲染纹理到屏幕上。但是,这个特殊的draw调用经常发生在不同的对象上,因此我无法缓存结果,中间步骤将对性能造成重大影响。使用OpenGL ES 2.0,无需中间步骤即可完成此操作吗?

您可以前后排序对象吗?如果是,则启用深度测试,以避免先前绘制的对象后面的碎片evaluated@ratchetfreak该程序目前不使用深度缓冲区,但如果使用深度缓冲区,这将是一个好主意。或者使用模具缓冲区,以便只显示第一个绘制的片段kept@ratchetfreak那也行,,但深度缓冲区存在相同的问题,因为它目前未被使用。如果没有解决方案只涉及renderbuffer,我可能会使用其中之一,谢谢。