【问题标题】:OpenGL ES: Undo in a Pixel Painting AppOpenGL ES:在像素绘画应用程序中撤消
【发布时间】:2011-09-11 00:38:52
【问题描述】:

我目前正在开发一个允许用户使用 OpenGL ES 绘制像素化图像的应用程序,但我不知道如何实现撤消功能。 我怎么能做到?我想为每个像素使用一个图像并将其添加到一个数组中。基本上,我怎样才能将我使用的矩形存储为像素?

【问题讨论】:

    标签: iphone xcode opengl-es pixel undo


    【解决方案1】:
    how can I store the rectangles I use as pixels?
    

    我不确定您的基本设置是否正确。您应该使用大纹理作为画布。任何用户绘画操作都应该只影响这个纹理(您将使用 glTexSubImage2D 更新)。然后在每一帧你都应该在屏幕上重绘这个纹理。

    一个简单的 N 步撤消系统将包含 N 个纹理/画布的循环列表。

    【讨论】:

      【解决方案2】:

      你可以试试:

          NSData *data = [NSData dataWithBytes:vertexBuffer length:vertexCount * sizeof(GL_FLOAT) * 2] ;
      if (self.vertexBuffers == nil) self.vertexBuffers = [[NSMutableArray alloc] init];
      [self.vertexBuffers addObject:data];
      
      save every draw point to a array;
      
      if undo 
      
      1. 清除旧的buffer

        glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glClear(GL_COLOR_BUFFER_BIT);
        
      2. array;删除点

        for (int i = 0; i < 50; ++i)
        {
        [self.vertexBuffers removeLastObject];
        }
        
      3. 渲染

        for (NSData *point in self.vertexBuffers)
        {
            NSUInteger count = point.length / (sizeof(GL_FLOAT) * 2);
            glVertexPointer(2, GL_FLOAT, 0, point.bytes);
            glDrawArrays(GL_POINTS, 0, count);
        }
        
      4. 显示buffer

         glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
         [context presentRenderbuffer:GL_RENDERBUFFER_OES];
        

      其他解决方案: 每次绘制内容时,您都可以从 OpenGL ES 上下文中获取图像并将其保存为应用程序包中的图像文件。这节省了应用程序的运行内存。 当按下撤消时,您只需将之前保存的图像绘制到上下文中即可。

      OpenGL ES Simple Undo Last Drawing

      【讨论】:

      • 撤消通常只删除最后一个动作。为什么你调用removeLastObject 50次?
      • 有人在 OpenGL ES 2 上做过这项工作吗?我让它在 ES 1 上运行,但是当我将它复制到 ES 2 时它不起作用。我很确定这与缓冲区的重新渲染有关(上面的#3 和 $4)。任何人都可以提供任何见解。当它重新渲染时,它不会绘制所有的油漆,而只会绘制几个点......
      猜你喜欢
      • 2011-03-29
      • 2011-04-26
      • 2011-02-12
      • 2011-05-21
      • 2015-03-30
      • 1970-01-01
      • 2016-09-20
      • 2014-12-21
      • 2014-01-16
      相关资源
      最近更新 更多