1

我试图弄清楚如何在 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 函数。

谢谢

4

2 回答 2

1

我知道迟到的答案,但如果其他人遇到这个问题,我还是会发布这个。

您还可以选择在每次 touchesBegan 和 touchesMoved 调用时将点存储在数组中。就像在这里:

[currentStroke addObject:[NSValue valueWithCGPoint:point]];

并且当 touchesEnded 时,您可以将它移动到另一个可变数组,例如:

[allPoints addObject:allCurrentStroke];

然后,您可以遍历 allPoints 数组,将每个子数组传递给渲染函数。与存储图像的方法相比,这种方法具有优点和缺点。首先,它节省了硬盘空间……但是以内存为代价。像您一样使用 GL_POINTS,您会注意到在您点击撤消后重新绘制图像需要一些时间......但是您可以轻松地撤消到第一次触摸!所以,这取决于你是想要速度还是灵活性......如果有人有更好的撤消方法,请告诉我!

于 2010-09-20T06:44:10.817 回答
0

每次绘制内容时,您都可以从 OpenGL ES 上下文中获取图像并将其保存在应用程序的包中作为图像文件。这节省了应用程序的运行内存。

按下撤消时,您只需将先前保存的图像绘制到上下文中即可。

如何从上下文中获取图像,您可以在此处找到:http ://www.iphonedevsdk.com/forum/iphone-sdk-development/35281-grab-image-opengl-es-context.html

于 2010-06-04T11:22:56.730 回答