2011-10-05 10 views
7

Vorrei sapere quali vantaggi ottengo dall'utilizzo di Core Graphics anziché di Open GL ES. La mia domanda principale si basa su questo:Vantaggi dell'utilizzo di Core Graphics

  • Creazione di animazioni di visualizzazione semplici.
  • Creazione di oggetti visivamente accattivanti (Grafica come Core Plot, ad esempio Oggetti animati, ecc.).
  • Tempo consumare (sia l'apprendimento e l'attuazione)
  • semplici giochi 2D
  • giochi 2D complessi
  • Giochi 3D
  • Codice manutenzione annuncio codice anche più pulito.
  • Integrazione più semplice con altri elementi dell'interfaccia utente.

Grazie.

risposta

21

In primo luogo, voglio chiarire un po 'di terminologia qui. Quando le persone parlano di Core Graphics, generalmente si riferiscono al disegno 2D di Quartz, che è un'API di disegno vettoriale 2D. È usato per disegnare elementi vettoriali sullo schermo o in contesti fuori schermo come i PDF. Core Animation è responsabile dell'animazione, del layout e di alcuni effetti 3D limitati che coinvolgono livelli rettangolari e elementi dell'interfaccia utente. OpenGL ES è un'API di livello inferiore per parlare con l'hardware grafico su dispositivi iOS sia per il disegno 2D che 3D.

Stai chiedendo molto alla tua domanda e il giudizio su cosa è meglio in ogni scenario è soggettivo e completamente all'altezza dello sviluppatore e delle loro esigenze particolari. Posso, tuttavia, fornire alcuni suggerimenti generali.

In generale, una raccomandazione che si vedrà nella documentazione e nelle presentazioni di Apple da parte degli ingegneri è che si utilizza al meglio il più alto livello di astrazione che risolve il problema specifico.

Se è sufficiente disegnare un'interfaccia utente 2D, la prima cosa da provare è implementare questo utilizzando gli elementi UIKit forniti da Apple. Se non hanno le capacità di cui hai bisogno, crea visualizzazioni utente personalizzate. Se stai progettando un codice multipiattaforma Mac-iOS (come nel framework Core Plot), potresti utilizzare i CALayer Core Animation personalizzati.Ogni passaggio in questo processo richiede di scrivere più codice per gestire le cose che il livello sopra ha fatto per te.

Si può fare una quantità sorprendente di cose con Core Animation, con prestazioni piuttosto buone. Questo non è solo limitato alle animazioni 2-D, ma può estendersi anche in qualche semplice lavoro 3D.

OpenGL ES è sotto il disegno di tutto ciò che vedi sullo schermo per un dispositivo iOS, anche se questo non è esposto a te. In quanto tale, fornisce la minima astrazione per il rendering su schermo e richiede di scrivere la maggior parte del codice per ottenere qualcosa. Tuttavia, può essere necessario in situazioni in cui si desidera estrarre la maggior parte delle prestazioni dal display 2-D (ad esempio in un gioco d'azione) o per rendere veri oggetti e ambienti 3D.

Di nuovo, tendo a raccomandare che le persone inizino al più alto livello di astrazione quando scrivono un'applicazione, e scendono solo quando scoprono che non possono fare qualcosa o che le prestazioni non rientrano nelle specifiche che stanno cercando di colpire. Meno linee di codice rendono le applicazioni più facili da scrivere, eseguire il debug e mantenere.

Detto questo, ci sono alcuni buoni framework che si sono sviluppati attorno all'estrazione di OpenGL ES, come cocos2D e Unity 3D, che potrebbero rendere più semplice il lavoro con OpenGL ES in molte situazioni. Per ogni caso, dovrai valutare cosa ha senso per le particolari esigenze della tua applicazione.

4

Fondamentalmente, utilizzare OpenGL se si sta facendo un gioco. Altrimenti, usa CoreGraphics. CoreGraphics ti permette di fare cose semplici incorporate nel tuo codice UI normale.

Creazione di animazioni di visualizzazione semplici. -> CG

Creazione di alcuni oggetti visivamente accattivanti (Grafica come Core Plot ad esempio, Oggetti animati, ecc.). -> CG

In termini di tempo (sia di apprendimento che di implementazione) -> OpenGL e CG sono entrambi un po 'difficili all'inizio.

giochi 2D semplici -> OpenGL

giochi 2D complessi -> OpenGL

Giochi 3D -> OpenGL

Codice manutenzione annuncio di codice anche più pulito. -> Irrilevante

+0

Vuoi scambiare l'apprendimento di OpenGL con Cocos2d (ad esempio) in giochi 2D? Ho modificato il mio post originale, ho aggiunto "l'integrazione più semplice con altri elementi dell'interfaccia utente". Grazie Andrew. – Peres

+0

Aggiungo che un approccio combo può anche funzionare bene per alcune situazioni: usa CoreGraphics per disegnare un asset in anticipo, quindi OpenGL per organizzarlo e presentarlo ogni frame. –