在OpenGL中为透明图像应用蒙版

时间:2014-07-10 09:57:11

标签: ios opengl-es glkit alphablending

我正在尝试将OpenGl中的蒙版应用于具有透明度的图像 我目前的代码如下:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
  glClearColor(1, 0, 0, 1);
  glClear(GL_COLOR_BUFFER_BIT);
  glEnable(GL_BLEND);

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  [self.bgSprite render];

  glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
  [self.maskSprite render];

  glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
  [self.contentSprite render];
}

所以,首先我要绘制我的背景精灵,然后用我的面具在其中切出一个洞,然后在该洞内绘制蒙面图像。但这种方法并不是我需要的,因为我希望在我的内容图像透明的地方看到我的背景纹理,但现在我看到的是白色。 在此之前,我使用了android,在那里我能够使用Pointer Duff模式。第一步是使用SOURCE模式绘制蒙版,然后使用SOURCE_IN绘制内容图像,然后使用DESTINATION_OVER绘制背景。但我无法在OpenGL中找到它。

1 个答案:

答案 0 :(得分:1)

我明白了。 以下是步骤

glClearColor(1, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
[self.maskSprite render];

glBlendFunc(GL_DST_ALPHA, GL_ZERO);
[self.contentSprite render];

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
[self.bgSprite render];