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

标签 ios opengl-es uiview paint

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

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

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

我有什么想法吗?有没有人有有效的方法?

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

最佳答案

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

你的绘制周期将是这样的:

  • 绑定(bind)RenderToTextureFramebuffer
  • 将纹理1附加到RenderToTextureFramebuffer
  • 在第 1 层中绘制您想要的内容
  • 将texture2附加到RenderToTextureFramebuffer
  • 在第 2 层中绘制您想要的内容
  • 将texture3附加到RenderToTextureFramebuffer
  • 在第 3 层中绘制您想要的内容
  • 绑定(bind)RenderToScreenFramebuffer
  • 绑定(bind)纹理1
  • 绘制纹理1(您的图层1)
  • 绑定(bind)纹理2
  • 绘制纹理2(您的图层2)
  • 绑定(bind)纹理3
  • 绘制纹理3(您的图层3)
  • 在屏幕上呈现最终图片

关于ios - 如何在iOS上使用OpenGL ES实现多层绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11901721/

相关文章:

c++ - 使用 OpengGLES2(角度)从帧缓冲区对象中读取

ios - 在 C 和 Objective C 中处理 unicode 字符串

ios - UITextField 圆角 - swift

ios - 在 Swift 中对同一个变量使用 weak 和 optional 是多余的吗?

android - 纹理和颜色在 OpenGL ES 中显示不正确

c++ - 没有 SDL 的 Emscripten

ios - 为 CustomUiView 设置委托(delegate)获取 EXC_BAD_ACCESS

objective-c - 更改目标的 super View 后检测 TouchesEnded

约束的快速动画不起作用

ios - 错误 "linker command failed with exit code 1 (use -v to see invocation)"