【问题标题】:Applying mask for transparent image in OpenGL在OpenGL中为透明图像应用蒙版
【发布时间】:2014-07-10 09:57:11
【问题描述】:

我正在尝试将 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 中找不到。

【问题讨论】:

  • 你的DEPTH_TESTALPHA_TEST是什么状态?
  • @Constantin 我没有改变它,所以不管是默认的。我是 openGL 的新手

标签: ios opengl-es glkit alphablending


【解决方案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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多