Usando OpenGl con C #? [chiuso]


118

Esistono librerie di supporto OpenGL gratuite per C #? In tal caso, quale utilizzo e dove trovo i progetti di esempio?

C # fornisce classi per OpenGL?


So che questo è un thread estremamente vecchio, ma Unity potrebbe interessarti
clabe45

Risposte:


129

OpenTK è un miglioramento rispetto all'API Tao, poiché utilizza lo stile C # idiomatico con sovraccarico, enumerazioni fortemente tipizzate, eccezioni e tipi .NET standard:

GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);

al contrario di Tao che rispecchia semplicemente l'API C:

Gl.glBegin(Gl.GL_POINTS);   // double "gl" prefix
Gl.glColor3ub(255, 255, 0); // have to pass RGB values as separate args
Gl.glVertex3f(0, 1, 0);     // explicit "f" qualifier

Questo rende il porting più difficile ma è incredibilmente piacevole da usare.

Come bonus fornisce rendering dei caratteri, caricamento delle texture, gestione degli input, audio, matematica ...

Aggiornamento 18 gennaio 2016 : oggi il manutentore di OpenTK si è allontanato dal progetto , lasciando il suo futuro incerto. I forum sono pieni di spam. Il manutentore consiglia di passare a MonoGame o SDL2 #.

Aggiornamento 30 giugno 2020 : OpenTK ha nuovi manutentori da un po 'di tempo e ha una comunità attiva di discord. Quindi la precedente raccomandazione di utilizzare un'altra libreria non è necessariamente vera.


5
Non penso che queste funzioni siano molto rappresentative, perché sono tutte deprecate e rimosse dal profilo principale di OpenGl.
Arne

6
È vero, quelle funzioni vengono rimosse dal profilo principale. Ma gli argomenti sono ancora validi. "OpenTK è un miglioramento rispetto all'API Tao, poiché utilizza lo stile idiomatico C # con sovraccarico, enumerazioni fortemente tipizzate, eccezioni e tipi .NET standard"
Syaiful Nizam Yahya

1
Il sito web collegato non è valido per questo post ora.
Sonny Childs

16

Penso che il significato di @korona fosse dato che è solo un'API C, puoi consumarlo direttamente da C # con un sacco di digitazione in questo modo:

[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);

Sfortunatamente dovresti farlo per ogni singola funzione OpenGL che chiami, ed è fondamentalmente ciò che Tao ha fatto per te.


Come lo faresti su Linux (con mono)?
deceleratedcaviar

Fondamentalmente esattamente lo stesso, mono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

Tao dovrebbe essere un bel quadro.

Dal loro sito:

Tao Framework per .NET è una raccolta di associazioni per facilitare lo sviluppo di applicazioni multimediali multipiattaforma utilizzando le piattaforme .NET e Mono.


1
Il nuovo sito web per Tao è: Tao Framework
Thymine

9

SharpGL è un progetto che ti consente di utilizzare OpenGL nelle tue applicazioni Windows Form o WPF.


7

Puoi OpenGL senza un wrapper e usarlo in modo nativo in C #. Proprio come ha detto Jeff Mc, dovresti importare tutte le funzioni di cui hai bisogno con DllImport.

Quello che ha escluso è dover creare il contesto prima di poter utilizzare una qualsiasi delle funzioni OpenGL. Non è difficile, ma ci sono poche altre DllImport non così intuitive che devono essere eseguite.

Ho creato un progetto C # di esempio in VS2012 con quasi il minimo necessario per far funzionare OpenGL su Windows. Dipinge solo la finestra di blu, ma dovrebbe essere sufficiente per iniziare. L'esempio può essere trovato su http://www.glinos-labs.org/?q=programming-opengl-csharp . Cerca l' esempio No wrapper in basso.


5
il tuo collegamento è morto, puoi condividere il tuo progetto. Grazie.
dangerousdave

7

Consiglierei anche il Tao Framework . Ma una nota in più:

Dai un'occhiata a questi tutorial: http://www.taumuon.co.uk/jabuka/


Non ho idea di cosa sia successo a Tao quando la pagina è scesa un po 'di tempo fa.
Dominic K

Il nuovo sito web per Tao è: Tao Framework
Thymine

1
Tao sembra essere un bersaglio in movimento. Ho aggiornato il collegamento, perché ora è passato anche da mono a sourceforge.
Oliver

Wow, novembre 2005 ... OpenGL non cambia molto?
jocull

1
@JonHarrop sì sembra che non abbiano impostato un reindirizzamento lì utilizzando una pagina github ora opentk.github.io
Dreamwalker

4

Cosa vorresti che facessero queste librerie di supporto? Il solo utilizzo di OpenGL da C # è abbastanza semplice e non richiede alcuna libreria aggiuntiva afaik.


In quale spazio dei nomi si possono trovare queste classi?
MegaByte

4
OpenGL non fa parte di .NET, a partire dalla versione 4.0
mafu

3
@MegaByte È necessario accedervi tramite platform invoke.
Espiazione limitata

2

Per quanto riguarda la (un po 'fuori tema, lo so ma poiché è stata sollevata in precedenza) XNA vs OpenGL, potrebbe essere vantaggioso in diversi casi utilizzare OpenGL invece di XNA (e in altri XNA invece di OpenGL ...).

Se hai intenzione di eseguire le applicazioni su Linux o Mac usando Mono, potrebbe essere una buona scelta andare con OpenGL. Inoltre, cosa che non è così ampiamente conosciuta penso, se hai clienti che eseguiranno le tue applicazioni in un ambiente Citrix, DirectX / Direct3D / XNA non sarà una scelta economica come OpenGL. La ragione di ciò è che le applicazioni OpenGL possono essere co-ospitate su un numero inferiore di server (a causa di problemi di prestazioni un singolo server non può ospitare un numero infinito di istanze dell'applicazione) rispetto alle applicazioni DirectX / XNA che richiedono server virtuali dedicati per l'esecuzione in hardware modalità accelerata. Esistono altri requisiti come le schede grafiche supportate ecc., Ma mi atterrò al problema XNA vs OpenGL. Come architetto IT, sviluppatore di software ecc., Questo dovrà essere considerato prima di scegliere tra OpenGL e DirectX / XNA ...

Una nota a margine è che WebGL è basato su OpenGL ES3 afaik ...

Come ulteriore nota, queste non sono le uniche considerazioni, ma potrebbero rendere più facile la scelta per alcuni ...


1

XNA 2.0 richiede almeno una scheda shader 1.1. Sebbene sia vecchia tecnologia, non tutti ne hanno una. Alcuni laptop più recenti (nella nostra esperienza tablet Toshiba con grafica Intel) non supportano lo shader 1.1. XNA semplicemente non funzionerà su queste macchine.

Questo è un problema significativo per noi e siamo passati a Tao e OpenGL. Inoltre con Tao abbiamo associazioni per il supporto audio e Lua.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.