【问题标题】:Eraser in OpenGL ES iphoneOpenGL ES iphone中的橡皮擦
【发布时间】:2010-11-21 23:49:50
【问题描述】:

我有两张相互重叠的图像。(卡片相互叠放的方式)

现在,如果我将手指移到最顶部的图像上,该图像的部分应该变得透明。(该部分的不透明度应该变为 0)。

我是 OpenGL ES 开发的新手。

请帮助我或给我任何建议以完成此功能。

提前致谢

【问题讨论】:

    标签: iphone opengl-es


    【解决方案1】:

    您将需要使用帧缓冲区对象 (FBO) 渲染到纹理。渲染到所需的纹理,但仅渲染到 alpha 通道,这是使用 glColorMask 完成的(有了它,您可以屏蔽除 alpha 之外的所有颜色通道),然后将图案绘制到 alpha 通道中,将 alpha 设置为 0.0,然后显示纹理正常。

    【讨论】:

    • 感谢您的回复,我在 iphone 中实现了绘画应用程序,如 GLPAINT(iphone 示例代码)。你知道如何实现撤消我的绘画。
    • 你的意思是这样的吗? FrameBuffer.clearAllFrameBuffers(Gdx.app); fbo1.begin(); Gdx.gl20.glClearColor(0, 0, 0, 0); batch.begin(); rubber.draw(batch, 0); Gdx.gl20.glColorMask(false, false, false, true); coverHeart.draw(batch, 1); Gdx.gl20.glColorMask(true, true, true, false); batch.end(); fbo1.end(); 我正在使用 libgdx 框架。我正在尝试画一个里面有一个空心正方形的心。但这东西行不通。你能指导我一下吗?
    【解决方案2】:

    我刚刚做了类似的事情,我在 GLBlending 中找到了解决方案:

    if (eraseMode) {
        glBlendFunc(1.0,0.0);
    }
    else {
        glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
    }
    

    需要一些化妆品来解决这个问题,但这是一个满足基本需求的简单解决方案。

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2011-04-16
      • 2012-09-30
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多