Laden...
FAQ

[FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?

Erstellt von MrSparkle vor 12 Jahren Letzter Beitrag vor 10 Jahren 44.680 Views
MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren
[FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?

Zusammenfassung

"Wie findet man den Einstieg in die 3D-Programmierung?" ist eine oft gestellte Frage im Forum. Leider lässt sie sich nicht so ohne weiteres beantworten. Zuerst muss man sich darüber klar werden, was man erreichen möchte und welche Mittel dafür notwendig sind. Deshalb haben wir eine Liste mit den verschiedenen Technologien zusammengestellt, die Euch bei dieser Entscheidung helfen soll.

**
Voraussetzungen**

Die wichtigsten Voraussetzungen für den Einstieg in die 3D-Programmierung gelten für alle Varianten:*Fortgeschrittene C#-Kenntnisse *Dreidimensionales Vorstellungsvermögen *Mathematik-Grundkenntnisse *Durchhaltevermögen

**
Überblick**

Im Folgenden findet ihr eine Übersicht über die Technologien, mit deren Hilfe man unter .NET Hardware-beschleunigte 3D-Grafik darstellen kann. Bei allen genannten Varianten ist übrigens auch eine Hardware-beschleunigte Darstellung von 2D-Grafik möglich. Die Liste ist in keiner bestimmten Reihenfolge geordnet, und erhebt keinen Anspruch auf Vollständig- oder gar Richtigkeit. Wer eine Information hinzufügen oder berichtigen möchte, wendet sich bitte an den Autor oder das Team von myCSharp!1.Managed DirectX (MDX) 1.XNA 1.SlimDX 1.Tao-Framework/OpenTK 1.Game Engines 1.Visualization Toolkit (VTK) 1.WPF 1.WebGL


Fazit

Die 3D-Entwicklung ist kein Pappenstiel und erfordert einiges an Lern- und Leidensbereitschaft. Gute Programmier- und C#-Kenntnisse sind dafür eine unbedingte Voraussetzung, und auch dann ist selbst ein einfaches Spiel eine große Herausforderung. Wer sich aber nicht zu schade ist, das eine oder andere Buch auf Englisch zu lesen und seine Mathe-Kenntnisse aufzufrischen, wird bald sehr eindrucksvolle Resultate vorweisen können. Wie man den Einstieg findet, oder auf welche Technologie man setzt, hängt von den eigenen Beweggründen genauso ab, wie von den Anforderungen an die zu entwickelnde Software. Es gibt dafür also keine Faustregel, trotzdem würden wir folgende Empfehlung abgeben: 1.Für Spieleentwickler: XNA oder Game Engine

1.Für Anwendungsentwickler: WPF, XNA, SlimDX, OpenTK

1.Für Wissenschaftler: VTK mit .NET-Wrapper

1.Für Frickler und Optimierer: SlimDX oder OpenTK

1.Für Web-Entwickler und solche, die es werden wollen: WebGL

**
Buchempfehlungen:**
1."Graphics Gems"-Reihe

1."Game Programming Gems"-Reihe

1."Shader X"-Reihe

1....

Und jetzt viel Spaß beim Einstieg in die 3D-Entwicklung mit C#!

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

1. Managed DirectX (MDX)

MDX ist eine veraltete API von Microsoft für die Verwendung von DirectX unter .NET. Es gibt noch viele Tutorials zum Thema Managed DirectX im Internet, und daher scheint es nach wie vor weit verbreitet zu sein. MDX wird allerdings von Microsoft seit Jahren nicht mehr unterstützt oder weiterentwickelt und ist nur noch unter dem Aspekt "Wie hat alles mal angefangen" interessant.

Der inoffizielle Nachfolger von Microsoft, **XNA **(siehe unten), ist wesentlich besser in die .NET-Umgebung integriert. In der Open-Source-Szene ist der inoffizieller Nachfolger allerdings SlimDX, das sich viel näher am ursprünglichen DirectX-Konzept hält, und mittlerweile auch neuere Versionen als DirectX 9 unterstützt.

Trotzdem gelten die meisten hier genannten Punkte auch für alle anderen DirectX-basierten APIs wie SlimDX oder XNA.

**Was ist möglich?**  
 		*Alles, was mit DirectX 9 möglich ist  
	

*Hardware-basierte Darstellung von 3D-Objekten mit Texturen und Shadern mit HLSL

*Linien

*Software-Fallback, wenn keine Hardware-Unterstützung zur Verfügung steht

*Benutzer-Interaktion über DirectInput

**Was ist nicht möglich?**  
 		*Szenenverwaltung  
	

*UI-Elemente

*Features von DirectX 10+

**Wie finde ich den Einstieg?**  
 		*Bücher sind unumgänglich zum Thema Hardware-Rendering und Shader (HLSL, GraphicsGems GameGems usw.)  
	

*Tutorials im Internet, Probieren

*DirectX-Debugging-Modus, DebugView

**Einige Anwendungsbeispiele**  
 		*Mit einfachsten Mitteln und unter größten Anstrengungen einen möglichst hardwarenahen Einstieg zu finden.  

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

2. XNA

XNA steht für "XNA's not an acronyme" und ist Microsofts Weiterentwicklung von Managed DirectX. Es unterscheidet sich in erster Linie durch eine komfortablere Programmierung und dem gut dokumentierten XNA-Framework, und erleichtert dadurch den Einstieg enorm. Mit dem XNA Game Studio Express bietet Microsoft eine kostenlose Entwicklungsumgebung für die Game-Entwicklung mit C# oder VisualBasic.NET. Außerdem gibt es eine sehr aktive Community und viele gute Tutorials im Internet.

Inoffiziellen Berichten zufolge entwickelt Microsoft XNA allerdings seit 2013 nicht mehr weiter. Open-Source-Implementierungen wie MonoXNA haben aber nach wie vor eine aktive Community.

**Was ist möglich?**  
 		*(wie MDX, aber nicht so umständlich und in den gewohnten .NET-Workflow und die IDE integriert)  



**Was ist nicht möglich?**  
 		*Eigentlich kaum irgendetwas (?)  



**Wie finde ich den Einstieg?**  
 		*Erster Einstieg: [RocketCommander Videotutorials](http://exdream.com/Games/Default.aspx?Game=RocketCommander&Category=Open%20Source)  
	

*Offizielle Seite bei MSDN

*Riemers XNA Tutorials

*Deutsche XNA Community XNA.mag

*Bücher zum Thema XNA, Hardware-Rendering und Shader

**Einige Anwendungsbeispiele**  
 		*Spiele-Entwicklung für PC und XBox und WindowsPhone  
	

*Komplexe 3D-Anwendungen

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

3. SlimDX

SlimDX ist eine konsequente OpenSource-Neuentwicklung des MDX-Frameworks und basiert damit ebenso wie XNA auf DirectX. Es gibt eine große und aktive Community, und neue DirectX-Versionen werden sehr schnell implementiert. SlimDX steht unter der MIT-License, und kann daher zu kommerziellen Zwecken in OpenSource- und ClosedSource-Anwendungen eingesetzt werden.

**Was ist möglich?**  
		*(wie MDX aber auch neuere DirectX Features)  
	

*64Bit-Unterstützung

*Auflistung der Features und Vergleich mit anderen APIs: SlimDX Features

**Was ist nicht möglich?**  
		*(wie MDX)  


**Wie finde ich den Einstieg?**  
		*SlimDX-Seite: [http://slimdx.org/](http://slimdx.org/)  
	

*In der Community von GameDev.Net erreicht man die Entwickler und viele Anwender von SlimDX

*Bücher zum Thema Hardware-Rendering und Shader mit DirectX

**Einige Anwendungsbeispiele**  
		*Hardware-nahe Programmierung für Spiele und 3D-Anwendungen  

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

4. Tao-Framework/OpenTK

Das Tao-Framework war eine .NET-Library, um die OpenGL-API in .NET-Sprachen zu verwenden. Mittlerweile ist der Open Toolkit (OpenTK) der offizielle Nachfolger. OpenTK hat im Wesentlichen die gleichen Features wie SlimDX, nur eben auf OpenGL-Basis. Wie SlimDX wurde es unter der MIT-License veröffentlicht und kann daher in Open-Source- und kommerziellen Anwendungen eingesetzt werden.

**Was ist möglich?**  
		*(in etwa wie SlimDX)  
	

*Shader-Programmierung mit GLSL

*Auflistung der Features: http://www.opentk.com/

**Was ist nicht möglich?**  
		*(in etwa wie MDX)  


**Wie finde ich den Einstieg?**  
		*(in etwa wie MDX)  
	

*http://www.opentk.com/

*Bücher zum Thema OpenGL und GLSL

**Einige Anwendungsbeispiele**  
		*Hardware-nahe Programmierung für Spiele und 3D-Anwendungen  

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

5. Game Engines

Eine Game Engine nimmt einem den schwierigsten Teil der Arbeit ab, nämlich das Programmieren der Hardware-nahen Routinen. Je nach Engine werden **DirectX **und/oder **OpenGL **unterstützt, es gibt kommerzielle und OpenSource-Engines mit den unterschiedlichsten Konzepten. Eine sehr umfassende Übersicht mit einer Suchfunktion findet man in der DevMaster's Game and Graphics Engines Database.

**Was ist möglich?**  
		*Alles, was mit DirectX oder OpenGL darstellbar ist  
	

*Integrierte Szenenverwaltung, Beleuchtungssysteme, Animation

*z.T. auch Audio, Netzwerk, Gameplay, KI, Physik, GUI

**Was ist nicht möglich?**  
		*schneller Einstieg  



**Wie finde ich den Einstieg?**  
		*Einstieg ist (je nach Engine mehr oder weniger) schwierig, aber die Möglichkeiten sind grenzenlos, am besten die Beispiel-Projekte auf den Webseiten der Engines runterladen und ausprobieren  
	

*Wichtige Anlaufstelle ist GameDev.Net

*Bücher zu OpenGL oder DirectX Shader-Entwicklung

**Einige Anwendungsbeispiele**  
		*Komplexe Spiele in überschaubarer Zeit entwickeln  
	

*Komplexe 3D-Anwendungen

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

6. Visualization Toolkit (VTK)

Ähnlich den Game Engines gibt es auch für die wissenschaftliche Visualisierung Toolkits, die einen Großteil der routinemäßigen Tätigkeiten abnehmen und viele Darstellungsmöglichkeiten bieten. Auch sind oftmals viele Filter für das Pre-Processing der Rohdaten vorhanden. Einen Quasi-Standard stellt dabei das auf **OpenGL **basierende VTK - The Visualization Toolkit dar. Für .NET gibt es kommerzielle und nicht-kommerzielle Wrapper wie z.B. ActiveVize od. .NET Wrappers for VTK 5

Es sei noch erwähnt, dass es mit ParaView und VolView zwei auf VTK basierende (Open-Source-) Programme gibt, mit denen die Visualisierungen auch erstellt werden können.

**Was ist möglich?***3D-Grundkörper *Bildverarbeitung *Visualisierung von Datensets *Pre-Processing der Daten *Auflistung der Features

**Was ist nicht möglich?***Für alles außerhalb der wissenschaftlichen Darstellung wird es unhandlich *Schneller Einstieg, da die Lernkurve relativ steil ist

Wie finde ich den Einstieg?*Learning VTK *VTK User's Guide *VTK Textbook *VTK Examples

Einige Anwendungsbeispiele*Wissenschaftliche Visualisierungen (Bildergalerie) *Geoinformationssysteme (mit Erweiterungen wie der vtkGRASSBridge oder der VTK Geography Library)

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 12 Jahren

7. WPF

Seit der .NET-Version 3.0 stehen im Namespace System.Windows.Media.Media3D die Viewport3D-Klasse sowie weitere Klassen zur Verfügung, um mit einfachsten Mitteln eine 3D-Szene zu beschreiben und in WPF-Oberflächen anzuzeigen. Unterstützt werden zur Zeit Materialien mit Texturen und Shadern, Beleuchtung und verschiedene Kameras, inklusive Animation.

Die Ansteuerung der Grafikkarte übernimmt dabei das Betriebssystem mit Hilfe der Low-Level-Funktionen von DirectX. Deshalb geht es hier mehr um die Beschreibung der Szenen und weniger um "Programmierung" im eigentlichen Sinn. Die Szenen können in XAML sehr komfortabel beschrieben werden, wobei die Szenen-Objekte wie Kameras, Lichtquellen, 3D-Modelle selbstverständlich auch DataBindung und Animationen unterstützen.

Nicht unterstützt werden bisher jedoch das Hardware-beschleunigte Rendern in eine Textur sowie Normal-Maps, was der Entwicklung von aufwendigen Effekten Grenzen setzt. Als Alternative besteht dann die Möglichkeit, XNA oder SlimDX unter WPF zu verwenden.

**Was ist möglich?**  
		*Hardwarebeschleunigte Darstellung von 3D-Modellen mit Texturen  
	

*Szenen können per Code oder per XAML definiert werden

*Interaktion mit 3D-Objekten, 3D-Linien (The Petzold.Media3D Library)

*Direkte Integration in WPF-Anwendungen

**Was ist nicht möglich?**  
		*NormalMaps, aufwändige Shader, komplexe Beleuchtung  
	

*Szenenverwaltung

*Silverlight wird nicht unterstützt

**Wie finde ich den Einstieg?**  
		*[3D Programming for Windows by Charles Petzold](http://www.charlespetzold.com/3D/)  
	

*MSDN und Tutorials im Internet

**Einige Anwendungsbeispiele**  
		*3D-Diagramme, Datenvisualisierung  
	

*Einfache 3D-Anwendungen

*Grafische Spielereien für die GUI

Weeks of programming can save you hours of planning

MrSparkle Themenstarter:in
5.657 Beiträge seit 2006
vor 10 Jahren

8. WebGL

Inzwischen besitzen alle neueren Browser Unterstützung für hardwarebeschleunigte Grafik. WebGL basiert auf OpenGL 2.0 und bietet nahezu alle Möglichkeiten, wie sie mit OpenGL oder DirectX für Desktop-Anwendungen zur Verfügung stehen. Wer bereits Erfahrungen mit OpenGL hat, wird keine Schwierigkeiten haben, seine Anwendungen in den Browser zu portieren.

Aber auch für Einsteiger ist WebGL bestens geeignet, denn es gibt bereits sehr gute Bibliotheken, die einem das Ansteuern der Hardware abnehmen und auch die benötigten Datentypen für Geometrie, Texturen oder Transformationen mitliefern. Eine große Verbreitung hat die Bibliothek THREE.js gefunden. Damit ist man selbst als Anfänger in der Lage, sehr schnell beeindruckende Anwendungen zu erstellen. Einige Beispiele gibt es hier zu sehen: WebGL-Beispiele.

Wer jetzt gleich abwinkt und denkt, "3D-Grafik und Internet passt nicht zusammen, was soll da schon bei rauskommen?", der sollte sich mal folgende Beispiele anschauen:
*ROME - "3 Dreams of Black": Ein "interaktives Musikvideo" unter Mitwirkung des Google Chrome Teams und Danger Mouse

*Google Body: Ein anatomisch korrekter virtueller menschlicher Körper mit 1.4 Millionen Punkten

*Das neue Google Maps und Google StreetView wird komplett in 3D gerendert

*Die Unreal Engine im Firefox: Eine Portierung der Spiele-Engine auf WebGL und JavaScript

*Cubify: Ein "Roboter-Editor" für 3D-Prototyping

Wie man sieht, ist es schon jetzt möglich, aufwändige Grafiken zu erzeugen und flüssig anzuzeigen. Die Performance der 3D-Grafik ist dabei im Prinzip die gleiche, wie bei nativen OpenGL-Anwendungen, da die aufwändigen Berechnungen auf der Grafikkarte ablaufen. Lediglich die Programmteile, die in JavaScript laufen (z.B. das GamePlay, Kommunikation mit dem Server oder Physics) sind immernoch fühlbar langsamer als mit C# oder gar C++. Das liegt in der Natur der Sache, denn JavaScript ist eine Skript-Sprache. Trotz allem haben heutige Browser - allen voran Chrome und Firefox - inzwischen sehr effiziente JavaScript-Implementierungen.

Nicht unterstützt werden bisher leider die meisten Mobilgeräte, aber es ist davon auszugehen, dass sich das in den nächsten Monaten ändern wird.

**Was ist möglich?**  
		*Leichter Einstieg dank verfügbarer OpenSource-Bibliotheken und großer Community  
	

*Grafisch ist alles möglich, was man auch mit einer OpenGL- oder DirectX-Anwendung auf dem Desktop erstellen könnte

*Umfangreiche Web-Anwendungen mit einem 3D-User-Interface auf dem Client und einer ASP.NET MVC Anwendung mit Datenbank auf der Serverseite.

**Was ist nicht möglich?**  
		*Es gibt kaum einen der bisher genannten Anwendungsfälle, der nicht damit umsetzbar wäre  
	

*Bisher nicht unterstützte OpenGL-Features wie Textur-Arrays oder 3D-Texturen erfordern einen Workaround

**Wie finde ich den Einstieg?**  
		*Es gibt jede Menge Videos sowohl für Einsteiger als auch für Profis auf YouTube und ähnlichen Portalen  
	

*Der Code von THREE.js und die dazugehörigen Beispiel-Anwendungen sind auf GitHub verfügbar und mehr als einen Blick wert

**Einige Anwendungsbeispiele**  
		*Spiele  
	

*Daten-Visualisierung

*Spiele-Editoren, Karten-Editoren oder ähnliche interaktive Anwendungen

*Jede Form der 2D- oder 3D-Grafik, die bisher Plugins wie VRML, Flash, Silverlight o.ä. erforderten

Weeks of programming can save you hours of planning