【发布时间】:2010-11-21 23:49:50
【问题描述】:
我有两张相互重叠的图像。(卡片相互叠放的方式)
现在,如果我将手指移到最顶部的图像上,该图像的部分应该变得透明。(该部分的不透明度应该变为 0)。
我是 OpenGL ES 开发的新手。
请帮助我或给我任何建议以完成此功能。
提前致谢
【问题讨论】:
我有两张相互重叠的图像。(卡片相互叠放的方式)
现在,如果我将手指移到最顶部的图像上,该图像的部分应该变得透明。(该部分的不透明度应该变为 0)。
我是 OpenGL ES 开发的新手。
请帮助我或给我任何建议以完成此功能。
提前致谢
【问题讨论】:
您将需要使用帧缓冲区对象 (FBO) 渲染到纹理。渲染到所需的纹理,但仅渲染到 alpha 通道,这是使用 glColorMask 完成的(有了它,您可以屏蔽除 alpha 之外的所有颜色通道),然后将图案绘制到 alpha 通道中,将 alpha 设置为 0.0,然后显示纹理正常。
【讨论】:
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 框架。我正在尝试画一个里面有一个空心正方形的心。但这东西行不通。你能指导我一下吗?
我刚刚做了类似的事情,我在 GLBlending 中找到了解决方案:
if (eraseMode) {
glBlendFunc(1.0,0.0);
}
else {
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}
需要一些化妆品来解决这个问题,但这是一个满足基本需求的简单解决方案。
【讨论】: