Ce qu'il faut utiliser? Tao, SharpGL, OpenTK, DirectX P/Invoke, XNA, MDX, SlimDX, pack de codecs API Windows [fermé]

À l'époque, c'était facile; vous avez fait vos propres trucs 3D, puis est venu DirectX, puis est venu OpenGL. Pour les développeurs. Net MDX était agréable. Puis XNA a pris le relais pour MDX, mais ce n'est pas la même chose. XNA semble être très centré sur le jeu avec tout le pipelining de contenu et le préchargement des modèles fixes et d'autres choses.

Alors, où en sommes-nous maintenant? Après quelques jours de reasearch / trial & error, je me sens partout où je regarde, je trouve des bibliothèques à moitié développées, des bibliothèques avec des frais généraux, des limitations sévères ou des bibliothèques qui sont trop complexes.

Je veux faire des trucs 3D "main libre". Par exemple, afficher 200k points sur un écran en 3D et les déplacer à 30fps (image de profondeur Kinect). Je veux faire des économiseurs D'écran 3D, des plugins d'analyse audio, etc. Ce qui n'est pas des préfabriqués pour un pipeline de contenu, et qui nécessitent des performances élevées. Et (ehm) je veux le faire à partir de. Net.

Tout le monde a de l'expérience avec des bibliothèques faciles / compréhensibles et qui donnent toujours une certaine liberté et de vitesse?

59
3d c#
demandé sur Tedd Hansen 2011-02-03 13:39:17

4 réponses

Je semble avoir atterri sur OpenTK . Je pense qu'il 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 peu de 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 pour chaque passage, ce qui est génial parce que je travaille principalement avec des pointeurs dangereux vers la mémoire.

Il est bien sûr difficile de combiner vitesse et facilité de utiliser. 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 à celui de certains des autres que j'ai essayé. Si je voulais faire une animation de personnages préfabriqués, XNA serait probablement un meilleur choix, mais pour mon utilisation (décrite 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
répondu Tedd Hansen 2011-07-11 11:40:13

Si vous avez aimé MDX, SlimDX devrait être juste dans votre allée. C'est fondamentalement un remplacement pour MDX, mais avec beaucoup de décisions de conception discutables fixées, et beaucoup plus de fonctionnalités incluses. Tout ce que vous aviez avec MDX, vous trouverez présent dans SlimDX sous une forme ou une autre.

8
répondu MikeP 2011-02-04 17:06:45

Sinon, il existe un autre paquet C# wrapper pour OpenGL: OpenGL DotNet. Fonctionne très bien pour moi! Vérifiez-le à 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 (Bibliothèque D'images du développeur), ILU et ilut pour DevIL.

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

3
répondu Taylan İnan 2014-03-31 19:21:36

Nous avons fait face à un problème similaire il y a quelque temps et ce qui suit ne représente notre opinion que bien sûr. L'une de nos principales préoccupations était que la bibliothèque devrait être polyvalente, produire des images 3D de très bonne qualité, libres, et ne pas mettre des charges de contraintes supplémentaires sur le programme d'installation, c'est-à-dire comme avec XNA où vous devez avoir les fichiers corrects installés. Cela semblait être une source possible de maux de tête. À la fin, 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é réalisé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 n'avons pas regretté du tout.

1
répondu Pedery 2011-02-03 13:34:11