Frage

Gibt es eine andere Art und Weise Grafiken in C # zu machen über GDI + und XNA ?

(Für die Entwicklung einer Kachel Map-Editor.)

War es hilfreich?

Lösung

SDL.NET ist die Lösung, die ich gekommen bin zu lieben. Wenn Sie auf der 3D benötigen, können Sie Tao.OpenGL verwenden im Inneren zu machen. Es ist schnell, Industriestandard ( SDL , das ist), und Cross-Plattform.

Andere Tipps

Ja, ich habe eine Windows Forms-Steuer geschrieben, die DirectX 9.0 wickelt und bietet eine direkte Pixelebene Manipulation der Videooberfläche.

Ich schrieb tatsächlich eine andere Stelle auf Stack-Überlauf zu fragen, ob es andere bessere Ansätze: Unsichere C # und Zeiger für 2D-Rendering, gut oder schlecht?

Während es relativ hohe Leistung ist, erfordert es die unsichere Compiler-Option, wie es Zeiger verwendet den Speicher effizient zuzugreifen. Dies ist der Grund für diese frühere Post.

Dies ist ein hohes Maß an die erforderlichen Schritte:

  1. Laden Sie die DirectX SDK.
  2. Erstellen Sie ein neues C # Windows Forms Projekt und verweisen die installierten Microsoft DirectX Montage.
  3. Initialize ein neues DirectX-Geräteobjekt mit Darstellungsparametern (Gefenstert, zurück Pufferung, etc.) Sie benötigen.
  4. Erstellen Sie das Gerät Achten Sie auf die Oberfläche „Pitch“ zu erfassen und aktuelle Anzeigemodus (Bits pro Pixel).
  5. Wenn Sie etwas brauchen, um anzuzeigen, Lock den Backbuffer Oberfläche und speichert den zurückgegebenen Zeiger auf den Beginn von Oberflächen Speicher.
  6. Verwenden Sie die Zeigerarithmetik, die Berechnung der tatsächlichen Pixelposition in der Daten basierend auf der Oberflächensteigung, Bits pro Pixel und der Ist-x / y-Pixelkoordinate.
  7. In meinem Fall der Einfachheit halber ich das Festhalten an 32 bpp, was bedeutet eine Pixeleinstellung ist so einfach wie: * (surfacePointer + (y * Pitch + x)) = Color.FromArgb (255,0,0);
  8. Beim Zeichnen fertig sind, Unlock die hintere Pufferfläche. Präsentieren Sie die Oberfläche.
  9. Wiederholen von Schritt 5 nach Bedarf.

Beachten Sie, dass dieser Ansatz nehmen Sie sehr vorsichtig sein müssen, um den aktuellen Anzeigemodus (Tonhöhe und Bits pro pxiel) der Zielfläche zu prüfen. Auch müssen Sie eine Strategie verfügen, mit Fenstergröße oder Änderungen von Bildschirmformat zu behandeln, während das Programm ausgeführt wird.

  • Managed DirectX (Microsoft.DirectX Namespace) für eine schnellere 3D-Grafiken. Es ist ein solider .NET Wrapper über DirectX-API, die für die Erstellung von .NET-Objekten und Rangier mit einem wenig Leistungseinbußen kommen. Sofern Sie eine voll funktionsfähige moderne 3D-Engine schreiben, wird es funktionieren.

  • Windows Presentation Foundation (WPF) (Windows.Media Namespace) - beste Wahl für 2D-Grafik. Auch hat eine begrenzte 3D-Fähigkeiten. Gezielter zu Windows Forms mit Vektor zu ersetzen, Hardware auflösungsunabhängige Framework beschleunigt. Sehr bequem, unterstützt verschiedene Aromen von Custom Controls, Ressourcen, Datenbindung, Ereignisse und Befehle ... hat auch ein paar WTFs. Die Geschwindigkeit ist in der Regel schneller als GDI und langsamer als DirectX und hängt stark ab, wie Sie Dinge tun (etwas gesehen 60 mal schneller zu arbeiten, nachdem in einer vernünftigen Art und Weise umgeschrieben). Wir hatten einen Erfolg der Umsetzung 3 1280x1024 Bildschirm voller Echtzeit-Indikatoren, Grafiken und Diagramme auf einem einzigen (und nicht dem besten) PC.

Sie könnten versuchen, in WPF suchen, die mit Visual Studio und / oder Expression Blend. Ich bin mir nicht sicher, wie hoch entwickelt Sie versuchen, zu bekommen, aber es sollte einen einfachen Editor zu handhaben können. Sehen Sie sich diese MSDN Artikel für weitere Informationen.

Sie könnten Blick in die Cairo-Grafikbibliothek . Das Mono Projekt hat Bindings für C #.

Kairo ist eine Option. Ich Umschreiben derzeit meine Mapping-Software sowohl GDI + und Kairo mit. Es hat eine Kachel-Map-Generator, unter anderem Features.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top