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

标签 ios opengl-es glkit alphablending

我正在尝试将 OpenGl 中的 mask 应用于具有透明度的图像。
我当前的代码如下所示:

- (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];
}

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

最佳答案

我明白了。 这是步骤

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];

关于ios - 在 OpenGL 中为透明图像应用蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24673545/

相关文章:

ios - 无法在 SCNView 覆盖层中获取 textureFromNode

ios - swift 1.2 "Cannot express tuple conversion"错误

ios - 图 block 大小,视网膜与非视网膜,iPad 与 iPhone

ios - 渲染自定义模型(来自 Photoshop 3D Export)

ios - 使用 UINavigationController 弹出到上一个 View Controller 时屏幕下方有线黑色空间

ios - Xcode 内容从与导航栏相同的位置开始

opengl-es - eglQuerySurface 给出错误的大小

android - 什么opengl es 2没有设置矩阵模式的方法?

ios - 在 GLKit (iOS 5) 中使用 GL_POINTS

ios - 为什么这个纹理在 iOS OpenGL ES 2.0 中不重复?