Utiliser OpenGl avec C #? [fermé]


118

Existe-t-il des bibliothèques de support OpenGL gratuites pour C #? Si oui, lequel dois-je utiliser et où puis-je trouver des exemples de projets?

C # fournit-il des classes pour OpenGL?


Je sais que c'est un fil extrêmement ancien, mais Unity pourrait vous intéresser
clabe45

Réponses:


129

OpenTK est une amélioration par rapport à l'API Tao, car il utilise un style C # idiomatique avec surcharge, énumérations fortement typées, exceptions et types .NET standard:

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

contrairement à Tao qui reflète simplement 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

Cela rend le portage plus difficile mais est incroyablement agréable à utiliser.

En prime, il fournit le rendu des polices, le chargement des textures, la gestion des entrées, l'audio, les mathématiques ...

Mise à jour du 18 janvier 2016 : Aujourd'hui, le mainteneur d'OpenTK s'est éloigné du projet , laissant son avenir incertain. Les forums sont remplis de spam. Le responsable recommande de passer à MonoGame ou SDL2 #.

Mise à jour du 30 juin 2020 : OpenTK a de nouveaux mainteneurs depuis un certain temps maintenant et dispose d'une communauté discord active. La recommandation précédente d'utiliser une autre bibliothèque n'est donc pas nécessairement vraie.


5
Je ne pense pas que ces fonctions soient très représentatives, car elles sont toutes obsolètes et supprimées du profil de base OpenGl.
Arne

6
Certes, ces fonctions sont supprimées du profil principal. Mais les arguments sont toujours valables. "OpenTK est une amélioration par rapport à l'API Tao, car il utilise un style C # idiomatique avec surcharge,
énumérations

1
Le site Web lié n'est pas valide pour ce message maintenant.
Sonny Childs

16

Je pense que ce que @korona voulait dire, c'est que ce n'est qu'une API C, vous pouvez le consommer directement à partir de C # avec beaucoup de frappe comme ceci:

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

Vous auriez malheureusement besoin de le faire pour chaque fonction OpenGL que vous appelez, et c'est essentiellement ce que Tao a fait pour vous.


Comment feriez-vous cela sur Linux (avec mono)?
deceleratedcaviar

Fondamentalement exactement la même chose, mono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

Tao est censé être un joli cadre.

Depuis leur site:

Le Tao Framework pour .NET est un ensemble de liaisons destinées à faciliter le développement d'applications multimédias multiplateformes à l'aide des plates-formes .NET et Mono.


1
Le nouveau site Web pour Tao est: Tao Framework
Thymine

9

SharpGL est un projet qui vous permet d'utiliser OpenGL dans vos applications Windows Forms ou WPF.


7

Vous pouvez OpenGL sans wrapper et l'utiliser de manière native en C #. Comme l'a dit Jeff Mc, vous devrez importer toutes les fonctions dont vous avez besoin avec DllImport.

Ce qu'il a oublié, c'est d'avoir à créer un contexte avant de pouvoir utiliser l'une des fonctions OpenGL. Ce n'est pas difficile, mais il y a peu d'autres DllImports pas si intuitifs à faire.

J'ai créé un exemple de projet C # dans VS2012 avec presque le strict minimum nécessaire pour faire fonctionner OpenGL sous Windows. Cela ne peint que la fenêtre en bleu, mais cela devrait suffire à vous aider à démarrer. L'exemple peut être trouvé à http://www.glinos-labs.org/?q=programming-opengl-csharp . Recherchez l' exemple No Wrapper en bas.


5
votre lien est mort, pouvez-vous partager votre projet. Merci.
dangerousdave

7

Je recommanderais également le Tao Framework . Mais une note supplémentaire:

Jetez un œil à ces tutoriels: http://www.taumuon.co.uk/jabuka/


Je n'ai aucune idée de ce qui est arrivé à Tao, car la page s'est arrêtée il y a un certain temps.
Dominic K

Le nouveau site Web de Tao est: Tao Framework
Thymine

1
Tao semble être une cible mouvante. J'ai mis à jour le lien, car il est également passé de mono maintenant à sourceforge.
Oliver

Wow, novembre 2005 ... OpenGL ne change-t-il pas grand-chose?
jocull

1
@JonHarrop ouais on dirait qu'ils n'ont pas défini de redirection là-bas en utilisant une page github maintenant opentk.github.io
Dreamwalker

4

Que souhaitez-vous que ces bibliothèques de support fassent? Utiliser simplement OpenGL à partir de C # est assez simple et ne nécessite aucune bibliothèque supplémentaire afaik.


Dans quel espace de noms ces classes peuvent-elles être trouvées?
MegaByte

4
OpenGL ne fait pas partie de .NET, à partir de la version 4.0
mafu

3
@MegaByte Ils doivent être accessibles via un appel de plateforme.
Expiation limitée

2

Concernant le (quelque peu hors sujet que je connais mais comme il a été évoqué plus tôt) XNA vs OpenGL, il pourrait être avantageux dans plusieurs cas d'utiliser OpenGL au lieu de XNA (et dans d'autres XNA au lieu d'OpenGL ...).

Si vous envisagez d'exécuter les applications sous Linux ou Mac en utilisant Mono, cela peut être un bon choix d'utiliser OpenGL. De plus, ce qui n'est pas si largement connu, je pense, si vous avez des clients qui vont exécuter vos applications dans un environnement Citrix, alors DirectX / Direct3D / XNA ne sera pas un choix aussi économique qu'OpenGL. La raison en est que les applications OpenGL peuvent être co-hébergées sur un moins grand nombre de serveurs (en raison de problèmes de performances, un seul serveur ne peut pas héberger un nombre infini d'instances d'application) que les applications DirectX / XNA qui nécessitent des serveurs virtuels dédiés pour s'exécuter dans le matériel mode accéléré. D'autres exigences existent, comme les cartes graphiques prises en charge, etc., mais je vais m'en tenir au problème XNA vs OpenGL. En tant qu'architecte informatique, développeur de logiciels, etc., cela devra être pris en compte avant de choisir entre OpenGL et DirectX / XNA ...

Une note latérale est que WebGL est basé sur OpenGL ES3 afaik ...

En outre, ce ne sont pas les seules considérations, mais elles pourraient faciliter le choix de certains ...


1

XNA 2.0 nécessite au minimum une carte shader 1.1. Bien que vieille technologie, tout le monde n'en a pas. Certains ordinateurs portables plus récents (d'après notre expérience, les tablettes Toshiba avec graphiques Intel) ne prennent pas en charge le shader 1.1. XNA ne fonctionnera tout simplement pas sur ces machines.

C'est un problème important pour nous et nous sommes passés à Tao et OpenGL. De plus, avec Tao, nous avons des liaisons pour le support audio et Lua.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.