2013-02-14 10 views
5

Sto sviluppando un'app per Android che distorce l'immagine. Sto usando la funzione di traduzione e ridimensionamento per distorcere l'immagine. L'immagine sta distorcendo bene. Ora voglio implementare la funzione di annullamento. Ma non è in grado di implementare la funzionalità. Qualcuno può aiutare a implementare la funzionalità di annullamento in opengl. Qualsiasi suggerimento o codice sarà utile. Grazie in anticipo.come implementare la funzionalità di annullamento in opengl in Android

+1

Questo non ha nulla a che fare con OpenGL. OpenGL disegna solo ciò che gli dici di disegnare. Qualsiasi funzionalità di annullamento riguarda il cambiamento di ciò che gli si dice di disegnare per essere quello che era un tempo. –

+0

@NicolBolas effettivamente sto distorcendo l'immagine al tocco del dito. L'immagine si restringe o si gonfia. La domanda è, cosa devo archiviare e come rifletterlo sulla vista. –

+0

Credo che dovresti memorizzare l'immagine corrente ad ogni inizio tocco. Quindi, quando l'annullamento è terminato, è sufficiente rilasciare l'immagine corrente e sostituirla con l'ultima immagine in coda. Alcune operazioni potrebbero essere invertite usando opengl, ma non penso che dovresti usare queste caratteristiche qui. Memorizza l'originale e ogni operazione eseguita con il dito o l'immagine per ogni passaggio. – Pihhan

risposta

0

Ray Tayek ha ragione. Usa lo schema di comando. Cioè, per ogni azione eseguita dall'utente, si esegue l'azione (comando) e tutti i dati relativi a tale azione nello stack di annullamento.

Diamo un'occhiata a un programma di pittura per semplicità. Il processo è direttamente applicabile alla tua app OpenGL. L'utente disegna una linea da x1, y1 a x2, y2. Il comando potrebbe essere rappresentato qualcosa di simile:

command = DrawLine 
data = x1, y1, x2, y2 

si sarebbe probabilmente bisogno di almeno due classi per i dati di Undo, ma sarebbe piccolo e di facile applicazione. Quando l'utente vuole annullare, basta estrarre l'oggetto principale dallo stack di annullamento, esaminarlo e portare a termine l'azione di annullamento associata (specifica per ciascun tipo di comando). Oppure, potresti anche includere l'azione di annullamento in ogni oggetto comando stesso. Quindi spingere il comando annullato sullo stack di ripetizione.

Questo dovrebbe essere sufficiente per iniziare. HTH

+0

modifica la mia risposta sopra. Per la grafica 3D, DwB ha un buon approccio. Usa l'immagine inalterata come parte dei tuoi dati di annullamento. – Frecklefoot

2

Sospetto che lo schema di comando non sia sufficiente per la situazione. Ciò si basa sul presupposto che non è facile invertire la distorsione dell'immagine anche quando si conosce la distorsione applicata.

Invece, sarà probabilmente necessario spingere l'immagine in pila appena prima di applicare la distorsione. Quindi, l'implementazione di annullamento sostituirà l'immagine corrente con l'immagine in pila. Ciò porterà a problemi potenzialmente interessanti risultanti dalla combinazione di redo e undo.

È possibile ottimizzare l'archiviazione degli oggetti di comando per modifiche facilmente reversibili e la memorizzazione di immagini per modifiche che non sono facilmente reversibili.

Problemi correlati