2009-02-11 15 views
108

Esistono librerie di supporto OpenGL gratuite per C#? Se sì, quale uso e dove trovo progetti di esempio?Utilizzo di OpenGl con C#?

Il C# fornisce classi per OpenGL?

+0

So che questo è un thread estremamente vecchio, ma [Unity] (https://unity3d.com/) potrebbe ti interessa – clabe45

risposta

3

Cosa vorresti che queste librerie di supporto facessero? L'uso di OpenGL da C# è abbastanza semplice e non richiede alcuna ulteriore libreria.

+0

In quale spazio dei nomi possono essere trovate queste classi? – MegaByte

+4

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

+2

@MegaByte Devono essere accessibili tramite la piattaforma invoke. –

14

Tao dovrebbe essere un quadro piacevole.

Dal loro sito:

Il quadro Tao per NET è un insieme di binding per facilitare cross-piattaforma di sviluppo applicativo multimediale utilizzando .NET e Mono piattaforme.

+1

Il nuovo sito Web per Tao è: [Tao Framework] (http://www.mono-project.com/Tao) – Thymine

6

Vorrei anche raccomandare il Tao Framework. Ma una nota:

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

+0

Non ho idea di cosa sia successo a Tao quando la pagina è andata giù un po 'di tempo fa. – DMan

+0

Il nuovo sito Web per Tao è: [Tao Framework] (http://www.mono-project.com/Tao) – Thymine

+1

Tao sembra essere un bersaglio mobile. Ho aggiornato il collegamento, perché è stato spostato da mono ora a sourceforge. – Oliver

0

XNA 2.0 richiede un minimo di un 1.1 carta di shader. Mentre la vecchia tecnologia, non tutti ne hanno uno. Alcuni laptop più recenti (nella nostra esperienza, i tablet Toshiba con grafica Intel) non hanno il supporto per lo shader 1.1. XNA semplicemente non funzionerà con queste macchine.

Questo è un problema significativo per noi e ci siamo spostati su Tao e OpenGL. Inoltre con Tao abbiamo attacchi per audio & supporto Lua.

15

Penso che quello che @korona significava era dal momento che è solo un'API C, si può consumare da C# direttamente con un diavolo di un sacco di battitura in questo modo:

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

È purtroppo avrebbe bisogno di fare questo per ogni singola funzione OpenGL che chiami, ed è fondamentalmente ciò che Tao ha fatto per te.

+0

Come procedere su Linux (con mono)? – dcousens

+0

Sostanzialmente identico, http://www.mono-project.com/Interop_with_Native_Libraries –

119

OpenTK è un miglioramento rispetto l'API Tao, in quanto utilizza idiomatica C# stile con sovraccarico, enumerazioni fortemente tipizzato, eccezioni e tipi .NET standard:

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

al contrario di Tao che si limitano rispecchia il C API:

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

Come bonus fornisce il rendering dei font, la consistenza di carico, la gestione dell'input, audio, matematica ...

Aggiornamento 2016/01/18: Oggi il manutentore OpenTK ha stepped away from the project, lasciando il suo futuro incerto. I forum sono pieni di spam. Il maintainer consiglia di passare a MonoGame o SDL2 #.

+5

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

+5

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 idioma C# con sovraccarico, enfasi fortemente tipizzate, eccezioni e tipi .NET standard" –

+0

Il sito Web collegato non è valido per questo post ora. –

8

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

5

È possibile aprire OpenGL senza wrapper e utilizzarlo in modo nativo in C#. Proprio come diceva Jeff Mc, dovresti importare tutte le funzioni necessarie con DllImport.

Ciò che ha omesso è creare il contesto prima di poter utilizzare una qualsiasi delle funzioni OpenGL. Non è difficile, ma ci sono poche altre DllImports non così intuitive che devono essere fatte.

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

+4

il tuo link è morto, per favore puoi condividere il tuo progetto. Grazie. – dangerousdave

1

Riguardo al (un po 'fuori tema lo so ma visto che è stato portato in precedenza) scelta XNA vs OpenGL, potrebbe essere utile in diversi casi andare con OpenGL invece di XNA (e in altri XNA invece di OpenGL ...).

Se si eseguono le applicazioni su Linux o Mac utilizzando Mono, potrebbe essere una buona scelta andare con OpenGL. Inoltre, che non è così noto, penso che se hai clienti che eseguiranno le tue applicazioni in un ambiente Citrix, DirectX/Direct3D/XNA non sarà la scelta più economica come OpenGL. La ragione di ciò è che le applicazioni OpenGL possono essere co-ospitate su un numero minore di server (a causa di problemi di prestazioni che 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 schede grafiche supportate, ecc., Ma terrò il problema con XNA e OpenGL. In qualità di IT Architect, sviluppatore di software ecc questo dovrà essere considerato prima di scegliere tra OpenGL e DirectX/XNA ...

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

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