OpenGL:如何实现"橡皮擦"工具?

Rij*_*jnd 4 iphone opengl-es framebuffer

我正在开发一款iPhone游戏,其中涉及绘图/绘画机制,我在尝试创建一个可以擦除已绘制内容的工具时遇到问题.

主要问题是被绘制的背景不是纯色而是静态图像或动画.我尝试在绘图中使用不同的混合选项和逻辑操作,但似乎没有任何效果.我是OpenGL的新手,所以我必须遗漏一些东西.

有小费吗?

编辑:为了提供更多信息,我正在为我的画笔使用纹理,并使用glVertexPointer()和glDrawArrays()来渲染它们.例如:

glBindTexture(GL_TEXTURE_2D, circleBrush);
glVertexPointer(3, GL_FLOAT, 0, verts);
glTexCoordPointer(2, GL_FLOAT, 0, coords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Run Code Online (Sandbox Code Playgroud)

编辑2:不幸的是,iPhone上没有模板缓冲区.:(

编辑3:iPhone上有Framebuffer对象,这就是我走的路.我还没有完全实现它,但到目前为止它看起来像我想要它的方式.感谢大家!

joe*_*eld 5

在场景上绘制全屏纹理四边形.当用户绘制画笔描边时,用于glTexSubImage2D更新纹理.

glReadPixels/glDrawPixels很慢.

使用FrameBufferObjects甚至更好,但我怀疑这个扩展是否可以在iPhone上使用(然后再次,我不确定,所以也许尝试一下).FBO允许您直接绘制到纹理中,就像它是另一个渲染上下文一样.

  • 你有其中任何一个的代码示例吗?非常感谢 (2认同)