Je voudrais apprendre à créer des applications 3D simples pour Windows 7/desktop. J'entends par là des sphères, des triangles ou des pixels se déplaçant dans l'espace 3D. Cela n'a pas encore besoin d'être très compliqué. Pour cela, je voudrais utiliser le langage C # avec .NET (Java/C++ est ma deuxième priorité).
Je sais que cela a été posé à plusieurs reprises sur Internet, mais j'ai l'impression que la plupart des questions sont obsolètes, de nombreuses API obsolètes et les didacticiels trop anciens.
Je pensais à l'apprentissage de XNA, mais j'ai ensuite appris que Microsoft ne prévoit plus de le développer et de le prendre en charge. SharpDX semblait également être une bonne façon de procéder, mais cela semble être destiné au Windows Store et Applications téléphoniques.
En regardant sur Internet, Managed DirectX semblait exactement ce que je cherchais (la syntaxe, la complexité), mais encore une fois, c'est trop obsolète pour moi d'utiliser.
Pouvez-vous s'il vous plaît me guider ce que je dois apprendre pour créer des applications 3D simples mais solides?
Jetez un œil à SlimDX . Il s'agit d'une bibliothèque open source, gratuite et gérée pour DirectX (DirectX 11). Chaque version coïncide avec une version DirectX, donc la plupart du temps, elle est assez à jour. Je l'ai utilisé et c'était assez facile de commencer. Ici (faites défiler vers le bas) est une comparaison avec d'autres possibilités que vous avez mentionnées.
Le plus simple est probablement d'utiliser WPF 3D. Il s'agit d'un système graphique en mode conservé, donc si vous n'avez pas d'énormes besoins (par exemple: des shaders spéciaux pour les effets, etc.), il est très facile à configurer et à utiliser directement.
Sinon, un système 3D plus élaboré, tel que XNA, pourrait être plus approprié. Ce sera plus de travail à configurer, mais vous donnera beaucoup plus de contrôle.
Dans le monde OpenGL, j'utilise OpenTK . J'ai dû construire au-dessus du code existant avec C#
pour afficher des objets géométriques plats sans ombrage ni effets réalistes.
Voici un exemple:
Généré à partir du code:
void InitModels()
{
Scene.CoordinateSystem cs1 = new Scene.CoordinateSystem(world.Ground)
{
DrawSize = 1,
Visible = false
};
Scene.CoordinateSystem cs2 = new Scene.CoordinateSystem(world.Ground, 0.6 * vec3.J)
{
DrawSize = 0.5,
Orientation = rot3.RotateXDegrees(-15)
};
Scene.Cube cube = new Scene.Cube(cs1)
{
CubeSize = 0.5
};
cs2.AddPoint(new point3(vec3.O,1), Color.Firebrick, 15);
var line = cs2.AddLine(new line3(-vec3.I, vec3.I), 20, Color.SlateGray, 2);
line.SetPattern(0xFF0F, GeometryTest.Scene.Stripple.Scale2);
cube.BindTexture(5, GeometryTest.Properties.Resources.Julia, true);
cube.AddText(3, "OpenTK 1.0", Color.DarkMagenta, 0.5f, 0.5f, 1.0f);
}