2010-04-25 62 views
1

我想弄清楚如何在iPhone屏幕上實現最後一個繪圖操作的簡單「撤銷」。我畫通過首先製備幀緩衝:OpenGL ES簡單撤消最後繪圖

[EAGLContext setCurrentContext:context]; 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 

我再準備頂點數組並得出這樣:

glVertexPointer(2, GL_FLOAT, 0, vertexBuffer); 
glDrawArrays(GL_POINTS, 0, vertexCount); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

我如何簡單的撤銷這最後一個動作?我想,必須有一種方法來保存以前的狀態或內置的OpenGL ES功能。

感謝

+0

你可以檢查:http://stackoverflow.com/questions/6281789/opengl-es-undo-in-a-pixel-painting-app/9764796#9764796 也許可以幫助你 – charse 2012-03-19 03:57:54

回答

1

晚答案,我知道,但櫃面其他人臨到這一點,無論如何,我會張貼此。

您還可以在每個touchesBegan和touchesMoved調用中將點存儲在數組中。正如在這裏:

[currentStroke addObject:[NSValue valueWithCGPoint:point]]; 

當touchesEnded,你可以將這個到另一個可變數組,如:

[allPoints addObject:allCurrentStroke]; 

然後,您可以通過allPoints陣列迭代,每個子陣列傳遞給渲染功能。這種方法與存儲圖像的方法相比有優點和缺點。首先,它節省了硬盤空間......但是以內存爲代價。像使用GL_POINTS一樣,您會注意到,在您點擊撤消後,重繪圖片需要一些時間......但您可以輕鬆地撤消第一次觸摸!所以,這取決於你是否想要速度或靈活性......如果任何人有更好的方法來撤消,請讓我知道!