Mi piacerebbe conoscere le differenze tecniche e architetturali tra le librerie grafiche OpenGL e Direct3D. Come mai la prima sembra essere più idonea per applicazioni industriali ad alto livello (utilizzata dalla Nasa)? E’ forse più performante? Grazie

Iniziamo col dire che fondamentalmente le prestazioni non sono una discriminante tra le due librerie. Un programma ben scritto funzionerà bene e con buone prestazioni con entrambe le librerie. Ogni sostenitore di una delle due librerie, dice che le proprie sono le migliori; tempo fa sentivo dire che le Direct3D sono meno precise, rispetto alle OpenGL, ma che offrono prestazioni migliori. Altri invece sostenenvano che proprio l’architettura delle Direct3D ne limita le prestazioni. Insomma non mi sentirei di sbilanciarmi da nessuna delle due parti.

Comunque si possono evidenziare le principali differenze.
Innanzitutto le Direct3D, si basano fondamentalmente sull’architettura COM, che per i non addetti ai lavori significa una programmazione ad oggetti, cosa positiva in senso lato, ma negativa nello specifico, perché gli oggetti COM, rendono la programmazione notevolmente complicata e i sorgenti sono spesso poco leggibili.
Ma questo sarebbe il minimo, infatti la principale pecca di COM è la lentezza, visto che tutte le chiamate ai metodi delle classi avvengono in modo indiretto, tramite puntatori a tabelle di puntatori ai metodi virtuali delle classi.
Le OpenGL invece hanno un approccio più tradizionale, ossia di tipo funzionale. Questo significa che tutto avviene tramite semplici chiamate a funzioni specifiche, eliminando qualunque tipo di sovraccarico di lavoro. Inoltre il programma sorgente risulta molto più leggibile e in genere richiede anche molto meno codice di inizializzazione, in altre parole le OpenGL tendono a nascondere molto di più i dettagli di basso livello.

Dette queste cose, rimane il fatto che con entrambe le librerie si possono fare fondamentalmente le stesse cose, per cui nessuna delle due limita le possibilità di sviluppo, ma ci sono alcune cose che fanno preferire a molti le OpenGL.

Per prima cosa le Direct3D girano esclusivamente su piattaforme Microsoft (Windows, XBox), mentre le OpenGL sono delle librerie aperte, il che significa che non sono legate a nessuna specifica piattaforma, infatti sono disponibili praticamente ovunque, dalle macchine Window alle Unix o Unix-like (Linux, BeOs, etc.).

In ultimo c’è la facilità di utilizzo delle OpenGL, e il fatto che il rilascio di versioni aggiornate delle DirectX è relativamente lento rispetto alla velocità di sviluppo del settore.

Con queste ultime considerazioni, forse mi sono contraddetto rispetto alla mia affermazione iniziale di non volermi sbilanciare da nessuna delle due parti, ma per me una caratteristica molto importante è la portabilità su diverse piattaforme e se inoltre, questo obbiettivo non richiede sforzi eccessivi, non c’è altro argomento che tenga.