如何在iOS上使用OpenGL ES实现多层绘图?

时间:2012-08-10 12:29:52

标签: ios opengl-es uiview paint

我想很快为iOS制作一个简单的绘图应用程序,但是我无法完成绘图工作 - 好吧,保存每个图层上的内容并恢复图层。看起来所有图层都保存相同的像素。

我们的想法是拥有三层,并使用OpenGL ES在每一层上绘制。由于没有这方面的经验,我只是平铺了三个UIViews并为每个UIView添加了一个OpenGL绘图画布(从教程中修改版本的PaintingView)。当用户交换绘图图层时,我只是禁用了其他图层上的用户交互。

通过这种方法,我经历了许多奇怪的事情,我认为这源于我的方法。所以现在,我认为我应该以相同的方式在同一个PaintingView中制作三个全屏缓冲区,并在它们之间进行OpenGL切换。

我能做点什么吗?有人有办法吗?

关于主题的任何内容都可能有所帮助。感谢。

2 个答案:

答案 0 :(得分:2)

您可以制作两个不同的帧缓冲区:一个用于绘制到屏幕,另一个用于绘制到纹理。 然后,您可以制作3种不同的纹理,它们将是您的图层。吸引他们。 最后,您可以将您拥有的纹理绘制到第一个帧缓冲区并显示在屏幕上。

你的抽奖周期将是这样的:

  • 绑定RenderToTextureFramebuffer
  • 将texture1附加到RenderToTextureFramebuffer
  • 在第1层中绘制您想要的内容
  • 将texture2附加到RenderToTextureFramebuffer
  • 在第2层中绘制您想要的内容
  • 将texture3附加到RenderToTextureFramebuffer
  • 在第3层中绘制您想要的内容
  • 绑定RenderToScreenFramebuffer
  • 绑定texture1
  • 绘制texture1(您的layer1)
  • 绑定texture2
  • 绘制texture2(您的layer2)
  • 绑定texture3
  • 绘制texture3(你的layer3)
  • 在屏幕上显示最终图片

答案 1 :(得分:0)

拥有画家的所有功能 - 撤消/重做等等 恕我直言,你需要只有几个图形对象数组,并在每个渲染过程中迭代它们。