我目前正在研究一个允许用户使用OpenGL ES绘制像素化图像的应用程序,但我不知道如何实现撤消功能。 我该怎么办?我想为每个像素使用图像并将其添加到数组中。基本上,我如何存储我用作像素的矩形?OpenGL ES:在像素绘画应用程序中撤消
0
A
回答
1
你可以试试:
NSData *data = [NSData dataWithBytes:vertexBuffer length:vertexCount * sizeof(GL_FLOAT) * 2] ;
if (self.vertexBuffers == nil) self.vertexBuffers = [[NSMutableArray alloc] init];
[self.vertexBuffers addObject:data];
save every draw point to a array;
if undo
清除旧
buffer
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT);
删除点从
array;
for (int i = 0; i < 50; ++i) { [self.vertexBuffers removeLastObject]; }
渲染
for (NSData *point in self.vertexBuffers) { NSUInteger count = point.length/(sizeof(GL_FLOAT) * 2); glVertexPointer(2, GL_FLOAT, 0, point.bytes); glDrawArrays(GL_POINTS, 0, count); }
显示
buffer
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); [context presentRenderbuffer:GL_RENDERBUFFER_OES];
其他的解决办法: 你可以抓住从OpenGL ES的背景图像每次你画的东西,并保存在应用程序的捆绑作为图像文件。这节省了应用程序的运行内存。 按下撤消按钮时,只需将上一个保存的图像绘制到上下文中,就是这样。
2
how can I store the rectangles I use as pixels?
我不确定你是否拥有基本的设置权限。你应该使用一个大纹理作为画布。任何用户绘画操作都应该只影响这个纹理(你将用glTexSubImage2D更新)。然后在每一帧你都应该在屏幕上重绘这个纹理。
简单的N步撤消系统将包含N个纹理/画布的圆形列表。
相关问题
- 1. OpenGL ES简单撤消最后绘图
- 2. 在opengl中绘制应用程序中的撤消/重做
- 3. 在绘图应用程序中撤消
- 4. 石英核心:撤消在iOS中的绘画应用程序
- 5. 撤消在绘画应用程序中的操作
- 6. 撤消在绘画应用程序,如倒数第二和iDraft
- 7. 绘图应用程序撤消按钮
- 8. CGContextRef撤消绘画?
- 9. 如何绘制OpenGL ES的iPad背景图像应用程序
- 10. OpenGL Es 2.0 GLKit绘制像素
- 11. 使用画布在Android绘图应用程序中撤消和重做功能
- 12. 如何在我的iOS绘画应用程序中实现撤消功能?
- 13. 如何在绘画应用中实现撤消操作
- 14. 如何在Android的绘画应用中实现撤消功能?
- 15. 在Cocos2d/OpenGL-ES中检查先前绘制的像素?
- 16. 单线程OpenGL ES Android应用程序
- 17. 使用OpenGL ES 2.0绘制2D图像
- 18. OpenGL ES交换像素
- 19. Android OpenGL es转换像素
- 20. UIKit绘图应用程序中的撤消按钮
- 21. 绘制应用程序,使用framebuffer在OpenGL ES中渲染纹理
- 22. IPad OpenGL Es应用程序闪烁
- 23. Android,opengl ES 1.1,退出应用程序
- 24. 用OpenGL ES绘制点线
- 25. 撤消绘图程序的方法(Java)
- 26. 如何在iPhone游戏应用程序中使用OpenGL ES绘制动画的直线?
- 27. 撤销按钮绘制应用程序
- 28. 画线用OpenGL ES 1.0
- 29. OpenGL ES 2.0程序流程
- 30. OpenGL ES的单个像素绘图机器人
撤消删除,通常最后一个动作only.Why你叫removeLastObject 50倍? – 2012-07-19 00:37:22
有没有人在OpenGL ES 2上做过这项工作?我有它在ES 1上工作,但是当我将它复制到ES 2时,它不起作用。我很确定它与缓冲区的重新渲染(上面的#3和$ 4)有关。任何人都能提供任何见解。当它重新渲染它不会画出所有的颜料,但只有几点... – 2013-11-18 17:32:24