Iniziare con OpenGL quando la maggior parte dei tutorial non sono aggiornati [chiuso]


16

Sono sicuro che ci sono già un sacco di domande come questa, ma il costante aggiornamento della libreria OpenGL le butta via tutte, e tra un mese o due, le risposte qui saranno di nuovo senza valore.

Sono pronto per iniziare la programmazione in OpenGL usando C ++. Ho un compilatore funzionante (DevCpp; NON chiedermi di passare a VC ++ e non chiedermi perché). Ora sto solo cercando un solido tutorial su come programmare con OpenGL. Il mio assistente ha trovato il tutorial fornito da NeHe Productions, ma come sono venuto a scoprire, è MODIFICATO! (anche se ho creato una finestra di base per supportare un canvas OpenGL)

Poi sono andato online e ho trovato OpenGL SuperBible, che apparentemente usa freeglut? Ma quello che mi piacerebbe sapere è se SuperBible 5a edizione è aggiornata o meno. Il suggerimento per freeglut che ho trovato dice che l'ultima versione era 2.6.0 ma ora è 2.8.0!

  • OpenGL SuperBible è ancora un buon punto e abbastanza aggiornato per iniziare?
  • C'è un posto migliore dove andare per imparare OpenGL?
  • Posso semplicemente salvare freeglut nella directory include di DevCpp (forse in GL), oppure esiste qualche procedura importante?
  • Ci sono commenti o suggerimenti che non ho pensato di chiedere dato che ho appena iniziato?

@dreta mi ha chiarito alcune cose, quindi ora ho un'idea migliore di cosa chiedere:

Penso che vorrei iniziare con OpenGL usando una libreria wrapper invece di accedere direttamente a OpenGL.
Penso solo che, per un principiante, sarebbe più facile programmare e ottenere buoni risultati, mentre non devo ancora capire tutti i dettagli oscuri (come menzionato da @stephelton).

Il problema è che non riesco a trovare alcuna libreria che non abbia riferimenti indefiniti a funzioni non più supportate. Freeglut sembra operativo, ma utilizza ancora GLU.
Qualcuno sa cosa posso fare?
Inoltre, ho provato a compilare la fonte del primo SuperBible, ma ho riscontrato errori poiché GLAPI non viene definito come un tipo, l'errore che ha origine nella libreria GLU.

Vorrei usare SuperBible, ma non so come risolvere questo problema.


2
Dovresti passare a GCC.
notlesh,

DevCpp è solo un IDE; che esegue GCC (mingw per essere specifici). Ma dal momento che è stato menzionato, Eclipse CDT sarebbe preferibile, in quanto non è stato abbandonato da 10 anni.
Casper Beyer

4
@Casper L'erede dell'eredità DevCpp era Code :: Blocks ed è ancora aggiornato regolarmente.
Alex Shepard,

1
Se vuoi una libreria wrapper per OpenGL, ti suggerisco di provare SFML . SFML fornisce le solite cose come la creazione di finestre, timer, ecc., Consentendo al contempo di disegnare testo e forme semplici. Puoi abbandonare annegamento all'utilizzo di OpenGL "raw" ogni volta che lo desideri, mescolando funzioni SFML e chiamate API non elaborate.
Oskar N.

1
Non puoi "chiudere" una domanda aggiungendo "{CHIUSO}" al titolo. Le domande verranno chiuse dai moderatori o se un numero sufficiente di utenti ha votato per chiudere la domanda. Ritirerò le tue modifiche .. "CLOSED" verrà automaticamente aggiunto al tuo titolo se i moderatori decidono di chiuderlo.
bummzack,

Risposte:


19

Il nostro residente Nicol Bolas mantiene un libro online sulla programmazione grafica moderna . Utilizza il moderno OpenGL, tutto viene introdotto a un ritmo facile da consumare, è un buon punto di partenza. L'ho usato per imparare il moderno OpenGL e mi ha fatto meraviglie negli ultimi 2 mesi.

Accanto a questo ci sono pezzi di conoscenza qua e là. Il wiki OpenGL è abbastanza ben mantenuto. Il codice non è "best practice" e talvolta c'è ambiguità quando si tratta della versione OpenGL, ma al di fuori di quelle rare occasioni, è una grande risorsa.

Se vuoi conoscere GLSL, c'è il GLSL Core Tutorial di lighthouse3D. Sebbene questa sia l'unica conoscenza di base di cui "mi fiderei" sul sito, il resto tende ad essere obsoleto.

Una volta che inizi a capire come viene fatto OpenGL moderno, ti divertirai facilmente a cercare informazioni specifiche, filtrando il codice obsoleto e, soprattutto, leggendo le specifiche. Devi solo iniziare da qualche parte.

La maggior parte dei libri OpenGL disponibili, se non addirittura tutti, sono obsoleti. Il nuovo SuperBible è un tipo strano e non lo consiglierei a nessuno. La Guida alla programmazione OpenGL per OpenGL 4.1 è stata pubblicata il 16 settembre, sfortunatamente la 7a edizione utilizza codice deprecato, quindi devi solo aspettare, lo sono.

E naturalmente, puoi sempre fare domande qui.


1
Perché non consiglieresti la SuperBible?
Codesmith

3
@AUTO La quinta edizione di SuperBible utilizza un wrapper personalizzato attorno a OpenGL per renderlo "accessibile". Molti esempi usano eccessivamente il wrapper personalizzato. Non ti insegna a cosa è supposto, che è la specifica di base OpenGL. Per come la vedo io, se non devi imparare esplicitamente OpenGL deprecato, allora dimentica che esiste. Non ha senso impararlo. Le specifiche di base sono molto più chiare e potenti.
dreta,

@AUTO Le specifiche di base sono molto più esigenti all'inizio, questa è una buona cosa. Ti costringerà a occuparti della maggior parte del processo di rendering, dandoti piena comprensione e controllo su di esso. Apre molte, molte più possibilità rispetto al codice deprecato. Dopodiché se riesci a imparare l'API del tuo sistema operativo e OpenGL lanuch sotto di esso senza cose come glut, allora sei nel paese delle meraviglie.
dreta,

OK, lascia che ti faccia una domanda importante: la libreria GLU sembra essere deprecata e completamente non supportata; usando la specifica, ottengo l'accesso diretto, aggirando la necessità della GLU? In tal modo, non otterrei più errori del linker a funzioni inesistenti a cui fa riferimento la libreria GLU?
Codesmith,

@AUTO GLU è del tutto superfluo, l'ho mai toccato solo con un palo da 10 piedi durante la lezione di programmazione grafica (abbiamo dovuto usare codice deprecato, è stato doloroso, gli standard cambiano più velocemente del programma della lezione, immagino). È solo una libreria che aiuta con il codice deprecato. Se hai il tuo codice impostato con GLU, probabilmente puzza.
dreta,

1

È passato un po 'di tempo da quando questa domanda è stata posta, ma spero che questo possa aiutare le persone che hanno la stessa domanda come te.

Ho iniziato con OpenGL leggendo un minibook su arcsynthesis.org. Non sono sicuro di chi l'abbia scritto. Sembra che la registrazione del sito sia scaduta o qualcosa del genere, ma dovresti riuscire a trovarlo qui: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Utilizza OpenGL 3.3, quindi utilizzerai la pipeline moderna e tutte le pratiche che ciò comporta, ma non sarai esposto a tassellature o shader di calcolo.

Un altro sito che vale la pena visitare è https://open.gl/ . Sembra essere MOLTO focalizzato sul principiante e non copre le cose quasi in modo approfondito come il materiale sopra, ma potrebbe essere un buon punto di partenza per le persone che stanno appena iniziando.

Ricordati di leggere il wiki OpenGL e google i nomi delle tue funzioni se hai bisogno di aiuto. Alcune pagine della wiki sono completamente inutili, ma altre sono piuttosto utili, sia come riferimento che come materiale di apprendimento.


1
La persona menzionata nella risposta accettata l'ha scritto Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

Questi vecchi tutorial sono ancora molto rilevanti per i principianti. In effetti, suggerirei di iniziare da lì piuttosto che con le versioni recenti di OpenGL. Le versioni più recenti hanno scartato alcuni dei metodi più semplici per disegnare la geometria (vale a dire il disegno in modalità immediata).

Con le versioni recenti, è necessario preparare e inviare matrici di vertici e comunicare alla scheda video come sono disposti i vertici nell'array fornito. Queste cose sono ingombranti per il debug.

Alcune versioni (vale a dire OpenGL ES 2.x) richiedono di fornire le proprie equazioni di illuminazione (sotto forma di Frammenti di shader) e di trasformare i propri dati di vertici in modo che finiscano sullo schermo dove si desidera (Vertex Shaders). È ancora più difficile eseguire il debug e non è un posto per un principiante (secondo me).

Quindi suggerirei davvero di tornare a quei tutorial NeHe (ecc.) E iniziare da lì. Potrebbero essere "obsoleti" ma funzionano ancora. Quando inizi a capire cosa succede realmente nella pipeline di rendering in OpenGL e ottieni un'idea di alcuni dei concetti matematici che fanno funzionare queste cose, allora sarai pronto per esaminare alcuni dei metodi più aggiornati di rendering in OpenGL.


In realtà non funzionano. Ecco perché ho pubblicato questa domanda. Stanno usando la funzione gluPerspective che è deprecata e non c'è sostituto assoluto.
Codesmith

1
Questa non è una funzione OpenGL. È una funzione di utilità separata fornita da un'altra libreria. Puoi trovarlo facilmente, non è molto difficile.
notlesh,

Grazie, ma ho trovato solo un sostituto imperfetto che non so usare. Accetta un argomento "float * matrix", mentre il vecchio utilizza una matrice interna. Cosa ci metto allora?
Codesmith,

Il primo successo su Google per "implementazione gluPerspective" è esattamente quello che stai cercando. chiama glFrustum, che non è disponibile in alcune versioni recenti di OpenGL (ES 2.x non lo include). Anche questo non è troppo difficile da trovare.
notlesh,

0

Come altri hanno già detto, la maggior parte dei libri è obsoleta o troppo avanzata. Tuttavia, consiglierei la quinta edizione di SuperBible ma solo per avere una rapida panoramica di ciò che può essere fatto in OpenGL e per familiarizzare con cose come la vista / proiezione ecc.

Immergersi immediatamente nel moderno OpenGL potrebbe inizialmente farti sopraffare, quindi considera di imparare a fare alcune cose di base nelle versioni ormai deprecate.

Vorrei anche aggiungere un sito con buoni tutorial che ho trovato di recente http://ogldev.atspace.co.uk/


Grazie, controllerò quel tutorial; ma per usare OpenGL SuperBible, la mia domanda rimane ancora: come posso risolvere il GLU, dato che Freeglut si basa su di esso?
Codesmith,

@AUTO: FreeGLUT non è "basato su" GLU. Alcune funzioni di FreeGLUT chiamano GLU, ma se non le chiami, non avrai problemi.
Nicol Bolas,

Ma non è probabile che SuperBible chiami queste funzioni? E se lo fa, io non posso usare esso .
Codesmith,

Davvero, la mia opinione è di non preoccuparsi del codice sorgente fornito con la SuperBible. Leggilo ma prova a fare tutto da zero. Sui tuoi problemi con GLU, la mia ipotesi migliore è che non hai configurato / installato correttamente le tue librerie. Scarica l'ultima versione di MinGW. Scarica anche l'ultima versione di freeglut e compila, oppure trova una libreria precompilata. Ad ogni modo, dovresti iniziare ad apprendere alcune cose piuttosto che dedicare così tanto tempo a pianificare come iniziare.
Grieverheart,

@AUTO: Perché è probabile che il SuperBible li chiama? Se li avesse chiamati, il codice della SuperBible non avrebbe funzionato. Ecco perché non li chiama.
Nicol Bolas,

0

arcsynthesis.org (il sito menzionato nella risposta accettata) purtroppo sembra essere fuori servizio. (EDIT: è disponibile a questo link !).

I tutorial di Anton Gerdelan per OpenGL 4 sono molto leggibili e aggiornati a metà 2014. I primi sono gratuiti, gli altri sono disponibili su Amazon, dove hanno ottime recensioni, a un piccolo prezzo. Finora sono stato contento.

Ci sono altri tutorial gratuiti per OpenGL 3.3+ su http://www.opengl-tutorial.org/ . Esse risalgono al 2012, ma possono essere un buon materiale supplementare per altre fonti.


OGLDev è attuale, approfondito e gratuito. ogldev.atspace.co.uk/index.html
Yattabyte


Bello vederlo è disponibile! Controllerò anche questi materiali.
iHateCamelCase
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.