Iphone 如何在openGL中创建与对象的非堆叠alpha混合

Iphone 如何在openGL中创建与对象的非堆叠alpha混合,iphone,opengl-es,alphablending,Iphone,Opengl Es,Alphablending,目前,我正在使用OpenGL ES 1.1构建一个iPhone游戏,并使用drawTriangleStrip绘制一条围绕屏幕的大线,并经常重叠 我遇到的问题是,我不希望alpha在直线重叠时堆叠起来。目前我得到的alpha混合如下: 但我真的希望它像这样混合: 我试过使用glBlendFunc的变体,但我运气不太好。如果你们中的任何一位openGL大师能告诉我如何实现上述混合,那将是非常棒的。您正试图在背景上对三幅图像进行alpha混合。您需要将三个图像绘制到一个画布上,不使用alpha混合

目前,我正在使用OpenGL ES 1.1构建一个iPhone游戏,并使用
drawTriangleStrip
绘制一条围绕屏幕的大线,并经常重叠

我遇到的问题是,我不希望alpha在直线重叠时堆叠起来。目前我得到的alpha混合如下:

但我真的希望它像这样混合:


我试过使用
glBlendFunc
的变体,但我运气不太好。如果你们中的任何一位openGL大师能告诉我如何实现上述混合,那将是非常棒的。

您正试图在背景上对三幅图像进行alpha混合。您需要将三个图像绘制到一个画布上,不使用alpha混合,然后在背景上alpha混合该画布。

您正在尝试在背景上alpha混合三个图像。您需要将三个图像绘制到一个画布上,不使用alpha混合,然后在背景上使用alpha混合该画布。

因此您希望它混合到背景上,但前提是尚未混合到背景上


也许可以通过反向深度排序来实现这一点:渲染所有不透明的对象,然后渲染alpha对象,从最近的对象开始,一直渲染到最远的对象。您需要将
glDepthFunc()
设置为
GL\u LESS
,而不是
GL\u LEQUAL
(如果GL-ES中存在该选项…)。如果已经有alpha,深度缓冲区应该拒绝alpha片段。

所以你想让它混合到背景上,但只有在混合到背景上还没有发生的情况下


也许可以通过反向深度排序来实现这一点:渲染所有不透明的对象,然后渲染alpha对象,从最近的对象开始,一直渲染到最远的对象。您需要将
glDepthFunc()
设置为
GL\u LESS
,而不是
GL\u LEQUAL
(如果GL-ES中存在该选项…)。如果已经有阿尔法,深度缓冲区应该拒绝阿尔法碎片。

多亏了托德,听起来这可能是前进的方向,这种方法会处理图像中的阿尔法梯度吗?(我在图像中使用了dropshadows,我不想把它们叠加在一起)多亏了Todd,听起来这可能是前进的方向,这种方法会处理图像中的alpha渐变吗?(我在图像中使用dropshadows,但我不想将它们叠加在一起)