Buone risorse per l'apprendimento di OpenGL moderno (3.0 o successivo)? [chiuso]


73

Mi imbatto nella ricerca di una buona risorsa per iniziare con OpenGL (3.0 o successive). Bene, ho trovato molti libri ma nessuno di essi può essere considerato una buona risorsa!

Ecco due esempi:

Guida alla programmazione OpenGL (7a edizione) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Questo è COMPLETO di materiale obsoleto! Quasi tutti i capitoli iniziano con una nota al riguardo.

OpenGL Superbible (5a edizione) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Questo libro utilizza una libreria creata dall'autore per spiegare gli argomenti principali, nascondendo ciò che vuoi imparare! Non voglio imparare come usare la tua biblioteca! Voglio imparare OpenGL!

Spero che tu capisca che questa non è la stessa domanda come "ehi, non sono in grado di usare Google ... dimmi come imparare OpenGL". Ho appena terminato una ricerca completa e approfondita, ma non riesco a trovare una risorsa valida e completa per imparare il "nuovo" OpenGL evitando argomenti obsoleti.

Qualcuno può guidarmi nella giusta direzione? Conosco C ++ e ho 10 anni di esperienza nello sviluppo ... dove posso trovare una buona risorsa ?! Voglio passare del tempo su di esso e voglio imparare profondamente.

Risposte:


69

Concordo sui libri di cui sopra con alcune note:

  • La 8a guida alla programmazione di OpenGL è ora disponibile ed è stata rifatta per il moderno OpenGL 4.3.

  • Il SuperBible 5th ed, ti fornisce una libreria stampella per iniziare, ma mentre sfogli il libro reimplementi la funzionalità di quella libreria, quindi alla fine dovresti essere completamente versato. Consiglio vivamente di avvolgere cose OpenGL in qualcosa se usi un linguaggio orientato agli oggetti. Sto lavorando sulla mia libreria per divertimento, che sembra essere la strada da percorrere, implementandola da solo, capisco tutti i dettagli e ho solo bisogno di inserire i bit che effettivamente uso. Inoltre puoi sottrarre alcune cose come l'invio di dati agli shader (non è shinyMaterial.setColor (rosso) molto più bello), questo può anche permetterti di eseguire il backport di alcune cose fornendo alternative legacy. C'è anche oglplus .

Il problema principale con l'apprendimento del moderno 'core' OpenGL è che per avviare una pipeline di base anche se è solo per disegnare un cubo è necessario comprendere quanto segue:

  • Operazioni con Matrix (usa GLM se usi C ++, avrai anche bisogno di una versione dell'SDK non ufficiale MatrixStack OpenGL qui , o della mia semplice qui .)
  • Programmazione shader GLSL.
  • associazione di dati a shader e Vertex Buffer Objects. Se volessi imparare solo un vero profilo di base puro, tutti dovrebbero essere implementati contemporaneamente e se qualcosa è rotto non vedrai nulla e quasi non avrai idea di dove sia andato storto. Anche questo non copre cose come l'illuminazione di base (dove è necessario imparare gli algoritmi di shading oltre al linguaggio di programmazione).

Ma non è necessario iniziare nel deepend con il profilo principale. Usa alcune delle funzionalità obsolete all'inizio, quasi tutto lo supporterà ancora, quindi modernizzalo.

Un altro problema è che OpenGL "moderno" può davvero riferirsi a 3 cose:

  • Il primo è la pipeline di shader programmabile rispetto alla pipeline a funzione fissa. Le tecniche "moderne" di base sono state possibili da quando OpenGL 2.0 è stato rilasciato nel 2004, quando sono stati introdotti gli shader (i tutorial non sono stati aggiornati). Anche 1.5 aveva Vertex Buffer Objects che sono un'altra pietra miliare del moderno OpenGL. Un problema è che anche oggi gli sviluppatori OpenGL potrebbero non essere in grado di sfruttare tutte queste cose, ci sono molti netbook scadenti là fuori con quei chipset Intel che supportano solo OpenGL 1.5 e telefoni come iPhone / Android meno recenti che supportano solo OpenGL ES 1.1. L'unica vera differenza tra queste cose in OpenGL 2.0 e OpenGL 3.x / 4.x è ora obbligatoria per il profilo principale.

  • Il moderno OpenGL potrebbe anche riferirsi alle nuove cose che sono in 3.x, 4.x. Cose come Vertex Array Oggetti , del framebuffer oggetti , oggetti Buffer Uniformi / std140 , qualificazioni di layout , subroutine GLSLe così via. Molti di quelli che ho trovato possono rendere le cose molto più belle da programmare. Possono anche cambiare sottilmente le tubazioni complessive del motore. Sono anche cose che con un piccolo sforzo è possibile eseguire il backport creando funzioni di supporto e così via (ad esempio, scrivere un oggetto gestore shader generico che è possibile utilizzare per impostare uniformi, se gli UBO sono supportati utilizzare che altrimenti gestisca il caricamento manuale dei valori negli shader , magari mettici un po 'di shader riscrivendo le cose per automatizzarle). Questa roba funziona solo su nuove schede video, non vedrai alcun netbook che la supporti o qualsiasi console di videogioco di ultima generazione (usano il loro sottoinsieme di OpenGL simile a OpenGL ES). L'ultimo OSX ne ha solo 3.

  • NextGL ultra moderno OpenGL. OpenGL 4.3 è stato appena rilasciato. Viene fornito con shader di elaborazione, glMultiDrawElementsIndirect e buffer di archiviazione shader. Ciò consente una pipeline fondamentalmente diversa in cui si caricano tutti i dati dei vertici sulla GPU e quindi si usano gli shader di calcolo per calcolare ciò che dovrebbe essere disegnato piuttosto che farlo nel proprio programma. Purtroppo questo è molto nuovo, quindi non conosco alcun tutorial decente su di esso. Dai un'occhiata alla recensione di OpenGL 4.3 che fornisce uno schema di come funziona (anche l'autore afferma che è stato rilasciato un articolo GPU Pro che lo spiega). Essendo nuovo di zecca non sarà supportato da nessuna parte in questa fase (a meno che tu non sia su una nuova scheda nvidia con driver beta). Anche se potresti essere in grado di utilizzare OpenCL / CUDA per implementarne una parte.

Vorrei saltare glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix e così via. Invece inizia con l'apprendimento degli oggetti Vertex Buffer senza shader, non provare il 3D a questo punto solo un triangolo bianco piatto in modo da non dover lavorare con le operazioni 3d utilizzando le matrici (poiché dovrai imparare a legarli presto agli shader, quindi non ha senso imparare alla vecchia maniera). Successivamente, aggiungi gli shader, dovrai cambiare il modo in cui gli oggetti del buffer dei vertici sono associati poiché ora vorrai utilizzare gli attributi dei vertici. Scopri come comunicare loro le proprietà tramite le uniformi. Quindi apprendi le operazioni con le matrici con GLM, lega le matrici agli shader e avvia il 3D. Una volta che lo hai fatto, in pratica si tratta solo di imparare cose più avanzate come la trama,

Alcuni tutorial OpenGL moderni generali online, che coprono la pipeline di programmazione shader che la maggior parte dei quali funziona con OpenGL 2.0+:

Per altre risorse di apprendimento generali. OpenGL ES potrebbe essere un buon punto di partenza. OpenGL ES ha eliminato tutte le cose deprecate. OpenGL 4.1 ha piena compatibilità con OpenGL ES, quindi dovrebbe essere possibile prendere un programma OpenGL ES ed eseguirlo in OpenGL 4.1. E i principi di base sono gli stessi per entrambi.

Alcune cose da notare è che OpenGL ES 3.0 è appena stato rilasciato ma, poiché è nuovo, non avrà ancora tutorial o supporto hardware. Non sembra avere grandi cambiamenti fondamentali (come la differenza tra pipeline fissa e modello shader che abbiamo visto con OpenGL ES 1.0-> 2.0). Quindi probabilmente non imparerai cose obsolete.

Inoltre, OpenGL ES utilizzerà spesso EGL, quindi dovrai imparare un altro modo per aprire una finestra, ma non dovrebbe essere troppo difficile. Altrimenti ci sono alcuni wrapper / emulatori OpenGL ES in giro o puoi imparare su Android / iPhone se ne hai uno (o guardare usando i loro emulatori).

C'è la guida alla programmazione Addison Wesley OpenGL ES 2.0 che è l'equivalente del libro rosso.

Puoi anche guardare roba focalizzata sugli shader GLSL poiché è lì che vive la maggior parte delle moderne OpenGL. Devi solo assicurarti che ciò che apprendi copra il lato "colla" delle rilegature OpenGL.

Dai un'occhiata alla OpenGL Shading Language 2nd edition (Orange Book).

Il ricettario di OpenGL 4.0 Shading Language copre alcune cose OpenGL più spigolose ma non è esso stesso un tutorial completo. Vale sicuramente la pena dare un'occhiata alle ultime pratiche OpenGL del mondo reale come oggetti buffer uniformi e subroutine GLSL.

Infine, potresti dare un'occhiata a WebGL, anche se essere in JavaScript sarà leggermente diverso e molto più difficile da eseguire il debug.


3
+1, wow. L'unica piccola modifica che suggerirei sarebbe quella di utilizzare gli array di vertici sul lato client all'inizio poiché sono un percorso più semplice per i VBO, ma senza alcune trappole per orsi in cui i principianti possono cadere.
Maximus Minimus,

1
Ho pensato che fosse meglio evitare di apprendere / utilizzare in modo specifico funzionalità obsolete poiché si trattava di cose che avrebbero dovuto essere disimparate. Le altre cose deprecate che suggerisco di usare sono cose che OpenGL farà per impostazione predefinita, come essere in grado di eseguire il rendering senza usare uno shader e supporre che l'attributo vertice 0 sia la posizione in cui entrambe dovrebbero esplodere quando si attiva il profilo principale.
David C. Bishop,

2
La sesta edizione del SuperBible è appena stata rilasciata ed è MOLTO migliore della quinta edizione. Lo consiglio vivamente, lo consiglio vivamente, è facile seguire e imparare il moderno OpenGL con.
Filippo,

2
Il sito gltut di Arcsynthesis non è più disponibile, ma il tutorial può ancora essere scaricato da bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken il

15

Dimentica i libri almeno fino alla pubblicazione dell'ottava edizione della guida alla programmazione.

Oltre al tutorial menzionato , ho trovato questo sito utile, poiché va oltre le basi abbastanza rapidamente. Sono entrambi un'ottima introduzione al moderno OpenGL. Una volta superato questo, avrai solo bisogno della documentazione, OpenGL è facile da usare una volta che ti ci abitui. Il resto è teoria e matematica della computer grafica.


11

Sono stato esattamente nella tua stessa situazione e ho finalmente trovato quello di cui avevo bisogno per iniziare.

Prima di tutto vai qui: http://www.arcsynthesis.org/gltut/ . Questo sito è fantastico, buoni esempi di lavoro e una profonda spiegazione di ciò che sta succedendo. Anche se il codice è scritto in C ++, lo sto usando per insegnarmi a scrivere demo OpenGL in Lisp. Inoltre è totalmente libero dal vecchio modo di fare le cose, quindi non devi preoccuparti di prendere cattive abitudini.

Vorrei sottolineare che, sebbene sia "solo un altro sito Web", non ho trovato libri che forniscano una spiegazione delle basi così chiara e concisa.

Una volta che avrai attraversato il sito sopra, avrai già una conoscenza di base degli shader e molto di ciò che devi sapere può ora essere cercato su Google (guarda bene le opzioni o le risorse del webgl mentre rimuovono tutte le cose deprecate) o trovato nel sito wiki di Opengl. Il successivo è orrendamente criptico se non hai sotto i fondamenti i fondamenti del sito di artsintesi, ma abbastanza utile quando sai all'incirca cosa stai cercando.

Anche per uno sguardo molto approfondito su GLSL, dai un'occhiata a: OpenGL Shader Language (The Orange Book) Sto lavorando molto lentamente su questo, ma ti darò la comprensione di scrivere shader per permetterti di proseguire questa ricerca. Ti avvertirò che questo libro ha, nelle parole di un recensore, "200 pagine di contenuti di alta qualità racchiuse in un libro di 600 pagine" ma la storia e le informazioni extra possono fornire il contesto di cui hai bisogno per capire i percorsi che OpenGL come standard è andato giù (beh, mi sta aiutando comunque!)

Spero che questo aiuti e buona fortuna, non vedo l'ora di vedere / suonare il tuo lavoro in futuro!

AGGIORNARE

Sembra che l'arcosintesi sia tristemente offline, tuttavia il sito è stato convertito in pdf qui e il codice è stato rispecchiato qui .

Anche in pochi anni da quando la mia risposta originale learnopengl.com/ è diventata assolutamente geniale. Mentre raccomando ancora l'arcosintesi per l'eccellenza pura della sua introduzione all'opengl moderno, il sito del learnopengl copre molto di più dell'arcosistesi e lo gestisce con un linguaggio accessibile, abbiamo creato esempi e codice open source. Fondamentalmente, è dannatamente buono, vai a dare un'occhiata!

Per quanto riguarda i libri, non sono andato troppo lontano con il libro arancione, ma posso consigliare la terza edizione di "Real-Time Rendering" . Una volta che sei pronto per le cose tecniche, questo libro è una miniera d'oro.


2
OH MIO DIO! il primo link è fantastico!
MatterGoal

Il sito gltut non è più disponibile, ma il tutorial può ancora essere scaricato da bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken il

Buon punto, aggiornerò il mio post anche con consigli extra.
Baggers,


5

Due siti che sono stati molto utili per me sono: http://www.arcsynthesis.org/gltut/ e http://ogldev.atspace.co.uk/

Inoltre, la wiki di OpenGL è una risorsa estremamente valida e aggiornata.

Una volta superati questi, consiglio vivamente di mordere il proiettile e leggere le specifiche OpenGL. Allora sarai un professionista.


Sì, trovo che i tutorial online siano molto più utili della maggior parte dei libri. La 5a edizione di SuperBible è estremamente deludente.
Filippo

Il sito gltut non è più disponibile, ma il tutorial può ancora essere scaricato da bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken il

4

Il miglior libro che ho trovato che copre OpenGL "moderno" è http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Anche se è un "libro di cucina", ti guida attraverso i passaggi necessari per impostare il rendering e quali tipi di librerie di accompagnamento ti serviranno (image lib, vector math lib).

Oltre a ciò, passa attraverso ogni sorta di cose comuni per le quali potresti voler usare OpenGL, senza scavare troppo in profondità in nulla (come per le ombre, copre la mappatura delle ombre e il filtraggio delle mappe delle ombre, ma non entra in nessuna delle altre metodi complessi di mappatura dell'ombra).

Consiglio anche di prendere il libro arancione.


Grazie @Jari. Non è "solo" riguardo allo shader? Voglio dire, questo libro introduce alle tecniche OpenGL e agli shader?
MatterGoal

2
@MatterGoal: OpenGL moderno è quasi completamente basato su shader. Questo libro tratta il lato vincolante delle cose OpenGL. Consiglio anche questo libro, ma come compagno di qualcos'altro, non è proprio per il libro di apprendimento di base ma mostra alcuni grandi usi del mondo reale delle pratiche moddrn.
David C. Bishop,

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.