我目前正在研究一个允许用户使用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. 在绘图应用程序中撤消
- 3. 石英核心:撤消在iOS中的绘画应用程序
- 4. 撤消在绘画应用程序,如倒数第二和iDraft
- 5. 绘图应用程序撤消按钮
- 6. CGContextRef撤消绘画?
- 7. 如何绘制OpenGL ES的iPad背景图像应用程序
- 8. OpenGL Es 2.0 GLKit绘制像素
- 9. 使用画布在Android绘图应用程序中撤消和重做功能
- 10. 如何在我的iOS绘画应用程序中实现撤消功能?
- 11. 如何在Android的绘画应用中实现撤消功能?
- 12. 在Cocos2d/OpenGL-ES中检查先前绘制的像素?
- 13. 单线程OpenGL ES Android应用程序
- 14. OpenGL ES交换像素
- 15. Android OpenGL es转换像素
- 16. 绘制应用程序,使用framebuffer在OpenGL ES中渲染纹理
- 17. IPad OpenGL Es应用程序闪烁
- 18. Android,opengl ES 1.1,退出应用程序
- 19. 撤消绘图程序的方法(Java)
- 20. 用OpenGL ES绘制点线
- 21. 如何在iPhone游戏应用程序中使用OpenGL ES绘制动画的直线?
- 22. 画线用OpenGL ES 1.0
- 23. OpenGL ES 2.0程序流程
- 24. 绘画应用的高分辨率内容在iPad设备上使用OpenGL ES
- 25. ASP.net Web应用程序撤消支持
- 26. 如何在绘图应用程序中撤消和重做操作
- 27. 在OpenGL中绘制大量像素
- 28. 每个像素在OpenGL中绘图
- 29. 在Android OpenGL ES应用程序中加载纹理
- 30. 在iPhone OpenGL ES应用程序中实现flipview?
撤消删除,通常最后一个动作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