2012-08-10 114 views
2

我想很快为iOS创建一个简单的绘图应用程序,但是我无法完成绘图工作 - 以便保存每个图层上的内容并还原图层。它看起来像所有图层保存相同的像素。如何在iOS上使用OpenGL ES实现多层次绘图?

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

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

我在做些什么?有没有人有办法可行?

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

+0

为什么你需要三层? – 2012-08-13 19:45:04

+0

为什么不看看coreGraphic框架?它由苹果有据可查,应该做你想做的。 – geminiCoder 2012-08-15 11:16:45

+0

我与@ geminiCoder - 我认为OGL将比使用核心动画层+核心图形 – nielsbot 2012-08-20 02:43:44

回答

2

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

您的抽奖周期会水木清华这样的:

  • 绑定RenderToTextureFramebuffer
  • 重视texture1到RenderToTextureFramebuffer
  • 吸引你层想要的东西1
  • 附加纹理2至RenderToTextureFramebuffer
  • 画什么你想在第2层
  • 将texture3附加到RenderToTextureFramebuffer
  • 吸引你3层
  • 绑定RenderToScreenFramebuffer
  • 绑定texture1
  • 平局texture1(你的层1)
  • 绑定纹理2
  • 绘制纹理2(你的二层)
  • 绑定texture3
  • 想要什么
  • 绘制纹理3(您的图层3)
  • 在屏幕上呈现最终图片
+0

更多的工作我遵循上述过程。我得到的问题是,我必须通过调用glClear(GL_COLOR_BUFFER_BIT),然后绘制到屏幕,在每一帧不断重绘图层到屏幕。这会导致闪烁效果。我做错了什么或者这是可以预料的? – Amendale 2014-09-05 04:08:04

+0

Amendale,在绘制之前重新绘制每一帧的画面并调用glClear(GL_COLOR_BUFFER_BIT)即可,并且不应导致闪烁。可能是你的缓冲区有问题。可能你应该开始另一个问题,并在那里发布你的代码,这样人们可以更好地理解你的问题。 – Seify 2014-09-05 07:47:54

0

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

+0

他可以将逻辑部分与图形分离并保留操作历史,并根据当前逻辑状态重绘场景。 – brigadir 2012-08-20 15:01:39