2010-04-25 7 views
1

J'essaie de comprendre comment implémenter un simple "défaire" de la dernière action de dessin sur l'écran de l'iPhone. Je dessine en préparant d'abord le tampon d'image:OpenGL ES Simple Annuler le dernier dessin

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

Je prépare alors le tableau de vertex et dessiner ainsi:

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

Comment puis-je simplement annuler cette dernière action? Il devrait y avoir un moyen de sauvegarder l'état précédent ou une fonction intégrée OpenGL ES, je pense.

Merci

+0

vous pouvez vérifier: http://stackoverflow.com/questions/6281789/opengl-es-undo-in-a-pixel-painting-app/9764796#9764796 peut-être le peut vous aider – charse

Répondre

0

Vous pouvez saisir une image à partir du contexte OpenGL ES chaque fois que vous dessinez quelque chose et enregistrer dans le paquet de l'application sous forme de fichier d'image. Cela enregistre la mémoire d'exécution de l'application. Lorsque vous appuyez sur Annuler, vous venez de dessiner l'image enregistrée précédente dans le contexte et c'est tout.

Comment saisir l'image du contexte, vous trouverez ici: http://www.iphonedevsdk.com/forum/iphone-sdk-development/35281-grab-image-opengl-es-context.html

1

réponse tardive Je sais, mais Incase quelqu'un vient d'autre sur ce, je posterai cela de toute façon.

Vous avez également la possibilité de stocker les points dans un tableau à chaque appel de touchesBegan et touchesMoved. Comme ici:

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

Et quand touchesEnded, vous pouvez déplacer ce à un autre tableau mutable, tels que:

[allPoints addObject:allCurrentStroke]; 

Ensuite, vous pouvez itérer tableau allPoints, en passant chaque sous-réseau à la fonction de rendu . Cette méthode présente des avantages et des inconvénients par rapport à la méthode de stockage des images. Tout d'abord, il économise de l'espace sur le disque dur ... mais au prix de la mémoire. En utilisant GL_POINTS, comme vous l'êtes, vous remarquerez qu'il faudra du temps pour redessiner votre image après avoir cliqué sur annuler ... mais vous pouvez défaire tout le chemin jusqu'à la première touche facilement! Donc, cela dépend si vous voulez la vitesse ou la flexibilité ... Si quelqu'un a une meilleure méthode pour annuler, s'il vous plaît faites le moi savoir!