我正在尝试将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中找到它。
答案 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];