Lo so. Sono discorsi pro-flame che hanno stancato tutti. Anche me. Ma a quanto pare qualcuno non ha capito a fondo la differenza fra le due librerie e crede che OpenGL sia il solito fratello sfigato delle DirectX che mamma microsoft ci offre con tanto spirito di carità.
Non starò a tediarvi con “è meglio X perché” o “quanto fa schifo Y”. Vi sparerò di seguito qualche dato preso da libri attendibili e non trarrò conclusioni. Queste spettano a voi.
Per prima cosa va puntualizzato che comparare OpenGL con le DirectX è come comparare KDE con OpenSolaris. Le OpenGL infatti sono puramente librerie 3D mentre le DirectX offrono anche funzionalità collegate al mondo dei videogame quali
DirectDraw – Libreria per la grafica 2D
Direct3D – Libreria per la grafica 3D
DirectSound – Libreria per la riproduzione e la manipolazione di effetti sonori
DirectInput- Libreria per la gestione dell’Input (tastiera, mouse, joystick etc.)
DirectShow – Libreria per la riproduzione di file video
DirectPlay – Libreria per il networking
Per OpenGL invece dobbiamo accoppiare librerie specifiche separate e librerie ausiliarie come GLUT e simili. Le comparazioni fra OpenGL e DirectX, quindi, le farò solamente rispetto a Direct3D.
Iniziamo con una tabella che comparativa delle features
| Feature: |
OpenGL |
Direct3D |
| Vertex Blending |
N/A |
Yes |
| Multiple Operating Systems |
Yes |
No |
| Extension Mechanism |
Yes |
Yes |
| Development |
Multiple member Board |
Microsoft |
| Thorough Specification |
Yes |
No |
| Two-sided lighting |
Yes |
No |
| Volume Textures |
Yes |
No |
| Hardware independent Z-buffers |
Yes |
No |
| Accumulation buffers |
Yes |
No |
| Full-screen Antialiasing |
Yes |
Yes |
| Motion Blur |
Yes |
Yes |
| Depth of field |
Yes |
Yes |
| Stereo Rendering |
Yes |
No |
| Point-size/line-width attributes |
Yes |
No |
| Picking |
Yes |
No |
| Parametric curves and surfaces |
Yes |
No |
| Cache geometry |
Display Lists |
Vertex Buffers |
| System emulation |
Hardware not present |
Let app determine |
| Interface |
Procedure calls |
COM |
| Updates |
Yearly |
Yearly |
| Source Code |
Sample |
SDK Implementation |
Da notare il supporto allo Stereo Rendering che serve a creare video 3D compatibili con gli occhialetti tanto di moda nell’ultimo periodo.
Ora non so se questa tabella è aggiornatissima ma è comunque indicativa.
Altra questione. Le DirectX hanno un accesso diretto all’hardware su Windows mentre le OpenGL si devono arrangiare con le WGL. Questo influisce negativamente sulle OpenGL su Windows ed è uno dei motivi per cui per i giochi windows si preferiscono le DirectX. Il motivo di questa discriminazione è nella chiusura del codice di Windows, ovviamente. Inoltre, astutamente, le funzionalità di accesso all’hardware (driver) e quelle di API sono inseparabili. Ciò significa che un programma che sfrutta OpenGL non può appoggiarsi a DirectX per avere una via preferenziale verso la scheda video, infatti tale via è utilizzabile solamente se il canale viene aperto dalle API Direct3D.
Inoltre le prestazioni fra Direct3D e OpenGL sono del tutto comparabili. A seconda dei test prevale una o prevale l’altra. Quindi siamo in totale parità.
Infine la semplicità di programmazione pende a favore delle OpenGL. Per prima cosa perché sono scelte universalmente come libreria didattica e in secondo luogo perché sfrutta la semplice interfaccia a “chiamata di funzione” a differenza dell’uso di COM per DirectX.
Non dico che la tecnologia COM sia peggio della chiamata di funzione. Ma sicuramente richiede un approccio diverso e quindi una curva di apprendimento più ripida rispetto al sistema “standard” usato da C/C++ e che quindi tutti conoscono già.
Quasi dimenticavo di aggiungere che le OpenGL sono disponibili ovunque, per qualunque architettura e dispositivo, mentre le DirectX sono vincolate a Microsoft.
Ci sarebbe altro da dire ma poi diventerei noiso. Penso che queste cose servano a fare un po di chiarezza.
Lo so. Sono discorsi pro-flame che hanno stancato tutti. Anche me. Ma a quanto pare qualcuno non ha capito a fondo la differenza fra le due librerie e crede che...
Recent Comments