0

阅读关于 Nehe 的 #20 教程和一个关于遮罩的问题,我使用黑白图像和不透明图像实现了遮罩,但是结果完全不是预期的(我在 iPhone 上使用 OpenGL ES 1,所以不能使用着色器)。
Source+Mask=Result
从结果图中可以看出,遮罩上的白色不是透明的,黑色不是源颜色,而是白色(!)这是我用来渲染它的源代码:

    // 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];

谢谢你的帮助!

4

1 回答 1

2

为使 NeHe 教程中的技术正常工作,源图像的背景(即蒙版图像为白色的任何地方)需要全黑。尽管从您的第一张图像中看不出确切的来源是什么,但我怀疑在最终图像中变亮的地方它不是黑色的。

但是,在 OpenGL ES 1.1 中不需要以这种方式进行遮罩。您可以使用多重纹理在单遍中渲染带有 Alpha 蒙版的图像。此外,如果您的蒙版和图像总是一起绘制,那么您最好将它们烘焙成单个 RGBA 纹理——不需要多重纹理。

于 2010-06-24T08:45:05.193 回答