Quali sono alcune buone risorse di apprendimento per OpenGL? [chiuso]


88

Uso OpenGL ES sull'iPhone da un po 'di tempo e in fondo mi sento piuttosto perso fuori dal piccolo set di comandi che ho visto negli esempi e adottato come il mio. Mi piacerebbe usare OpenGL su altre piattaforme e averne una buona comprensione.

Ogni volta che cerco un libro trovo queste Bibbie ENORMI che sembrano poco interessanti e molto difficili per un principiante. Se avessi un paio di fine settimana da dedicare all'apprendimento di OpenGL quale sarebbe il modo migliore di spendere il mio tempo (e denaro)?


12
Odio dirlo, ma OpenGL Superbible o OpenGL sono il modo migliore per imparare OpenGL. È un argomento complesso, quindi il libro deve essere di grandi dimensioni.
Rachel Blum,

6
È accessibile anche per un newby?
DFectuoso,

Risposte:


36

Fai attenzione quando guardi i tutorial di OpenGL, perché molti di essi (NeHe) inclusi ti insegnano solo cose che non dovresti più fare. Oggi OpenGL è una bestia diversa rispetto a 10 anni fa.

Alcuni begli esempi che evitano le cose deprecate possono essere trovati qui: http://www.g-truc.net/post-tech-content-sample.html

OpenGL Samples Pack 4.0.1.0 è un aggiornamento che porta il numero di campioni a un totale di 58 campioni; inclusi 13 campioni OpenGL 4, 33 campioni OpenGL 3.3 e 12 campioni OpenGL 2 per Visual Studio 2008 e 2010 in 32 e 64 bit.


Si collega a una montagna!
user14170,

65

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 discarde 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.


1
Ho appena iniziato a leggere il tuo libro / codice sorgente, ed è incredibile .. grazie mille per averlo rilasciato gratuitamente!
Alex Coplan,

Sebbene io sia un ragazzo delle telecomunicazioni, stavo semplicemente provando i tuoi tutorial. E sono davvero carini per un principiante. L'unica cosa è che, opengl sdk non ufficiale non è correttamente costruibile con Ubuntu12.04 + Eclipse. Esiste un modo per installarlo direttamente? (Come facciamo per GL, GLEW, GLU, glut ecc.)
iammilind

@iammilind: " non è costruibile correttamente " Come fallisce la compilazione? Inoltre, non c'è "installazione"; questo è metà del punto. È un meccanismo di copia / premake / ed esecuzione senza installazioni di sistema, dipendenze, PPM o qualsiasi altra cosa che non capisco o non ho idea di come usare in Linux. Lo metti dove vuoi, non dove il tuo sistema pensa che dovrebbe andare.
Nicol Bolas,

1
In Ubuntu, sfortunatamente, il processo di compilazione fallisce nella preamakefase stessa :( ... Sarà di grande aiuto, se nel tuo tempo libero puoi provare a eseguire le esercitazioni sul codice con Ubuntu + Eclipse. Per ora, nell'altro modo che sto seguendo è usare il materiale di lettura che hai fornito e metterlo in relazione con altri tutorial di codice. Il motivo è che ho visto "l'arcosintesi" il posto migliore dove andare sul web fino ad ora per l'apprendimento di OpenGL per principianti.
iammilind

@iammilind: ho notato che non hai presentato una segnalazione di bug. Come ti aspetti che queste cose vengano riparate senza una?
Nicol Bolas,


8

Il mio unico libro su OpenGL è "OpenGL SuperBible, 4a edizione" e il 5 ° sta per essere pubblicato tra qualche settimana. Penso che sia buono sia per i principianti che per i programmatori avanzati.

Modifica: potrei aggiungere non seguire le ultime tendenze tecnologiche se stai solo imparando a programmare. È probabile che una volta che diventi un esperto utilizzando una metologia, 5 nuove interfacce / versioni appena rilasciate. A quanto pare, abbiamo visto avanzare gli shader ogni 3 mesi. Quindi scegli quello che ha la migliore documentazione (in genere primitive), crea alcuni programmi e avanza gradualmente perché molto probabilmente ti imbatterai in codice più vecchio in futuro. Spero che sia d'aiuto!


Sto attraversando il superbo ora ed è davvero buono per le persone che non hanno uno sfondo grafico in quanto spiega tutti i concetti mentre vai avanti.
Spidey,

5

Come al solito il modo migliore per imparare è farlo. Vorrei trattenermi dal spendere soldi a meno che non ti senta davvero avvantaggiato dalla lettura di un libro di testo, la maggior parte (se non tutte) le informazioni possono essere trovate online. Oltre ad imparare OpenGL, potresti voler ripassare anche la tua Algebra lineare, non fa mai male.

Il grosso problema che ho affrontato è che molte cose che sono là fuori sono state private nella recente versione di OpenGL.

La migliore risorsa che sono riuscito a trovare è stata sul Blog di Joe . Fa del suo meglio per presentare la pipeline moderna e farti passare alcuni esempi in un modo più leggibile di quello che sono stato in grado di trovare altrove. Sembra che Nehe abbia aggiornato di recente un paio e mentre le loro lezioni sono ancora vecchie, alcune delle notizie potrebbero essere interessanti. Anche Lazy Foo ' era una grande risorsa, ma come Nehe i suoi tutorial usano materiale deprivato.

Penso che dopo un weekend o 2, una volta che ti senti a tuo agio, vai e fai un piccolo progetto per applicare tutto. Breakout o tetris - qualcosa in cui puoi concentrarti sul codice stesso. Impari molto di più quando esci e cerchi di realizzare un vero progetto, indipendentemente da quanto sia semplice.



3

Il modo migliore per imparare OpenGL è usarlo. Consiglierei di scrivere il tuo motore. Questo può sembrare un compito scoraggiante, e lo è. Il tuo primo motore non sarà molto buono, ma avrai imparato molto.

Fondamentalmente: scrivere un motore, usarlo per un gioco, capire cosa non ti piace e riscriverlo. Continua a farlo e migliorerai con OpenGL. :)

Di cosa avrai bisogno:

  • Un modo per caricare i modelli (.obj)
  • Un modo per caricare le trame
  • Illuminazione, nella pipeline a funzione fissa o in uno shader
  • Per scene leggermente più complesse di una teiera sullo schermo, un grafico della scena
  • Molti piccoli strumenti (classe vettoriale 3d, classe quaternion, classe camera, scene manager, ecc.)

Questo è già molto lavoro.


Potresti indicarmi qualsiasi documentazione sull'architettura o sui componenti di base che dovrebbe avere un "primo motore"? Questo potrebbe effettivamente sembrare un buon modo per sporcarmi le mani con gl ...
DFectuoso,


4
-1 Scrivere i motori come un modo per entrare in Gamedev non è molto buono. Non sai cosa mettere nel motore, per esempio. scientificninja.com/blog/write-games-not-engines
The Communist Duck

@TheCommunistDuck SADLY, scientificninja non esiste più. link web.archive
bobobobo

2

Ho imparato l'openl scrivendo un gioco "semplice": 3D Tetris !

Prova a creare il tuo gioco / app semplice:

  • Asteroids
  • pong
  • Semplice scroller laterale (potresti imparare a caricare i modelli per il giocatore / i nemici. Non ne hai? Usa i modelli di Quake)
  • Generatore di terreno 3d

Fai qualcosa di semplice che ti interessi!


2

Facciamo un po 'di OpenGL (ES) nel nostro gioco Orchard's Craps per iPhone, ma è stato gestito da un programmatore con un'abilità 3D pazza. Quindi, per questo motivo, ho imparato OpenGL (ES) in modo da sapere di cosa sto parlando e in modo da poter programmare insieme al team.

Un sito che ho trovato utile, con una serie di tutorial, è il blog di Jeff LaMarche: http://iphonedevelopment.blogspot.com ed ecco un link per i suoi post OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-da-terra-up-table-of.html

E da OpenGL.org ci sono questi due link che sono utili: http://www.opengl.org/code/ e http://www.opengl.org/resources/features/

Il modo migliore, è stato affermato più volte. Salta dentro e fai qualcosa di piccolo, interessante, e fatti strada. Si tratta di capire la scena, la telecamera e i materiali (shader). Una volta che hai compreso questi concetti, puoi iniziare a guardare i motori fisici, il rilevamento delle collisioni, gli effetti delle particelle e simili. Woot! (^_^)

Buona fortuna con tutti i tuoi sforzi, Kevin


2

Beh, nessuno ha parlato della Guida alla programmazione di OpenGL , non ho questa edizione particolare, ma quelle precedenti erano piuttosto buone.


1
Dimmi di più, per favore. Mi chiedo come sia meglio / diverso dalla super bibbia e se vale la pena leggere i libri così grandi (senza offesa, ma se ci vogliono più di 20 ore per leggere un libro, voglio essere sicuro che ne valga la pena =))
DFectuoso,


2

http://www.opengl-tutorial.org/

Dispone di tutorial per OpenGL "moderno" (core 3.0 / 4.0, ad es. Non viene insegnata alcuna roba obsoleta (come glBegin / glEnd)). Sebbene i tutorial utilizzino gli shader, le basi sono spiegate in dettaglio, costruendo una solida base matematica lungo la strada. Il testo è completato piacevolmente con esempi di codice * e visualizzazioni utili.

I tutorial intermedi trattano cose come ad esempio l'uso di Quaternions o Lightmap .

. * glm è usato come libreria matematica


1

Basta notare che il modo migliore per imparare OpenGL è orientato alle attività . Prova a fare qualcosa (come aggiungere una funzionalità al tuo gioco), quindi cerca ciò che è necessario per farlo .

Manuali e tutorial sono davvero noiosi senza un contesto più ampio, vale a dire qualcosa che va oltre il tutorial che vuoi realizzare da solo.


-1

Inizia con NeHe per ottenere rapidamente il tuo primo triangolo sullo schermo. Fai alcuni dei tutorial per principianti lì per capire i concetti di base della programmazione 3D. Se, come suggerisci, menzionando OpenGL ES, conosci già le basi della programmazione 3D (che cosa sono le matrici, a cosa servono, come diverse matrici vengono utilizzate per proiettare i vertici sullo schermo, quali sono i vertici, ecc.), quindi ti suggerisco di non perdere affatto tempo con NeHe, perché potrebbe rallentarti (insegnandoti cose che devi "disimparare" in seguito).

A parte questo, sono d'accordo che il modo migliore per impararlo è farlo. Un buon primo progetto non-ciao-mondo potrebbe essere un gioco 2D (o un motore di gioco 2D). L'uso di OpenGL moderno per applicazioni 2D può insegnare molti dei concetti pertinenti (ad esempio l'uso di buffer e shader) e sarà meno scoraggiante di un progetto 3D. Quindi, in seguito, puoi applicare ciò che hai imparato facendo un'applicazione 3D.


NeHe è obsoleto. Inoltre, sebbene la creazione di opere d'arte sia più semplice e tu abbia a che fare principalmente con quadratini testurizzati, ci sono molti casi angolari (ad es. Prodotti incrociati vettoriali) che rendono più difficile la scrittura di un gioco 2D prima di scrivere un gioco 3D. I giochi con grafica 3D ma gameplay 2D (ad esempio Pong, Breakout, ...) potrebbero essere più semplici dei giochi 2D / 3D puri.
Exilyth,

-4

Beh, mi è stato detto più volte che i tutorial di Nehe sono i migliori, immagino che si adatteranno anche a te! http://nehe.gamedev.net/ Ho comprato il libro rosso ...


Sembra un divertente set di piccoli pezzi da zero a un ottimo posto, grazie!
DFectuoso,

2
Devo dissentire fortemente. Sì, i tutorial NeHe sono lì da molto tempo, ma non hanno mai avuto uno stile molto buono e sono ormai obsoleti.
Andreas,

8
-1 Nehe è troppo obsoleto.
Axel Gneiting,

7
-1. Ho imparato ogni sorta di cose cattive da Nehe!
Gabriel Isenberg,

-1. NeHe dovrebbe etichettare i suoi tutorial come obsoleti e obsoleti.
Quazi Irfan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.