Ci sono molte cose da cui potresti imparare. Ecco il mio pensiero su ciascuno, dal punto di vista di qualcuno di nuovo su OpenGL.
Esempi OpenGL
C'è un sacco di codice di esempio là fuori che puoi leggere. Gli esempi di G-truc sono piuttosto estesi e coprono molte funzionalità avanzate.
Tuttavia, se sei un principiante , imparare dagli esempi è un modo terribile di imparare. Leggere il codice che non capisci davvero non ti insegnerà perché funziona. Infatti, il testo nella pagina collegata sopra specifica e giustamente afferma che gli esempi non sono per principianti.
Imparare dal codice sorgente nudo, a meno che non sia fortemente commentato (a quel punto è un tutorial) non è una cosa facile. Il tentativo di farlo incoraggia la programmazione in stile cult del carico e la codifica copia e incolla. È molto facile convincerti che capisci come funziona qualcosa quando tutto ciò che stai realmente facendo è semplicemente copiare il codice da un posto all'altro. Potresti essere in grado di mescolare e abbinare le cose, ma la vera comprensione è difficile da ottenere senza un adeguato materiale didattico.
Libri OpenGL
Esistono numerosi libri acquistabili reali per lo sviluppo di OpenGL. Tratterò i miei pensieri sui due più grandi qui.
Redbook OpenGL
Questo è alquanto problematico da un punto di vista puramente pratico. Vedi, la 7a edizione copre GL 3.0 e 3.1. Che è piuttosto vecchio. Da allora ci sono state molte utili funzioni aggiunte a OpenGL, caratteristiche che cambiano il modo in cui scrivere le cose. E non tutte sono funzionalità hardware.
L'ottava edizione arriverà "presto" e riguarderà la 4.1. Non si sa se copre le vecchie cose a funzione fissa.
Direi che questo libro è OK. Il problema più grande con esso è l'organizzazione delle informazioni. È più come un manuale di riferimento completo che un libro fatto per l'apprendimento. Ecco cosa intendo.
Una delle cose più importanti che si dovrebbero fare quando si insegna è non sovraccaricare lo studente con informazioni non importanti. Ma il Redbook fa esattamente questo. Quando si introduce materiale, introduce molto materiale. Gran parte del superfluo per il compito da svolgere.
Di cosa parli e quando ne parli sono cruciali per rendere il tuo libro una buona risorsa di apprendimento. Il Redbook non trattiene mai le informazioni fino a un momento più appropriato. Quando parla di come disegnare triangoli e primitivi, parla di tutto sul disegnarli, tutto in una volta. Copre ogni opzione, ogni funzione, ogni parametro, ecc.
Questa non è solo una buona organizzazione delle informazioni.
OpenGL Superbible
La quinta edizione di questo libro tratta solo GL 3.x di base, quindi nessuna funzione fissa.
Tuttavia, l'organizzazione generale del libro è più o meno identica all'organizzazione della versione della quarta edizione. Ciò sembra impossibile poiché la 4a edizione ha utilizzato la funzione fissa e non ha introdotto shader fino a molto tempo dopo.
Il modo in cui è stato realizzato è la mia lamentela n. 1 sul libro. In sostanza, l'autore ha creato una libreria che implementa una forma di OpenGL a funzione fissa. Avvolge VAO, oggetti buffer, shader e varie altre cose, in modo che possa arrivare a disegnare oggetti, matematica di matrici e trame senza dover parlare di cose come il modo in cui la pipeline GL funziona in dettaglio.
Nascondendo tutti questi dettagli, rende il materiale più facile da digerire. Ma vedrai spesso persone che si allontanano dal Superbible senza sapere come funzionare effettivamente senza la libreria. Non capiscono davvero come gli shader si connettono agli oggetti buffer, come i dati scorrono lungo la pipeline, ecc.
È un libro utile, più del Redbook. Se tutto il resto fallisce, farà il lavoro. Ma penso che potrebbe essere migliore.
Inoltre, secondo alcuni revisori, sembra che si perdano alcune informazioni utili, come impacchettare i dati degli attributi usando valori normalizzati e simili.
Materiali online OpenGL
Ci sono molti materiali online da cui si potrebbe imparare.
Tutorial di NeHe
I tutorial di NeHe , come altri hanno affermato, sono estremamente obsoleti . Si concentrano su OpenGL a funzione fissa. Si afferma spesso che è facile imparare GL a funzione fissa, il che è vero. Ma questo non lo rende una buona idea.
Comprendere come funziona veramente la pipeline a funzione fissa è difficile. Andrei al punto di dire che è più difficile dell'apprendimento degli shader. Una volta ottenuto, gli shader sono semplici. Comprendere la complessità delle cose dell'ambiente di trama, i combinatori e quant'altro, è molto complicato e richiede frequenti visite ai documenti di riferimento per assicurarsi che tutto sia impostato correttamente. Anche se capisci tutto correttamente, è facile fare un piccolo errore che causa la rottura di tutto.
La differenza è che puoi far funzionare le funzioni fisse senza capirlo. Questo incoraggia la programmazione di culto del carico. Rende possibile ottenere qualcosa sullo schermo senza sapere davvero cosa si sta facendo. Nei forum di OpenGL.org, vediamo costantemente domande sulle minuzie che circondano la funzione fissa, da persone che non sanno come funziona gluLookAt, a difficoltà con l'illuminazione, a persone che cercano di ottenere un effetto particolare per lavorare con l'ambiente delle texture.
Quindi no, non penso che NeHe sia un buon modo per imparare OpenGL.
Il commento sopra può essere utilizzato per qualsiasi tutorial non basato su shader, come Swiftless , Lighthouse e così via.
Programmazione OpenGL di Wikibook
La programmazione OpenGL di Wikibook è probabilmente l'equivalente moderno di NeHe. Copre GL versione 2.1, perché vogliono mantenerlo rilevante per le piattaforme mobili. Se questo è importante per te, allora guarda qui.
L'altro problema con NeHe, e quindi questo Wikibook, è la grande attenzione al codice sorgente. Il rapporto testo-codice è molto piccolo; c'è molto codice, ma il testo non spiega davvero come funziona tutto.
Ad esempio, guarda in fondo al Tutorial 2. Presenta la fusione. Non dice come funziona la fusione. Non dice cosa glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
significhi o faccia effettivamente. Dice solo: "Ecco del codice che rende le cose trasparenti".
Questo non è il miglior ambiente di apprendimento.
Tutorial incompleti
Swiftless ha una serie di OpenGL 4.x. tutorial . Durian Software ha anche alcuni tutorial OpenGL basati su shader . E ci sono i tutorial di "OpenGLBook.com" .
La cosa che tutti questi hanno in comune sono ... che sono incompleti e abbandonati. Hanno ottenuto tutti circa 4-5 tutorial e poi sono stati abbandonati. Nessuno di loro ha raggiunto la trama, l'illuminazione o qualcosa del genere. Bene, Durian ha colpito la trama ma non l'illuminazione.
Molto si può ottenere da loro, ma manca anche molto.
Autopromozione spudorata
Rivedere i miei tutorial sulla Grafica 3D moderna sarebbe un orribile conflitto di interessi. Quindi, invece, parlerò a lungo dell'organizzazione dietro di loro e del perché penso che siano buoni.
Oh e sì, sto lavorando al Tutorial 17. Il progetto non è morto.
I primi tre capitoli riguardano davvero come funziona la pipeline OpenGL. Il superabile fallì perché tentò di nascondere i dettagli. Invece, provo a spiegare quei dettagli davvero, molto bene. Ripetutamente. L'introduzione spiega la pipeline in testo semplice. Il primo tutorial lo spiega con l'accompagnamento del codice. E il secondo tutorial lo visita ancora di più.
Da lì, passo naturalmente al posizionamento degli oggetti. Questo introduce le uniformi, ma non volevo inceppare uniformi e proiezioni prospettiche contemporaneamente. Quindi ho separato i due concetti. Dopo la proiezione, il buffering di profondità sembrava un passo successivo ragionevole, seguito da come funzionano trasformazioni e matrici. Dopodiché, telecamere. La rotazione con i quaternioni è stata un'aggiunta tardiva, ma ritengo sia stata una cosa importante di cui parlare per il programmatore grafico in erba.
I tutorial sull'illuminazione si basano di nuovo uno sull'altro. Illuminazione diffusa, quindi per frammento, quindi speculare. La gamma dinamica è stata una scelta interessante. La maggior parte del materiale introduttivo cerca di starne alla larga, ma lo abbraccio. Oggigiorno non sei un programmatore di grafica se pensi che l'intensità della luce sia sempre nell'intervallo [0, 1]. E in questi giorni non sei un programmatore di grafica se non sai come mantenere una pipeline di colori lineare.
L'ultimo nell'illuminazione, sugli impostori, era strano. Cerco di progettare tutorial che risolvano i problemi piuttosto che mostrare solo alcune funzioni OpenGL, in particolare mentre il libro continua. Gran parte del mio progetto di tutorial deriva dalla ricerca di modi per parlare di determinati argomenti, rendendoli ancora problemi reali e non ovvi, "stiamo imparando X ora". Gli shader Geometry sono difficili, perché in realtà non risolvono molti problemi.
Gli importatori rappresentavano un problema che i GS erano effettivamente utili per la risoluzione. Inoltre, mi ha permesso di parlare di altre cose meno usate come discard
e di cambiare la profondità di un frammento. E mostra davvero il potere degli shader: puoi trasformare un quadrato piatto in una sfera.
Anche i tutorial sulla trama sono interessanti. Uno dei motivi per cui ho rimandato a parlare di trame a colori diffuse fino a quando il terzo è stato quello di non parlare per un po 'di trame sRGB. In questo modo, potrei parlare dei problemi di base relativi alle trame (caricamento dei dati, inserimento in shader, filtro, clamping, ecc.) Senza dover affrontare problemi lineari. Quindi ho potuto passare un intero tutorial solo su quell'argomento. Ciò mi ha permesso di sottolineare davvero quanto sia importante mantenere una pipeline di colori lineare.
È uno dei miei animali domestici.