C# 在OpenTk项目中放置撤消选项

C# 在OpenTk项目中放置撤消选项,c#,winforms,opengl,opentk,C#,Winforms,Opengl,Opentk,大家好,我在那里制作画笔之类的东西,可以在glcontrol中绘制一些基本形状。现在我想添加撤销选项,我真的不知道这将如何工作,所以请给我任何提示首先要理解的是:OpenGL只是一个绘图API。您发送绘图命令,它只会更改目标帧缓冲区中某些像素的颜色。OpenGL中没有将几何体抽象为可操纵对象的高级功能。这就是场景图的作用 撤消/重做历史需要将所有图形操作存储在单独的结构中,例如图形操作的链接列表 每个新操作都会附加到列表中。撤销将通过返回步骤来实现。在一些撤销步骤之后的任何新操作都将丢弃尾部并构

大家好,我在那里制作画笔之类的东西,可以在
glcontrol
中绘制一些基本形状。现在我想添加撤销选项,我真的不知道这将如何工作,所以请给我任何提示首先要理解的是:OpenGL只是一个绘图API。您发送绘图命令,它只会更改目标帧缓冲区中某些像素的颜色。OpenGL中没有将几何体抽象为可操纵对象的高级功能。这就是场景图的作用

撤消/重做历史需要将所有图形操作存储在单独的结构中,例如图形操作的链接列表

每个新操作都会附加到列表中。撤销将通过返回步骤来实现。在一些撤销步骤之后的任何新操作都将丢弃尾部并构建一个新的尾部


在OpenGL方面,您可以在撤销/重做后重新绘制整个列表,或者为每个步骤存储帧缓冲区的状态;不过,这会占用大量内存,因此只存储差异,并使用一些简单的压缩方案(运行长度和事先分割为分幅)可以节省内存。

首先要了解的是:OpenGL只是一个绘图API。您发送绘图命令,它只会更改目标帧缓冲区中某些像素的颜色。OpenGL中没有将几何体抽象为可操纵对象的高级功能。这就是场景图的作用

撤消/重做历史需要将所有图形操作存储在单独的结构中,例如图形操作的链接列表

每个新操作都会附加到列表中。撤销将通过返回步骤来实现。在一些撤销步骤之后的任何新操作都将丢弃尾部并构建一个新的尾部

在OpenGL方面,您可以在撤销/重做后重新绘制整个列表,或者为每个步骤存储帧缓冲区的状态;但是,这会占用大量内存,因此只存储差异,并使用一些简单的压缩方案(运行长度和事先分割为分片)可以节省内存