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.