Question

Existe-t-il un autre moyen de restituer des graphiques en C# au-delà RDID+ et XNA?

(Pour le développement d'un éditeur de cartes de tuiles.)

Était-ce utile?

La solution

SDL.NET est la solution que j’aime.Si vous avez besoin de 3D par-dessus, vous pouvez utiliser Tao.OpenGL pour effectuer le rendu à l'intérieur.C'est rapide, conforme aux normes de l'industrie (SDL, c'est-à-dire) et multiplateforme.

Autres conseils

Oui, j'ai écrit un contrôle Windows Forms qui encapsule DirectX 9.0 et permet une manipulation directe au niveau des pixels de la surface vidéo.

En fait, j'ai écrit un autre article sur Stack Overflow demandant s'il existe d'autres meilleures approches : C# et pointeurs dangereux pour le rendu 2D, bons ou mauvais ?

Bien qu'il soit relativement performant, il nécessite l'option de compilateur non sécurisée car il utilise des pointeurs pour accéder efficacement à la mémoire.D'où la raison de ce post précédent.

Il s'agit d'un niveau élevé d'étapes requises :

  1. Téléchargez le SDK DirectX.
  2. Créer un nouveau C# Formulaires Windows Projet et référence à l'assemblage Microsoft DirectX installé.
  3. Initialisez un nouvel objet de périphérique DirectX avec des paramètres de présentation (fenêtre, tampon arrière, etc.) Vous avez besoin.
  4. Créez l'appareil, en prenant soin d'enregistrer le mode d'affichage "Pitch" et actuel (bits par pixel).
  5. Quand vous avez besoin d'afficher quelque chose, Lock la surface de la backbuffer et stockez le pointeur retourné au début de la mémoire de surface.
  6. Utilisez l'arithmétique du pointeur, calculez la position réelle des pixels dans les données basées sur la hauteur de surface, les bits par pixel et la coordonnée réelle de pixels x / y.
  7. Dans mon cas, par souci de simplicité, je m'en tiens à 32 bpp, ce qui signifie que définir un pixel est aussi simple que :*(surfacePointer + (y * pas + x))=Color.FromARGB(255,0,0);
  8. Une fois le dessin terminé, Unlock la surface du tampon arrière.Présentez la surface.
  9. Répétez à partir de l’étape 5 si nécessaire.

Sachez qu'en adoptant cette approche, vous devez faire très attention à la vérification du mode d'affichage actuel (pas et bits par pxiel) de la surface cible.Vous devrez également mettre en place une stratégie pour gérer le redimensionnement de la fenêtre ou les changements de format d'écran pendant l'exécution de votre programme.

  • DirectX géré (espace de noms Microsoft.DirectX) pour des graphiques 3D plus rapides.Il s'agit d'un solide wrapper .NET sur l'API DirectX, qui s'accompagne d'un léger gain de performances pour la création d'objets .NET et le marshalling.À moins que vous n’écriviez un moteur 3D moderne et complet, cela fonctionnera correctement.

  • Window Presentation Foundation (WPF) (espace de noms Windows.Media) - meilleur choix pour les graphiques 2D.Possède également des capacités 3D limitées.Destiné à remplacer Windows Forms par un cadre vectoriel indépendant de la résolution, accéléré par le matériel.Très pratique, prend en charge plusieurs types de contrôles personnalisés, de ressources, de liaison de données, d'événements et de commandes...a également quelques WTF.La vitesse est généralement plus rapide que GDI et plus lente que DirectX, et dépend grandement de la façon dont vous faites les choses (on a vu quelque chose fonctionner 60 fois plus vite après une réécriture raisonnable).Nous avons réussi à implémenter 3 écrans 1280x1024 remplis d'indicateurs, de graphiques et de tracés en temps réel sur un seul (et pas le meilleur) PC.

Vous pouvez essayer d'examiner WPF, en utilisant Visual Studio et/ou Expression Blend.Je ne sais pas à quel point vous essayez d'être sophistiqué, mais il devrait être capable de gérer un simple éditeur.Regarde ça Article MSDN pour plus d'informations.

Vous pourriez examiner le Bibliothèque graphique du Caire.Le Mono le projet a des liaisons pour C#.

Caire est une option.Je suis actuellement en train de réécrire mon logiciel de cartographie en utilisant à la fois GDI+ et Cairo.Il dispose d'un générateur de cartes de tuiles, entre autres fonctionnalités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top