2011-11-22 4 views
7

Sto iniziando a interessarmi all'apprendimento in OpenGL e sto cercando di capire quale sia la direzione migliore per andare fino alla lingua da utilizzare nel processo di apprendimento. Ho già molta familiarità con C# e da quello che ho letto, posso utilizzare l'API Tao per interfacciarlo con OpenGL dal codice C#. Tuttavia, mi sembra anche da quello che sto leggendo che coloro che sono sviluppatori professionisti di OpenGL sono programmatori C++.Quali vantaggi esistono in C++ su C# quando si lavora con OpenGL

Sono curioso di sapere quali vantaggi C++ potrebbe avere su C# quando si lavora con grafica 3D in OpenGL. Qualsiasi input sarebbe fantastico, visto che sono completamente nuovo a tutto questo.

+1

Vota per chiudi. Google a "C# vs C++" e troverai molte differenze. Fondamentalmente la complessità rispetto alla performance è la numero uno. C++ può funzionare meglio ancora se hai poca esperienza in C++, il codice che produci avrà probabilmente prestazioni peggiori rispetto all'equivalente C#. – Polity

+1

possibile duplicato di [Utilizzo di OpenGl con C#?] (Http://stackoverflow.com/questions/536065/using-opengl-with-c) –

+1

Mentre normalmente voterei per chiudere "lingua X vs Y", penso questo ha merito per le risposte motivate perché è più focalizzato quindi ... partire per gli altri. –

risposta

5

L'utilizzo di OpenGL tramite C# presenta alcune difficoltà.

  1. Ottenere un SDK aggiornato. Tao non è stato aggiornato dal 2008. OpenTK non ha avuto una versione stabile da giugno del 2010. OpenGL ha avuto due versioni di versione da giugno 2010. Si tratta di un sacco di funzionalità a cui semplicemente non è possibile accedere da C#. Non so quanto siano stabili i nightly di OpenTK, ma generalmente non mi fido dei nightly. Con C/C++, puoi ottenere i puntatori di funzione che vuoi caricare. Con C#, puoi utilizzare solo ciò che fornisce il tuo kit di strumenti.

  2. La gestione degli oggetti buffer può essere piuttosto dolorosa in C#. Sì, ci sono modi per caricare array di valori uniformi su oggetti buffer. Ma costruire dati di vertici intercalati, in cui diversi componenti hanno tipi diversi, è molto più difficile in C#. In C e C++, hai accesso diretto alla memoria. Quindi è facile avere un 3-vettore di float seguito da un vettore di 4 byte, tutti memorizzati in 16 byte per vertice. È piuttosto più difficile in C#.

  3. Il codice grafico è in genere una delle aree di codice più importanti per le prestazioni. Generalmente vorrete il controllo che C++ offre se state realizzando un'applicazione di rendering ad alte prestazioni come un gioco. Molte delle caratteristiche di C# funzionano contro di esso qui.

L'unico vero vantaggio che l'uso di C# è che ... è C#. Nella misura in cui ritieni che ti sia vantaggioso, allora è un vantaggio.

+0

Forse usare ** C++/CLI ** sarebbe "il migliore dei due mondi"? –

+2

@UweKeim: come? Certo, ottieni la garbage collection (per la parte CLI) e puoi parlare alle librerie standard CLR. Ma non ottieni nessuna delle belle funzionalità linguistiche di C#.E poiché le librerie standard CLR non sono molto utili per un riproduttore, non è un gran vantaggio. Il massimo che si possa usare è interop con il proprio renderer, ma ciò dovrebbe essere scritto in puro C++. In tal caso, il tuo renderer non ha bisogno di sapere o preoccuparsi che venga chiamato dal CLR. –

3

Il vantaggio più immediato per te è la preponderanza delle esercitazioni che utilizzano codice di esempio scritto in C, che i compilatori C++ accettano volentieri.

Il vantaggio più applicabile è la portabilità: C# è il bambino di Microsoft & il supporto per tale lingua su piattaforme diverse da Microsoft è alquanto impreciso. Wikipedia currently claims che l'ultimo standard ISO per C# è 2.0, mentre Microsoft ha rilasciato 4.0 e sta già sviluppando 5.0!

+0

Solo per aggiornare: secondo MS BUILD 2014 l'ISO per C# 5 è a pochi mesi di distanza e MS Roslyn apre il compilatore. C# sta davvero facendo progressi in termini di multipiattaforma. – Kr0e

Problemi correlati