我正在试图弄清楚如何在iPhone屏幕上实现最后一个绘图操作的简单“撤消”。我首先准备帧缓冲区:
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
然后我准备顶点数组并以这种方式绘制:
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
如何简单地撤消最后一个动作?我想,必须有一种方法来保存以前的状态或内置的OpenGL ES功能。
由于
答案 0 :(得分:1)
我知道迟到的回答,但是如果有其他人遇到这个,我会发布这个。
您还可以选择在每次touchesBegan和touchesMoved调用时将点存储在数组中。如在这里:
[currentStroke addObject:[NSValue valueWithCGPoint:point]];
当touchesEnded时,您可以将其移动到另一个可变数组,例如:
[allPoints addObject:allCurrentStroke];
然后,您可以遍历allPoints数组,将每个子数组传递给呈现函数。该方法与存储图像的方法相比具有优点和缺点。首先,它节省了硬盘空间......但是以内存为代价。使用GL_POINTS,你会发现在你点击撤消后需要时间来重绘你的图像...但你可以轻松地一直撤消到第一次触摸!所以,这取决于你是否想要速度或灵活性......如果有人有更好的撤消方法,请告诉我!
答案 1 :(得分:0)
每次绘制内容时都可以从OpenGL ES上下文中获取图像,并将其作为图像文件保存在应用程序的包中。这样可以节省应用程序的运行内存。
按下撤消时,您只需将之前保存的图像绘制到上下文中就可以了。
如何从上下文中抓取图像:http://www.iphonedevsdk.com/forum/iphone-sdk-development/35281-grab-image-opengl-es-context.html