5

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

4

2 回答 2

2

我怀疑命令模式不足以满足您的情况。这是基于我的假设,即即使您知道应用了何种失真,也不容易扭转图像失真。

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

您可以优化这一点,将命令对象存储为可轻松撤消的更改,并将图像存储为不易撤消的更改。

于 2013-04-01T16:23:40.763 回答
0

雷·塔耶克是对的。使用命令模式。也就是说,对于用户执行的每个操作,您都会将该操作(命令)以及与该操作相关的任何数据推送到 Undo 堆栈。

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

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

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

这应该足以让你开始。高温高压

于 2013-04-01T16:17:49.340 回答