如何在android中的opengl中实现撤消功能

时间:2013-02-14 11:23:23

标签: java android opengl-es

我正在开发一个扭曲图像的Android应用程序。我正在使用opengl翻译和缩放功能来扭曲图像。图像扭曲很好。现在我想实现撤消功能。但是无法实现功能。任何一个可以帮助如何在opengl中实现撤消功能。任何建议或代码都会有所帮助。 提前致谢 。

2 个答案:

答案 0 :(得分:2)

我怀疑命令模式不适合你的情况。这是基于我的假设,即使你知道应用了什么样的失真,也不容易扭转图像失真。

相反,您可能需要在应用失真之前将图像推到堆栈上。然后,撤消实现将用堆栈上的图像替换当前图像。这将导致由重做和撤消组合产生的潜在有趣问题。

您可以优化存储命令对象,以便进行易于更改的更改,并为不易反转的更改存储图像。

答案 1 :(得分:0)

Ray Tayek是对的。使用命令模式。也就是说,对于用户执行的每个操作,您可以在撤消堆栈上推送该操作(命令)以及与该操作相关的任何数据。

让我们看一下简单的绘画程序。该过程直接适用于您的OpenGL应用程序。用户从x1,y1到x2,y2绘制一条线。该命令可以表示如下:

command = DrawLine
data = x1, y1, x2, y2

你可能需要至少两个类来撤销数据,但它们很小并且很容易实现。当用户想要撤消时,只需将顶部对象从Undo堆栈中弹出,查看它,然后执行相关的撤消操作(特定于每种类型的命令)。或者,您甚至可以在每个命令对象本身中包含撤消操作。然后在Redo堆栈上按下撤消命令。

这应该足以让你入门。 HTH