OpenGL: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Specifica, struttura, bibliografia e link |
|||
Riga 1:
'''OpenGL''' ('''Open''' '''G'''raphics '''L'''ibrary) è una specifica che definisce una API per più linguaggi e per più piattaforme per scrivere applicazioni che producono [[computer grafica]] 2D e 3D. L'interfaccia consiste in circa 250 diverse chiamate di funzione che si possono usare per disegnare complesse scene tridimensionali a partire da semplici primitive. È usato per sviluppare nell'industria dei videogiochi (nella quale compete con
== Specifica ==
A livello più basso OpenGL è una specifica, ovvero si tratta semplicemente di un documento che descrive un insieme di funzioni ed il comportamento preciso che queste devono avere. Da questa specifica, i produttori di hardware creano implementazioni, ovvero librerie di funzioni create rispettando quanto riportato sulla specifica OpenGL, facendo uso dell'accelerazione hardware ove possibile. I produttori devono comunque superare dei test specifici per poter fregiare i loro prodotti della qualifica di implementazioni OpenGL.
Esistono implementazioni efficienti di OpenGL (che sfruttano in modo più o meno completo le [[Graphics Processing Unit|GPU]]) per [[Microsoft Windows]], [[Linux]], molte piattaforme [[Unix]], la [[Playstation 3]] ed il [[Mac OS]]. Queste implementazioni vengono normalmente fornite dai costruttori di dispositivi video e si affidano pesantemente sull'hardware fornito. Esistono realizzazioni software che portano OpenGL su piattaforme che non hanno il supporto dei costruttori hardware. La più nota è la libreria ''open source'' ''Mesa'', un'API grafica basata solamente su librerie software che è compatibile con OpenGL. Tuttavia, a causa della licenza, può solo sostenere di essere un'API "molto simile".
La specifica di OpenGL è supervisionata dall'OpenGL Architecture Review Board (ARB), che si è formato nel [[1992]].
L'ARB consiste
Secondo il sito Web ufficiale di OpenGL, i membri votanti dell'ARB nel
Secondo i piani vigenti, il controllo di OpenGL passerà a Khronos Group alla fine del 2006, nel tentativo di migliorare il marketing di OpenGL e per rimuovere le barriere tra lo sviluppo di OpenGL e [[OpenGL ES]]
<ref>[http://www.khronos.org/news/press/Releases/opengl_arb_to_pass_control_of_opengl_specification_to_khronos_group/ OpenGL ARB cede il controllo sulla specifica di OpenGL a Khronos Group]]</ref>
== Struttura ==
OpenGL assolve a due compiti fondamentali:
* nascondere la complessità di interfacciamento con acceleratori 3D differenti, offrendo al programmatore una [[Application programming interface|API]] unica ed uniforme;
* nascondere le capacità offerte dai diversi acceleratori 3D, richiedendo che tutte le implementazioni supportino completamente l'insieme di funzioni OpenGL, ricorrendo ad un'emulazione software se necessario.
Il compito di OpenGL è quello di ricevere primitive come punti, linee e poligoni, e di convertirli in pixel (''rasterizing'' o [[rasterizzazione]]). Ciò è realizzato attraverso una [[pipeline grafica]] nota come {{en}} [http://www.opengl.org/documentation/specs/version1.1/state.pdf ''OpenGL state machine'']. La maggior parte dei comandi OpenGL forniscono primitive alla pipeline grafica o istruiscono la pipeline su come elaborarle. Prima dell'introduzione di OpenGL 2.0, ogni stadio della pipeline realizzava una funzione fissa ed era configurabile sono entro certi limiti, ma dalla versione 2.0 molti stadi sono totalmente programmabili attraverso il linguaggio [[GLSL]].
OpenGL è una API procedurale che opera a basso livello, che richiede al programmatore i passi precisi per disegnare una scena. Questo approccio si pone in contrasto con le API descrittive ad alto livello le quali, operando su [[Albero (grafo)|struttura dati ad albero]] (''scene graph''), richiedono al programmatore solo una descrizione generica della scena, occupandosi dei dettagli più complessi del [[rendering]]. La natura di OpenGL obbliga quindi i programmatori ad avere una buona conoscenza della pipeline grafica stessa, ma al contempo lascia una certa libertà per implementare complessi algoritmi di ''rendering''.
Storicamente, OpenGL ha esercitato una notevole influenza sullo sviluppo degli acceleratori 3D, promuovendo un livello base di funzionalità che è oggi comune nelle schede video destinate al grande pubblico:
* punti, linee e poligoni disegnati come primitive base;
* una pipeline per il [[transform and lighting]];
* [[Z-buffering]]
* [[Texture mapping]]
* [[Alpha blending]]
Una delle caratteristiche più apprezzate in ambito professionale è la retrocompatibilità tra le diverse versioni di OpenGL: programmi scritti per la versione 1.0 della libreria devono funzionare senza modifiche su implementazioni che seguono la versione 2.1.
== Estensioni ==
Riga 69 ⟶ 92:
Così come per il predecessore [[Windows XP]], anche il CD di installazione di [[Windows Vista]] non include alcun ICD, che dovrà essere installato a cura dell'utente. In mancanza di un ICD, Vista fornisce comunque funzionalità OpenGL 1.4 senza estensioni, attraverso uno strato di emulazione basato su Direct3D.
Il futuro di OpenGL in ambito videoludico è quindi ora nelle mani dei produttori di videogiochi, i quali non sembrano comunque molto propensi all'utilizzo di questa API, come dimostrerebbe anche una decisione di uno dei suoi più illustri sostenitori in questo ambito, ovvero [[John Carmack]] di [[id Software]]. Quest'ultimo ha infatti
== OpenGL 2.0 ==
Riga 76 ⟶ 99:
La specifica finale di OpenGL 2.0 [http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf] comprendeva il supporto a GLSL, ma ometteva molte delle altre caratteristiche originalmente proposte - queste sono state differite a versioni future di OpenGL, sebbene alcune siano già disponibili come estensioni.
==Bibliografia==
*
*OpenGL Architecture Review Board
*Randi J. Rost. ''OpenGL Shading Language'', Addison-Wesley Professional, 2004. ISBN 0-321-19789-5
==Collegamenti esterni==
* {{en}} [http://0waldo.com/scripts/get2D3D.cgi Routine di conversione di superfici da 2D a 3D e di manipolazione di texture]
* {{en}} [http://www.opengl.org/ Sito Web ufficiale]
* {{en}} [http://nehe.gamedev.net/ Tutorial e materiale di apprendimento fornito da ''Neon Helium Productions'']
* {{en}} [http://www.opengl.org/documentation/red_book_1.0/ Copia online di una vecchia edizione del libro ''The OpenGL Programming Guide'']
* {{en}} [http://www.opengl.org/documentation/specs/version2.1/glspec21.pdf Copia online delle specifiche OpenGL 2.1]
===Risorse per programmatori===
|