2012-06-06 17 views
8

Sto provando ad imparare OpenGL. Ho esperienza con C e C++, creazione di un ambiente di costruzione e tutto il jazz, ma sto cercando di capire un buon punto di partenza.OpenGL Core e compatibilità

Sono a conoscenza della pipeline di funzioni fisse che era prominente in OpenGL < = 2.1 e sembra relativamente facile iniziare. Tuttavia, il profilo principale che OpenGL spinge in OpenGL> = 3.1 mi fa desiderare di stare lontano da FFP a causa della deprecazione. Ma sono confuso su come tutto funzioni in 3.1 e sopra. Nella 2.1 e sotto hai il tuo glBegin (GL_WHATEVER) e glEnd() quando disegni forme. La prima cosa che ho notato guardando attraverso l'API del profilo principale è che quelle due chiamate di funzione sono sparite. Mi rendo conto che probabilmente c'è una semplice sostituzione, ma è abbastanza scioccante vedere qualcosa di così (apparentemente utile) tolto da un compito così fondamentale. Sembra quasi come deprecare printf() dalla libreria c standard. E quando lavoro attraverso il nuovo Red Book, usano ancora il vecchio codice deprecato che confonde ulteriormente il mio pensiero.

Durante la lettura di varie risposte a domande simili, vedo il tipico "shader based" o "è tutto fatto con gli shader" ecc. Ecc. Se voglio disegnare un semplice quadrato bianco su uno sfondo nero (il primo esempio nel nuovissimo Red Book), non capisco come uno shader sia rilevante per disegnare una scatola. Non dovrebbero farlo ... beh .. shading? Ho cercato di acquistare Orange Book e Blue Book, ma non voglio spendere più denaro per qualcosa che nasconderà tutto dietro una libreria (il Blue Book) o qualcosa che parlerà di programmazione di uno shader per eseguire alcuni compiti di illuminazione in un ambiente 3D (l'Orange Book).

Quindi da dove iniziare? Come faccio a disegnare una scatola (o un cubo o una piramide o qualsiasi altra cosa) usando nient'altro che il profilo principale. Non sto chiedendo un frammento di codice qui, sto cercando un tutorial espansivo o un libro o qualcosa a cui qualcuno potrebbe indicarmi. Se questo è stato risposto in precedenza e non l'ho trovato, per favore reindirizza me.

+4

Consiglierei di prendere un buon "libro" sulla moderna OpenGL. La mia prima raccomandazione sarebbe http://www.arcsynthesis.org/gltut/ che è online e gratuita. Questo dovrebbe iniziare. – Bart

+1

È anche possibile utilizzare la pipeline programmabile in 2.0. La funzione fissa è scadente e inefficiente indipendentemente dalla versione. –

+0

@CatPlusPlus Questa è la prima volta in cui ho sentito che chiunque si riferisca alla pipeline di funzioni fisse come inefficiente. :) Potresti voler riconsiderare quella parola.Crappy - Sono d'accordo. – Ani

risposta

11

Il motivo per l'improvvisa "complessità" nel profilo principale è il fatto che la pipeline della funzionalità fissa non era rappresentativa di ciò che la GPU effettivamente fa per voi. Gran parte della funzionalità è stata eseguita sulla CPU e solo il disegno reale è stato eseguito sulla GPU. L'altro problema con la pipeline fissa è che è una battaglia persa. La pipeline fissa ha tremendamente molte manopole e interruttori! Quindi, non solo è già dolorosamente complicato, ma non potrà mai tenere il passo con l'infinita richiesta di nuovi modi di disegnare scene. Inserisci GLSL e hai la possibilità di dire alla GPU esattamente come vuoi disegnare la scena. Ciò sposta la potenza allo sviluppatore e libera tutti dal dover attendere aggiornamenti OpenGL per i nuovi interruttori/manopole.

Ora, per quanto riguarda la tua frustrazione per l'improvvisa perdita di glBegin e glEnd ... ci sono strutture semplici che imitano il loro comportamento sul nuovo profilo principale, e questa è una buona cosa. Di nuovo, sposta il potere agli sviluppatori di scegliere come avvicinarsi alla pipeline. Tuttavia, non c'è niente di sbagliato nel praticare 3D su FFP. Devi comunque imparare la matematica 3D e i concetti. Questi concetti si applicano indipendentemente dall'API. (Matrix math ti salverà la vita sia in OpenGL che in Direct3D.) Quindi, prima ti eserciti con triangoli e colori semplici. Quindi si passa alle trame (con le coordinate della trama). Quindi aggiungi le normali (con illuminazione). Quindi, dopo aver compreso tutti questi concetti, si smette di usare glBegin/glEnd e si avvia il batching di grandi quantità di dati dei vertici nei buffer. Non capirai bene glDrawElements se non capisci glBegin/glEnd comunque. Quindi, è OK per imparare su quegli strumenti.

+0

sono d'accordo, penso che la strada da percorrere sia leggere la prima edizione del libro rosso (1993 penso) poi salta sull'ultimo libro arancione o qualunque sia il caldo del 2015 ... buono per imparare le basi da un momento in cui Opengl aveva solo 120 funzioni. –

+0

Grazie per questo; è una delle migliori risposte che abbia mai visto. Per molto tempo mi sono chiesto onestamente come l'intera comunità OpenGL sembra aver perso la testa: tutti ripetevano mentalmente il mantra "la conduttura fissa era cattiva, non dovresti usarla" mentre proponevi un'alternativa molto più complicata con un incredibile curva di apprendimento ripida e assolutamente nessun vantaggio evidente per la stragrande maggioranza degli utenti. Questa è la prima cosa che ho letto che dà un'idea di ciò che potrebbe effettivamente essere problematico per la pipeline fissa, e tu dai un quadro generale chiaro e sano. –

+0

Prego. Sono contento di poterti aiutare. – TheBuzzSaw