OpenGL ES简单撤消最后绘图

时间:2010-04-25 11:38:47

标签: iphone opengl-es drawing undo

我正在试图弄清楚如何在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功能。

由于

2 个答案:

答案 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