我有两层正在绘制。一个静态背景纹理和一个带有透明部分的纹理(png)。我可以毫无问题地正确看到背景。我想做的是通过绘制一个多边形(矩形)来修改顶层,该多边形(矩形)的大小会在运行时改变,使顶层的那部分透明,所以你只看到那个静态背景。
我在 iphone 上使用 Cocos2d 并找到了作者的一个很好的解决方案(参见 #6),但在他的示例中,他使用另一个 PNG 文件作为掩码。由于我的透明部分将在运行时以可变高度和宽度创建,因此图像不起作用。我认为一遍又一遍地绘制图像(蒙版)的开销也很大。
我已经对此进行了一段时间的研究,发现一些人谈论仅将多边形绘制到 Alpha 通道,我已经能够让多边形绘制到该通道,它不会使其透明,只是稍微亮一点的颜色。
我希望我只是缺少一些简单的东西:
RenderTexture *mBurnLayer = [RenderTexture renderTextureWithWidth:512 height:512];
Sprite *burn = [Sprite spriteWithFile:@"bg-new.png"];
[burn setPosition:cpv(480/2,320/2)];
[mBurnLayer setPosition:cpv(256,256)];
[mBurnLayer begin];
glColorMask(TRUE, TRUE, TRUE, TRUE);
[burn visit];
glColorMask(TRUE, TRUE, TRUE, FALSE);
[mBurnLayer end];
[self addChild:mBurnLayer];
[mBurnLayer begin];
glColorMask(FALSE, FALSE, FALSE, TRUE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glColor4ub(1, 1, 1, 0.5);
glLineWidth(10);
CGPoint vertices[] = { ccp(100,100), ccp(100,200), ccp(200,200), ccp(200,100) };
drawPoly( vertices, 4, YES);
glColorMask(TRUE, TRUE, TRUE, TRUE);
我已经尝试了 GL_ONE GL_ZERO GL_ALPHA_FROM_SRC 等的大量不同组合......
进一步阅读也许我只需要剪裁纹理?没有着色器这可能吗?我知道 iPhone 3GS 可以做着色器,但早期的不能。