我正在尝试将 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/