在iPhone上使用glBlendFunc保持不透明度

在iPhone上使用glBlendFunc保持不透明度,iphone,opengl-es,alphablending,Iphone,Opengl Es,Alphablending,我应该使用什么glBlendFunc来确保我的图形的不透明度始终相同?当我使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA)并将多个图像绘制在彼此的顶部时,结果越来越不透明,直到经过一定数量的imgae后完全不透明为止 我最接近的方法是使用glBlendFunc(GL_ONE_减去DST_ALPHA,GL_ONE_减去SRC_ALPHA),它可以保持恒定的不透明度,不管有多少图像彼此重叠,尽管如果图像彼此重叠,不透明度会略有变化 任何其他渲染状态我应该

我应该使用什么glBlendFunc来确保我的图形的不透明度始终相同?当我使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA)并将多个图像绘制在彼此的顶部时,结果越来越不透明,直到经过一定数量的imgae后完全不透明为止

我最接近的方法是使用glBlendFunc(GL_ONE_减去DST_ALPHA,GL_ONE_减去SRC_ALPHA),它可以保持恒定的不透明度,不管有多少图像彼此重叠,尽管如果图像彼此重叠,不透明度会略有变化

任何其他渲染状态我应该考虑尝试吗?还有其他想法吗?我正在为我的孩子制作一个绘图应用程序,我不希望他们绘制的图像(画笔)掩盖背景

这是我得到的最接近的答案:

我想让它,使重叠部分的圆圈是相同的颜色和不透明的中心部分的圆圈

我正在使用cocos2diphonev。0.99

将(无透明度)绘制到渲染缓冲区中,然后将生成的图像用作主场景中部分透明四边形上的纹理

以下是预RBO OpenGL的方法,但不确定您的设备是否支持它,您可能需要将其转换为使用RBOs

  • 请确保选择至少有一个辅助缓冲区的显示格式
  • glGenTextures以分配纹理id
  • glPushAttrib(GL\U颜色\U缓冲\U位)
  • glDrawBuffer(AUX0)直接渲染到屏幕外位图
  • glReadBuffer(AUX0)
  • glCopyTexSubImage2D将图像转换为纹理
  • glPopAttrib(GL\U COLOR\U BUFFER\U BIT)用于恢复绘图缓冲区设置
  • glEnable(纹理_2D)
  • glBindTexture
  • glBegin(四边形)
  • glColor(100%RGB,部分alpha)
  • glTexCoord(四次)
  • glVertex(四次)
  • 格伦德
请注意,您可以对多个帧重复使用同一纹理,而无需每次重新渲染,您还可以通过创造性地使用纹理坐标到四边形顶点映射来进行一些旋转或拉伸。

我最后完成了以下操作:

glAlphaFunc(GL_NOTEQUAL, 0);
[sprite1.texture setAliasTexParameters];
[sprite1 setBlendFunc: (ccBlendFunc) { GL_SRC_ALPHA, GL_ZERO }];

然后,当我绘制到我的CCRenderTexture时,我启用alpha测试,访问我的画笔精灵,然后禁用alpha测试。

有没有可能得到一些代码?我不太明白你的意思。不幸的是,我没有权限发布我的源代码(它使用一个没有renderbuffer对象的OpenGL旧版本,但想法是一样的),但它几乎与双缓冲相同。我将把这些步骤添加到我的答案中。