Spieleprogrammierung mit DirectX und C++

ITiBoI

Mitglied
Hallo allerseits!

Ich möchte lernen, Spiele zu programmieren mit DirectX und C++, ob nun 2D oder 3D, ist egal.

Hat jemand eine Ahnung welches Buch da als Einsteiger gut ist, oder hat jemand schon mit einem Erfahrung gemacht? Womöglich sollten 2D und 3D-Spiele angesprochen werden

note: ich habe ein C++-Buch gelesen, deshalb denke ich, dass ich kein Buch benötige, wo C++ noch einmal besprochen wird...
 
Zuletzt bearbeitet:
Erst mal Danke.

Nun ne Frage:
In Rezeptionen, die ich gelesen habe, steht, dass alles auf eine Engine aufbaut.
Stimmt das?
 
Du meinst wohl Rezensionen.
Und ja, es stimmt. Innerhalb des Buches wird die TriBase-Engine sehr ausführlich erläutert und mit kompletten Source mitgeliefert, aufgrund dessen man sich sehr gut den Umgang mit DirectX via C++ erarbeiten kann.
Darüberhinaus gibt es noch genügend Source und Links, wie sich DirectX auch für 2D-Spiele verwenden lässt.
Und das Beste: Es wird kein C++ mehr in dem Buch angesprochen oder mit öden Grundlagen gelangweilt, es geht gleich richtig zur Sache (z.B. wird die Punktprojektion auf einer einzigen Seite abgehakt, ebenso wie Polygondefinition und Vektordefinition).


So und jetzt mal ohne Flachs:
Dennis Wronka hier hat es schon mal sinngemäß so nett gesagt: "3D-Spielprogrammierung und Einsteiger sind zwei Worte, die sich nicht vertragen." Und dem kann ich nur voll und ganz zustimmen. Wenn du meinst, dass du alleine durch das Lesen eines einzigen C++-Buchs bereits so supertopfit in C++ bist, dass du dich augenblicklich an die Programmierung von 3D-Spielen und die direkte Ansteuerung der DirectX-Bibliotheken ran machen kannst, dann fürchte ich, dass du schneller und härter auf der Nase liegen wirst, als du dir das derzeit vorstellen kannst.

Für 3D-Spieleprogrammierung mittels DirectX GIBT es keine "Einsteiger-" oder "Anfänger"-Bücher, weil die gesamte Thematik nicht für Programmieranfänger geeignet ist.

Solltest du entsprechende Programmiererfahrung in einer anderen Sprache (nicht unbedingt Visual Basic bitte) gemacht haben, dann verarbeite das eben Geschriebene im entsprechenden Sinn.

Ansonsten kann ich dir für den Einstieg in die 3D-(Spiele)-Programmierung folgende Bücher empfehlen:
3D-Programmierung mit C++
Da werden sehr schön und ausführlich die ganzen mathematischen Grundlagen erklärt, die überhaupt in Punkto 3D-Programmierung Bedeutung haben. Mit DirectX hat das erstmal gar nichts zu tun, aber DirectX nützt dir auch nicht das geringste, wenn du gar nicht weisst, wozu du die ganzen Klassen und Methoden überhaupt brauchst.

Dann wäre da noch Build a 3d game engine with C++, welches ich als weitergehendes Buch empfehlen kann. Da wird es schon etwas heftiger. Die Grundlagen werden nochmal erläutert aber auch deutlich vertieft. Auch hier kein DirectX sondern reines C++. Ja, das ist etwas veraltet, aber die Grundlagen haben noch heute Gültigkeit. Sehr schön finde ich in diesem Buch die Beschreibung der Algorithmen der verschiedenen Shader, deren Verständnis sehr hilfreich ist. Und für den Fall, dass der klassische Kommentar kommt "Das ist ja in Englisch, so'n Blödsinn!": DirectX ist auch nicht von Deutschen entwickelt worden und die beste Dokumentation dazu gibt es ebenfalls nicht auf Deutsch.

Das von mir oben genannte Buch ("3d-Spiele-Programmierung mit DirectX 9 und C++") ist dann schon für Leute, welche die ganzen Grundlagen der 3D-Programmierung kennen und jetzt eben die "basics" mittels DirectX erledigen und die entsprechenden Vorteile der Hardware nutzen wollen, ohne sich selbst ihre TMatrix-Klassen anzulegen und die Polygonberechnung manuell durchzuführen, es stellt also den Schritt von der (veralteten) Basisprogrammierung in 3D auf die Moderne mit DirectX dar.

Ich bin so frei und zitiere dann nochmal ein bisschen sinngemäß aus dem Buch (wörtlich darf ich ja nicht, Copyright und so):
"Auch wenn gerade Einsteiger immer noch an solche Wunder glauben, wird so ein Programm niemals funktionieren:
DirectX("'Mach' mir mal 'n Raumschiff");
DirectX("'Gib dem Raumschiff eine tolle Textur");
DirectX("'Spiel einen Orchestersound wie bei Star Wars");
DirectX("'Noch kräftig Explosionen und Partikeleffekte dazu");

Bevor du also Geld für dieses Buch ausgibst, solltest du dir evtl. erstmal die Grundlagen erarbeiten, was u.a. beinhaltet, dass du lernst, wie du mit Codefragmenten umzugehen hast (denn du wirst NIRGENDWO eine Checkliste finden, die dir Punkt für Punkt und Mausklick für Mausklick erklärt, wie du ein Supermegageiles Game zu erstellen hast) und wie du externe Bibliotheken korrekt einzusetzen hast.
 
Zuletzt bearbeitet:
Das Spieleprogrammierung nicht so funktioniert ist mir bewusst. Ich will auch keine großen Projekte erstellen

Die Tatsache dass ich C++ erwähnt hatte liegt daran, dass ich beim Umgucken auf ziemlich viele Bücher gestoßen bin, die erst einmal die Sprache noch mal erklären, angefangen bei simplen Ausgabe eines Textes in der Konsole.

Programmiererfahrung kann man nicht einfach lernen, indem man ein Buch liest, aber aus diesem Grund habe ich schon ein paar kleinere Projekte durchgeführt, um mich zu üben(was nicht heißen soll dass ich jetzt Experte bin oder so).
Du hast Recht, Visual Basic kannst du dir in so einem Fall abschminken.
 
Zuletzt bearbeitet:
Ich möchte dem ausführlichen Beitrag von CSANecromancer noch ergänzen, dass die meisten Spieleprogrammierer in erster Line meist gar KEINE Programmierer sind, sonder meist Mathematiker.
 
Das Spieleprogrammierung nicht so funktioniert ist mir bewusst.
So brutal das klingt, aber dann ist schon mehr vorhanden als bei vielen anderen die einen Post verfassen "ich will Spieleprogrammierung lernen".

Die Tatsache dass ich C++ erwähnt hatte liegt daran, dass ich beim Umgucken auf ziemlich viele Bücher gestoßen bin, die erst einmal die Sprache noch mal erklären, angefangen bei simplen Ausgabe eines Textes in der Konsole.
Ok, solche Bücher kenne ich auch und ich habe mir früher auch oft gedacht: "Muss das schon wieder sein?" Erst später habe ich kapiert, dass du für Spieleprogrammierung die gewählte Sprache wirklich beherrschen solltest, damit du dich auf die Aspekte der Spieleprogrammierung selbst konzentrieren kannst und dir nicht das Hirn überquillt, weil du dich noch damit beschäftigen musst, wie die Konzepte der Sprache selbst funktionieren.
Ein sehr schönes Beispiel der TriBase-Engine ist dabei die MessageLoop-Behandlung:

Code:
tbResult Move (float fTime) { return TB_OK; }
tbResult Render (float fTime) { return TB_OK; }
tbDoMessageLoop(Move, Render);
Das ist ein winziges Codesnippet, was aber äusserst anschaulich verdeutlicht, worum es geht. Denn es werden einige Punkte vorausgesetzt:
- Du erkennst, dass das Vorliegende ein Codeschnippsel ist und nichts Compilierbares
- Du lässt dich vom Rückgabewerttyp tbResult nicht nervös machen, sondern schlägst den zur Not nach.
- Du weisst, was eine MessageLoop generell ist und wie das Nachrichtensystem von Windows funktioniert.
- Du weisst, wie Funktionen als Funktionsparameter übergeben werden und was void-Pointer sind.

Wenn diese Kenntnisse gegeben sind, dann kannst du dich z.B. um die fTime-Parameter kümmern und weshalb die MessageLoop in Move und Render aufgeteilt ist, welche beide mittels fTime manipuliert werden. Und genau das wird in dem Buch erklärt.
Aber die Kenntnisse, die zum Verständnis dieser paar Zeilen erwartet werden, gehören zu den normalen Techniken von C++ und die werden eben nicht mehr erklärt

Programmiererfahrung kann man nicht einfach lernen, indem man ein Buch liest, aber aus diesem Grund habe ich schon ein paar kleinere Projekte durchgeführt, um mich zu üben.
Dann musst du halt selbst entscheiden und einschätzen, ob du fit genug für 3D-Programmierung bist. Aber genau dafür ist z.B. das von mir genannte Buch "3D-Programmierung in C++" sehr gut geeignet. Das kostet wirklich nicht die Welt und wenn es dich langweilt, weil du alles, was darin vorkommt und beschrieben wird, leicht verstehst, dann kannst du dich ja immer noch an die Programmierung mit DirectX dran machen und hast für wenige Euro ein nettes Nachschlagewerk.

Du hast Recht, Visual Basic kannst du dir in so einem Fall abschminken.
Das meinte ich so eigentlich nicht. Tatsächlich kann man sogar noch mit QBasic(!) 3D-Grafiken erzeugen. Nur ist es etwas kniffliger, die Sache dann performant zu gestalten und in sehr, sehr vielen Fällen (ist einfach ein Erfahrungswert) ist es so, dass jemand 6-12 Monate Scripte und kleinere Anwendungen in Visual Basic programmiert hat, dann ein C/C++-Buch in die Hand nimmt, die Komplexität der Sprache gnadenlos unterschätzt und sich auch sofort an ein Riesenprojekt á la 3D-Programmierung machen will. Was naturgemäß immer schief geht. Darauf bezog sich mein Kommentar.

Und zu dem was Matze angesprochen hat:
Wenn du dich mit richtiger 3D-Programmierung auseinander setzen willst, dann könntest du dir z.B. einfach mal eine eigene Matrizen-Klasse für 3x3-Matrizen basteln und dazu dann gleich ein paar Funktionen für Matrizenmanipulationen (z.B. eine Variante des Gaußschen Algorithmus). Nein, ich verarsche dich nicht, das ist eine der absoluten Grundlagen für 3D-Programmierung (denn genau damit werden dann später 3D-Objekte im virtuellen Raum bewegt) und ja, das gilt schon als höhere Mathematik. Wenn das zu kompliziert und aufwändig klingt: In DirectX ist z.B. eine entsprechende Matrizenklasse definiert. Nur was nützt das, wenn man gar nicht weiss, was man damit anzufangen hat oder wie die Matrix aufgebaut sein muss, damit man damit was bewirken kann?
 
@Time94
Hast du dich eigentlich zuvor schon einmal mit 2D-Programmierung auseinander gesetzt? Wenn es um Spieleprogrammierung geht sollte man meiner Meinung nach auch erst einmal Erfahrung in der 2. Dimension machen. So sammelt man Erfahrung im Spiele-Desingn, Multithreading...
 
Schon mal Danke für die Hilfe.

@CSANecromancer:
Dinge wie MessageLoop und so versteh ich alles, dass sollte also kein Problem machen.

@Matze:
Ne, eher nicht.

Ich denke dann werd ich mich erst mal an die 2D-Programmierung machen, und später dann mal ein 3D-Buch lesen.

Hat jemand einen Buch-Tipp für mich?
 
Zurück