2010-06-30 21 views

risposta

20

Per quanto riguarda le prestazioni, e assumendo driver GPU decenti, non c'è alcuna differenza nel complesso.

Alcune operazioni sono intrinsecamente più veloci in OpenGL che in DirectX9, sebbene DX10 abbia rimediato a ciò.

Ma una buona regola generale quando si lavora con hardware esterno è che non è l'API che si sta utilizzando che determina le prestazioni.

Durante la scrittura del codice di rete, il collo di bottiglia è la scheda di rete e non importa se il codice socket è scritto in .NET, i socket Berkeley in C, o forse si utilizza una libreria Python.

Quando si scrive codice per utilizzare la GPU, la GPU è il fattore limitante. La più grande differenza tra DirectX e OpenGL è che si potrebbe richiedere una chiamata di funzione o due in più rispetto all'altra per ottenere determinati compiti - e il costo delle prestazioni di questo è praticamente inesistente. Quello che succede sulla GPU è lo stesso in entrambi i casi, perché è determinato dal tuo driver GPU, e perché sia ​​OpenGL che DirectX cercano di essere il più efficienti possibile.

Ci sono validi motivi per preferire entrambe le API.

DirectX offre un supporto degli strumenti molto migliore. Microsoft fa un ottimo lavoro. Il debugging e l'ottimizzazione del codice DirectX sono molto più semplici con strumenti come PIX. E Microsoft fornisce anche la libreria helper D3DX che fornisce implementazioni efficienti di molte funzionalità comunemente utilizzate.

OpenGL ha il vantaggio di non essere collegato a un sistema operativo specifico. DirectX9 funziona solo su Windows. DX10 e versioni successive funzionano solo su Vista e versioni successive.

OpenGL funziona su qualsiasi sistema operativo in cui è stato scritto un driver OpenGL.

Su Windows, la situazione a volte è un po 'imbarazzante. Windows stesso viene fornito solo con antiche implementazioni di OpenGL. (XP con v1.1, credo, e Vista/7 con 1.5).

Quindi le app OpenGL su Windows si basano sul fornitore della GPU per fornire un'implementazione aggiornata con i relativi driver. ATI e NVidia forniscono ottime implementazioni, quindi non è un grosso problema. I driver Intel OpenGL sono generalmente in ritardo, sia in termini di qualità che di funzionalità supportate.

+1

grazie. Confronto più utile del tipo che ho letto su SO fino ad oggi – Julius

2

Generalmente sarebbe più o meno lo stesso. C'è stato un tempo in cui DirectX aveva un netto vantaggio di velocità rispetto a OpenGL, ma per la maggior parte degli scopi pratici, questa è una storia antica.

+2

> Il fatto che non ci fosse un veloce software di rendering OpenGL era più un artefatto della storia che della progettazione dell'API, anche se la grafica del gioco pensava che fosse fondamentalmente rotto, poiché non corrispondeva alle nostre nozioni su come 3D la grafica dovrebbe funzionare Alla fine SGI ha rilasciato un software competitivo OpenGL solo per combattere il FUD che esce da Redmond. http://chrishecker.com/OpenGL –

3

vedere alcune domande relative -

OpenGL still better than Direct3D for non-games?

OpenGL or Direct3D for a new Windows game project? Or something else?

Microsoft è adesso estremamente polarizzati verso Direct3D. Molte schede integrate Intel di fascia bassa non vengono fornite con i driver OpenGL per impostazione predefinita, o se supportano solo versioni precedenti/specifiche di OpenGL come 1.2/1.4. Se si stanno prendendo di mira tali macchine (Intel ha una quota di mercato grafica del 50%), sarà difficile sfruttare le funzionalità più avanzate come gli shader (che sono diventati disponibili in OpenGL 1.5). Considerando che, sarà in grado di utilizzare shader simili in Direct3D, a causa della disponibilità di driver migliori per queste schede di fascia bassa. Ovviamente, con Direct3D funziona solo su Windows.

Se invece non è necessario utilizzare gli shader, è possibile utilizzare Direct3D o OpenGL. Anche se tenderei un po 'di più verso OpenGL. È multipiattaforma e tutti lo supportano a parte Microsoft. Alcune cose, come disegnare linee (di varie larghezze) sono anche molto più semplici in OpenGL. OpenGL ha anche una modalità di picking incorporata che è molto più robusta del ray picking (specialmente se si vogliono selezionare punti e linee).

Una terza opzione consiste nell'utilizzare un'API astratta o un motore esistente che può eseguire il rendering sia in OpenGL che in Direct3D.

+0

Non andando a downvote, ma quali shader avanzati possono essere scritti in D3D che non possono essere scritti usando OGL? Per favore, menziona solo uno. – stinky472

+0

Spiacente, non significa che non può essere scritto in OpenGL. Quello che volevo dire è che i driver predefiniti forniti da Microsoft per le schede Intel supportano solo OpenGL 1.2/1.4, quindi non è possibile utilizzare shader avanzati, sebbene siano disponibili e possano essere supportati dalla scheda utilizzando i driver più recenti. – tathagata

+0

@tathagata: La tua risposta suggerisce fortemente che OpenGL non è in grado di "shader avanzati". È sicuramente * capace * di shader "avanzati", e la maggior parte delle caratteristiche degli shader si sono presentate nelle estensioni OpenGL molto prima che comparissero in DirectX. Anche HLSL di DirectX deriva da uno dei linguaggi shader utilizzati in OpenGL. (Che penso fosse il Cg di NVIDIA, ma potrei sbagliarmi.) – greyfade

0

Puoi provarlo da solo, se lo desideri. Ogre3D è una fantastica libreria 3D in cui, quando si avvia, è possibile scegliere se si desidera utilizzare DirectX o OpenGL. Se ricordo bene (erano trascorsi 3-4 anni da quando l'ho usato) avevano il frame rate e altri dati anche nel nei loro esempi, dove puoi vedere quale è più veloce.

0

In realtà, questo dipende molto dal tipo di progetto che si sta facendo.

Se si desidera portarlo su una piattaforma diversa, non utilizzare DirectX. Se vuoi il controllo totale e una libreria in rapido sviluppo su Windows, DirectX è la strada da percorrere. Se trovi un motore grafico con tutte le funzionalità di cui hai bisogno, usalo. È più semplice dell'utilizzo di DX o OpenGL, soprattutto se supporta una catena di strumenti (editor di livelli, importazione di modelli da modellatori 3d, ...).

Se vuoi imparare DX, vai su DX o SlimDX. Se vuoi imparare OpenGL, vai su OpenGL.

0

Attenzione i driver GL su Windows sono in genere piuttosto aggrovigliati e buggy. Generalmente gli OEM fanno pochissimo lavoro con il driver GL sotto Windows. Quanto basta per far funzionare bene l'ultimo gioco di identificazione. Che è un dolore se fai le cose in modo diverso.

Quello che dovresti fare è scrivere un livello di astrazione tra il 2 e implementare entrambi i back-end. Questo ti dà il meglio di entrambi i mondi. La stabilità di DirectX sotto Windows e la cross-platform di OpenGL. Ti dà anche l'enorme vantaggio di essere in grado di aggiungere un po 'di rendering in futuro, se lo desideri.

Vale anche la pena notare che X-Box e DirectX sono abbastanza diversi da significare che avresti bisogno di un back-end separato per entrambe le piattaforme se dovessi tentare comunque una cosa del genere.

Personalmente il mio motore supporta DX9, DX10, Open GL-3, OpenGL ES2.1 e io sono molto più felice di avere il livello di astrazione :)

Edit: Come per i commenti che vorrei sottolineare che i driver nVidia SONO i driver OpenGL di Windows minimi. Praticamente ogni altro produttore ha problemi. Anche nVidia ha molti problemi. La maggior parte delle volte, nella mia esperienza, si finisce a combattere contro un guidatore in cui le cose "funzionano" (tm) con DirectX.

+0

Non so da dove viene la tua nozione di buggy driver GL su Windows. Nella mia esperienza, non sono né migliori né peggiori dei driver Linux - almeno per nVidia la maggior parte del codice è la stessa comunque. – eile

+0

@ eile, penso che Goz significhi rispetto ai driver Windows/DirectX. In particolare i chipset Intel, affermano OpenGL2.1, ma quello sul mio portatile non è nemmeno in grado di tracciare linee semplici in modo corretto. –

0

Utilizzare il middleware. L'orco è buono se vuoi qualcosa con molte caratteristiche (caricamento di modelli 3D e animazioni, ecc.). SDL è buono se vuoi semplicemente un semplice wrapper.

In risposta alla tua domanda vera e propria, tutto si riduce ai piloti. E questo varia tra i produttori. La mia comprensione è che ora, GL non è ben supportato da tutte le principali aziende (nVidia, ATI, Intel), che è un grosso problema.

Personalmente userei il middleware, ma mi baso sul testing/sviluppo principalmente per D3D.

0

Vorrei scegliere DirectX. Sta migliorando e si evolve rapidamente, molto più rapidamente di quanto il comitato OGL possa muoversi. Prolunga l'inferno qualcuno?

+0

Per essere onesti, l'evoluzione di OpenGL ha accelerato molto negli ultimi 2 anni circa. Sono molto più competitivi oggi di quanto lo siano stati probabilmente nell'ultimo decennio. – jalf

+1

@Jalf: hanno già recuperato l'amara delusione della versione 3.0? – Kylotan

+1

@Kylotan: No, non ancora :( – Goz

-4

Ho usato OpenGL, ma per ora sono interessato ad esplorare il mondo di DirectX. La causa è il rilascio di DX11 che pone fine alla guerra lunga e prolungata su Windows.

Il Gruppo Khronos ha presto rilasciato OpenGL 4 per contrattaccare; purtroppo OGL4 ha ancora metà delle nuove funzionalità mancanti o ritardate; e alcuni di essi sono vitali in termini di creazione di un framework 3d flessibile.

+0

Qualcosa su cui riflettere: OpenGL 3.3/3.2 consente di utilizzare gli shader geometrici su WinXP. no, perché gli shader geometrici sono supportati solo su DX10/11, che è Vista o Windows7. "e alcuni di essi sono fondamentali per la creazione di un framework 3D flessibile." Non sono d'accordo con questa parte. La capacità di creare framework flessibile è L'API non ha importanza, un buon programmatore dovrebbe essere in grado di creare un framework flessibile indipendentemente dalle API. Dai un'occhiata a "Blade of darkness": hanno creato ombre in tempo reale, smembramento e acqua relativamente buona sull'hardware DX7 ... – SigTerm

+0

yap, quindi perché non possono ottenere un rendering di alta qualità come sulla CPU? Solo motivi di prestazioni? Certamente no. Hanno creato un framework di gioco di gioco flessibile non un renderin generico quadro g. Non riesci a vedere che il ray-tracing rt diventa possibile solo quando la GPGPU avanza? Non sto discutendo sul modo in cui è possibile adattarsi a piattaforme diverse ma la capacità di rendering. Questo è duplice: 1. possibilità di consentire vari algoritmi; 2. Buona ingegneria (alcune strutture di codifica fanno molto affidamento su caratteristiche specifiche dell'hardware. In teoria, puoi implzionare qualsiasi cosa usando infiniti codici ma non pratico) – Defd

Problemi correlati