web-dev-qa-db-fra.com

Que faut-il utiliser? Tao, SharpGL, OpenTK, DirectX P / Invoke, XNA, MDX, SlimDX, Windows API Codec Pack

À l'époque, c'était facile; Vous avez créé vos propres trucs 3D, puis est venu DirectX, puis OpenGL. Pour les développeurs .Net, MDX était sympa. Puis XNA a succédé à MDX, mais ce n'est pas la même chose. XNA semble être très centré sur le jeu avec tout le pipeline de contenu et le préchargement de modèles fixes et autres.

Où en sommes-nous maintenant? Après quelques jours de recherche/essais et erreurs, je sens que partout où je regarde, je trouve des bibliothèques à moitié développées, des bibliothèques avec surcharge, des limitations sévères ou des bibliothèques trop complexes.

Je veux faire des trucs 3D "à main levée". Par exemple, afficher 200 000 points sur un écran en 3D et les déplacer à 30 images par seconde (image de profondeur Kinect). Je veux faire des économiseurs d'écran 3D, des plugins d'analyse audio, etc. Tout cela n'est pas préfabriqué pour un pipeline de contenu, et qui nécessite de hautes performances. Et (ehm) je veux le faire à partir de .Net.

Quelqu'un a-t-il de l'expérience avec des bibliothèques qui sont faciles/compréhensibles et qui offrent quand même une certaine liberté et vitesse?

59
Tedd Hansen

Je semble avoir atterri sur OpenTK . Je pense que cela donne un accès plus ou moins direct à l'API OpenGL et ne nécessite pas de charges de dépendances.

Il est relativement facile à comprendre. Cela nécessite quelques lignes de code (et compréhensibles) pour commencer. Il ne contient pas les objets pour moi, donc je suis libre de changer quoi que ce soit à chaque passage, ce qui est génial car je travaille principalement avec des pointeurs non sécurisés vers la mémoire.

Il est bien sûr difficile de combiner vitesse et facilité d'utilisation. La vitesse nécessite de parler directement à l'API 3D tandis que la facilité d'utilisation nécessite une abstraction. Par conséquent, cela doit être considéré comme une API de niveau inférieur à certains des autres que j'ai essayés. Si je voulais faire une animation de personnage préfabriquée, alors XNA serait probablement un meilleur choix, mais pour mon usage (décrit ci-dessus), cela semble très prometteur jusqu'à présent (4-5 heures de piratage).

Quelques exemples de code:

private void Render()
{
   // Every frame
   GL.MatrixMode(MatrixMode.Modelview);
   GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
   GL.LoadMatrix(ref cameraMatrix);

   GL.Begin(BeginMode.Points);

   // Here I can add lots of points. I add 200k without any big problem.
   // It seems these points could have been passed in as an array pointer too,
   //  but I'll look at that later.
   GL.Vertex3(x2, y2, z2);

   GL.End();
   glControl.SwapBuffers();
}
13
Tedd Hansen

Si vous avez aimé MDX, SlimDX devrait être à votre place. Il s'agit essentiellement d'un remplacement pour MDX, mais avec de nombreuses décisions de conception douteuses corrigées, et beaucoup plus de fonctionnalités incluses. Tout ce que vous aviez avec MDX, vous le trouverez présent dans SlimDX sous une forme ou une autre.

8
MikeP

Il existe également un autre package de wrapper C # pour OpenGL: OpenGL DotNet. Fonctionne très bien pour moi! Vérifiez-le sur http://www.taylaninan.com/opengl-dotnet.php .

Il enveloppe OpenGL jusqu'à la version 4.4 et prend en charge plus de 550+ extensions OpenGL. Il prend également en charge GLU, GLUT, FreeGLUT, DevIL (Developer's Image Library), ILU et ILUT for DevIL.

C'est une API de bas niveau pour les bibliothèques ci-dessus.

3
Taylan İnan

Nous avons fait face à un problème similaire il y a quelque temps et ce qui suit ne représente bien sûr que notre opinion. L'une de nos principales préoccupations était que la bibliothèque soit polyvalente, produise des images 3D de très bonne qualité, gratuitement et n'impose pas de charges de contraintes supplémentaires à l'installateur, c'est-à-dire comme avec XNA où vous devez avoir les bons fichiers installés. Cela semblait être une source possible de maux de tête. Finalement, nous nous sommes installés pour DirectX et avons écrit l'interface graphique en C #. Toutes les interactions nécessaires avec la 3D ont été effectuées avec wndproc. Cela nous a fourni à la fois la puissance de DirectX et la facilité de développement de l'interface graphique avec C #. Nous ne l'avons pas du tout regretté.

1
Pedery