// we render from one big texture using coordinates
// so changing rectangle will change the drawn image
_pressedFrame = maskRect;
glBlendFunc(GL_DST_COLOR,GL_ZERO);
[super render:sender];
_pressedFrame = normalRect;
glBlendFunc(GL_ONE,GL_ONE);
[super render:sender];
// we render from one big texture using coordinates
// so changing rectangle will change the drawn image
_pressedFrame = maskRect;
glBlendFunc(GL_DST_COLOR,GL_ZERO);
[super render:sender];
_pressedFrame = normalRect;
glBlendFunc(GL_ONE,GL_ONE);
[super render:sender];
感谢您的帮助!
答案 0 :(得分:2)
为了使NeHe教程中的技术正常工作,源图像的背景(即掩模图像为白色的任何地方)需要全黑。虽然从你的第一张图片中可以看出来源不是很明显,但我怀疑它在最终图像中变亮的地方并不是黑色。
但是,在OpenGL ES 1.1中不需要以这种方式进行屏蔽。您可以使用多重纹理在一次通过中使用alpha蒙版渲染图像。此外,如果您的面具和图像总是被绘制在一起,那么最好将它们烘焙成单个RGBA纹理 - 不需要多重纹理。