Sie sind hier
E-Book

3D-Spieleprogrammierung mit DirectX 9 und C++

AutorDavid Scherfgen
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2006
Seitenanzahl867 Seiten
ISBN9783446408456
CD zum Buch1
FormatPDF
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis31,99 EUR

3., aktualisierte Auflage. Inkl. kompletter Spiele-Engine.
DAS UMFASSENDE HANDBUCH ZUR 3D-SPIELEPROGRAMMIERUNG

- Behandelt alle wichtigen Techniken der Spieleentwicklung auf Basis von DirectX und C++
- Deckt alle Phasen der Spieleentwicklung ab
- Für Part-Time- und Full-Time-Administratoren geeignet
- Konzentriert sich auf wichtige Verwaltungsaufgaben
- Unser Online-Bonus: Leserforum, News und Links, weitere Spiele und Tutorials auf www.scherfgen-software.net

Um 3D-Computerspiele zu entwickeln, bedarf es einer gehörigen Portion Erfahrung. Oder dieses Buch, das sich an Programmierer mit C++-Kenntnissen wendet.

Im Mittelpunkt steht DirectX. Der Autor geht auf die DirectX 9-Komponenten Direct3D, DirectSound, DirectInput und DirectShow ausführlich ein. Daneben widmet er sich auch fortgeschrittenen Themen, die sonst meist unberücksichtigt bleiben, z.B. exakte Kollisionserkennung, Berechnung von Echtzeitschatten, Programmierung frei definierbarer Steuerungssysteme. Die Entwicklung einer 3D-Spiele-Engine und zahlreiche Beispielprogramme, in Visual C++ realisiert, verdeutlichen die verschiedenen Aspekte der Spieleprogrammierung. Tipps und Tricks zeigen, wie man Probleme von vornherein umgeht.

Nach einem Exkurs über die Planung, das Design und das Testen von Spielen werden schrittweise zwei komplette 3D-Spiele entwickelt.

Tipp: Sie haben noch keine C++-Kenntnisse ?!? Alles halb so schlimm. Greifen Sie doch zu "C++ für Spieleprogrammierer" von Heiko Kalista, das alle wichtigen Aspekte der C++-Programmierung verständlich vermittelt.

Pressestimme

"Nach einer hervorragenden kleinen Einführung nimmt David Scherfgen Windows-Programmierer mit auf eine Tour durch beinhahe sämtliche Aspekte der Spieleprogrammierung unter DirectX."
c't 2005, Heft 17

Der Autor

David Scherfgen stieg mit 12 Jahren in die Spieleprogrammierung ein, kennt DirectX seit Version 2 und war Beta-Tester für DirectX 9. Heute studiert er Informatik und betreibt eine erfolgreiche Community-Site. 

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

3 3D-Grafik mit der TriBase-Engine (S. 274-275)

3.1 Was Sie in diesem Kapitel erwartet

Nun sind alle grundlegenden Direct3D-Themen abgehandelt. Wir beschäftigen uns jetzt damit, wie man sich die Arbeit mit Direct3D ein wenig erleichtern kann – nämlich durch die Einführung einer Klasse für 3D-Grafik in der TriBase-Engine. Sie werden zum Beispiel lernen, wie man Modelldateien lädt oder Texte darstellt. Diese Techniken werden später zur Erstellung der Spiele verwendet.

3.2 Direct3D mit der TriBase-Engine
Sie haben nun die wichtigsten Dinge über Direct3D gelernt. Natürlich war das noch längst nicht alles, doch sehen Sie bitte ein, dass es unmöglich ist, alle Themen in einem Buch zu behandeln, das einen möglichst breitflächigen Überblick über das große Gebiet der Spieleprogrammierung vermitteln soll. Wer genauer wissen möchte, wie Direct3D im Inneren funktioniert und welche weiteren Techniken es bietet, sollte sich unbedingt Literatur speziell über das Thema Direct3D anschaffen (zum Beispiel vom Microsoft Press-Verlag). Nun, da Sie einen Überblick über Direct3D erhalten haben, können wir damit beginnen, die TriBase-Engine so zu erweitern, dass viele Arbeitsschritte vereinfacht werden können.

3.2.1 Was uns das Leben leichter machen kann
3.2.1.1 Automatische Initialisierung von Direct3D
Die bisherigen Beispielprogramme verwendeten alle die Dateien INITWINDOW.CPP, INITDIRECT3D. CPP und DIRECT3DENUM.CPP. Mit den in diesen Dateien enthaltenen Funktionen wurde dann ein Fenster erstellt, der Direct3D-Konfigurationsdialog angezeigt, und schließlich wurden alle für die Arbeit mit Direct3D notwendigen Schnittstellen erzeugt, so dass sich die Beispielprogramme auf das Wesentliche beschränken konnten. Den Konfigurationsdialog werden wir auch für die TriBase-Engine übernehmen, und auch die Initialisierung wird ähnlich vonstatten gehen. Wichtig ist, dass der Benutzer stets freie Kontrolle über die verwendete Auflösung, den Direct3D-Adapter, die Oberflächenformate und sonstige Einstellungen hat, um für sich die optimale Kombination finden zu können. Die neue Funktion zum Aufrufen des Konfigurationsdialogs – der nicht nur für Direct3D zuständig sein wird – heißt tbDoConfigDialog. Die Konfigurationsstruktur heißt nun tbConfig und besteht aus Unterstrukturen, wovon eine den Namen Direct3D trägt; darin befinden sich alle wichtigen Direct3D-Einstellungen wie Adapter, Videomodus oder Oberflächenformate.

3.2.1.2 Statusänderungen minimieren

Immer wenn wir ein Render- oder ein Texturschicht-State, eine Matrix, eine Lichtquelle, ein Material, eine Textur oder Sonstiges mit irgendeiner Set-Methode der IDirect3DDevice9- Schnittstelle aktivieren, muss Direct3D das dem Grafikkartentreiber mitteilen, der es wiederum – je nach Art der Änderung – an die Grafikkarte weiterleitet. Vor allem beim Setzen einer neuen Textur, die vielleicht noch im Systemspeicher wartet und dann zur Grafikkarte transferiert werden muss, kann dabei eine Menge Zeit verloren gehen. Daher sollte man als „umweltbewusster" Programmierer immer darauf achten, nicht unnötig viele Änderungen vorzunehmen (zum Beispiel Alpha-Blending ein- und direkt danach wieder auszuschalten).

Die Direct3D-Komponente der TriBase-Engine werden wir daher so entwerfen, dass sie unnötige – doppelte – Statusänderungen wie Render-States, Texturen oder was auch immer automatisch erkennt und gar nicht erst an die Geräteschnittstelle weiterleitet. Es wird dazu eine interne Tabelle mit den Werten aller Render- und Texturschicht-States, Texturen und dem aktuellen Vertexformat angelegt, welche die Engine stets aktualisiert und zum Vergleich heranzieht, wenn ein neuer Status gesetzt werden soll. Wenn dieser dann bereits in der Tabelle steht, wäre es unsinnig, ihn erneut zu aktivieren.

Nach Angaben von Microsoft sollte man sich niemals darauf verlassen, dass der Grafikkartentreiber sich um solche Probleme kümmert – also lieber selbst die Initiative ergreifen!

3.2.1.3 Texturverwaltung

Oft kann es vorkommen, dass ein Spiel Ressourcen verschwendet, indem es bestimmte Texturen zweimal lädt (wenn zum Beispiel zwei verschiedene 3D-Modelle die gleiche Textur verwenden). Um das zu verhindern, werden wir eine automatische Texturverwaltung implementieren, bei welcher das Programm Texturen anfordern und später wieder löschen kann. Existiert eine angeforderte Textur noch nicht, wird sie geladen – andernfalls wird die bereits geladene Textur zurückgeliefert. Die Texturverwaltung wird vollen Gebrauch von der TriBase- Klasse tbVFile machen. Erinnern Sie sich noch an diese Klasse? Mit ihr können wir virtuelle Dateien aus echten Dateien, aus dem Speicher, aus Ressourcen und aus eventuell verschlüsselten Zip-Archiven laden und alle auf die gleiche Weise behandeln.

3.2.1.4 Vertex- und Index-Buffer einfacher erstellen

Oftmals schreckt man vor der Arbeit mit Vertex- und Index-Buffern zurück, da sie immer einen gewissen Arbeitsaufwand mit sich bringen: Erst muss man sie mühsam erstellen, dann sperren, mit Daten füllen, wieder entsperren, vor dem Zeichnen als Datenstromquelle festlegen und am Ende wieder freigeben. Wie Sie vielleicht bemerkt haben, habe auch ich mich um die Vertex- und Index-Buffer gedrückt, wenn es ging: Die meisten Beispielprogramme, die nur wenige Primitiven zu zeichnen hatten (zum Beispiel ein Rechteck), legten die Vertizes lieber im Systemspeicher an, als dafür Puffer zu erstellen.

Dem soll nun ein Ende gemacht werden, indem wir zwei Klassen für Vertex- und Index- Buffer implementieren werden. Ein einfacher Aufruf des Konstruktors soll dabei reichen, um einen Puffer generieren zu lassen, und auch das Füllen mit Daten soll wesentlich einfacher werden.

Inhaltsverzeichnis
Inhalt6
Vorwort19
1 Einleitung22
1.1 Ein paar Dinge im Voraus23
1.1.1 Was Sie erwartet23
1.1.2 Was Sie nicht erwartet23
1.1.3 Voraussetzungen24
1.1.4 Die Schriftformate in diesem Buch24
1.1.5 Was tun bei Problemen?24
1.1.6 Zu DirectX 9.0 und DirectX 9.0c25
1.1.7 Die ungarische Notation25
1.2 Einführung in die Spieleprogrammierung26
1.2.1 Der kleine Unterschied26
1.2.2 Was macht ein Spiel eigentlich?27
1.2.3 Eingliederung in die Windows-Architektur29
1.2.4 Das Problem mit der Zeit30
1.2.5 Die verschiedenen Seiten eines Spiels34
1.2.6 Rückblick35
1.3 DirectX und C++35
1.3.1 Was ist DirectX?35
1.3.2 Die perfekte Kombination mit C++37
1.3.3 Das COM – Grundlage von DirectX39
1.3.4 Rückblick42
1.4 Wir bauen uns eine eigene Engine!42
1.4.1 Was versteht man unter einer Engine?42
1.4.2 Verschiedene Entwicklungsansätze42
1.4.3 Konkrete Planung43
1.4.4 Installation der Engine und Einrichten eines Projekts46
1.4.5 Vorgabefunktionen, Klassen und Makros47
1.4.6 Rückblick57
1.4.7 Übungsaufgaben57
1.5 Tipps zum Debuggen58
1.6 Ausblick61
2 3D-Grafik62
2.1 Was Sie in diesem Kapitel erwartet63
2.2 Einführung in die 3D-Grafik63
2.2.1 Ein neues Koordinatensystem63
2.2.2 Theorie der 3D-Grafik65
2.2.3 Vektoren67
2.2.4 Matrizen86
2.2.5 Ebenen109
2.2.6 Das RGB-Farbsystem115
2.2.7 Rückblick118
2.2.8 Übungsaufgaben119
2.3 Direct3D-Grundlagen119
2.3.1 Was ist Direct3D?119
2.3.2 Die Transformationspipeline120
2.3.3 Der Rasterizer121
2.3.4 Die wichtigsten Schnittstellen122
2.3.5 Ressourcen122
2.3.6 Oberflächen123
2.3.7 Direct3D im C++-Programm ansprechen127
2.3.8 Rückblick127
2.4 Initialisierung von Direct3D128
2.4.1 Erstellen der128
Schnittstelle128
2.4.2 Adapterinformationen129
2.4.3 Caps – die Fähigkeiten eines Geräts133
2.4.4 Erstellen des Fensters134
2.4.5 Erstellen der137
Schnittstelle137
2.4.6 Direct3D herunterfahren149
2.4.7 Beispielprogramm: eine komplette Direct3D-Anwendung149
2.4.8 Rückblick151
2.4.9 Übungsaufgaben152
2.5 Das erste Dreieck152
2.5.1 Vertizes152
2.5.2 Erste Render-States154
2.5.3 Setup der Transformationspipeline158
2.5.4 Der Zeichenvorgang160
2.5.5 Rückblick166
2.5.6 Übungsaufgaben167
2.6 Texturen167
2.6.1 Was Texturen sind167
2.6.2 Grundlegende Dinge170
2.6.3 Der bilineare Filter172
2.6.4 MIP-Mapping – schnell und schön174
2.6.5 Weitere Spielereien176
2.6.6 Texturen mit D3DX laden177
2.6.7 Texturinformationen abfragen180
2.6.8 Das Beispielprogramm181
2.6.9 Kachelfähige Texturen erzeugen186
2.6.10 Rückblick187
2.6.11 Übungsaufgaben188
2.7 Vertex- und Index-Buffer188
2.7.1 Zweck von Vertex- und Index-Buffern188
2.7.2 Der Vertex-Buffer im Detail189
2.7.3 Der Index-Buffer im Detail193
2.7.4 Das Beispielprogramm197
2.7.5 Rückblick202
2.7.6 Übungsaufgaben202
2.8 Nebel203
2.8.1 Die Theorie203
2.8.2 Nebel mit Direct3D205
2.8.3 Das Beispielprogramm207
2.8.4 Rückblick208
2.8.5 Übungsaufgaben209
2.9 Beleuchtung209
2.9.1 Ein einfaches Beleuchtungssystem209
2.9.2 Die Praxis – Beleuchtung mit Direct3D216
2.9.3 Das Beispielprogramm224
2.9.4 Rückblick225
2.9.5 Übungsaufgaben226
2.10 Alpha-Blending227
2.10.1 Die Theorie227
2.10.2 Alpha-Blending mit Direct3D229
2.10.3 Das Beispielprogramm232
2.10.4 Rückblick233
2.10.5 Übungsaufgaben234
2.11 Multi-Texturing234
2.11.1 Der theoretische Teil234
2.11.2 Multi-Texturing anwenden238
2.11.3 Mehr über Texturkoordinaten241
2.11.4 Das Beispielprogramm244
2.11.5 Rückblick246
2.11.6 Übungsaufgaben246
2.12 Exotische Texturformen247
2.12.1 Volumentexturen247
2.12.2 Umgebungstexturen251
2.12.3 Bump-Mapping261
2.12.4 Rückblick264
2.12.5 Übungsaufgaben265
2.13 Der Stencil-Buffer266
2.13.1 Was war das noch gleich?266
2.13.2 Die Details266
2.13.3 Das Beispielprogramm270
2.13.4 Rückblick273
2.13.5 Übungsaufgaben273
2.14 D3DX-Effekte273
2.14.1 Probleme beim Verwalten von Modellen273
2.14.2 „Effekte“274
2.14.3 Laden eines Effekts277
2.14.4 Mit Effekten rendern278
2.14.5 Variablen von außen setzen und abfragen280
2.14.6 Das Beispielprogramm282
2.14.7 Rückblick284
2.14.8 Übungsaufgaben284
2.15 Transformierte Vertizes für 2D-Grafik285
2.15.1 Wozu denn noch 2D?285
2.15.2 Die Transformation umgehen285
2.15.3 Ein anderes Vertexformat286
2.15.4 DirectDraw imitieren287
2.15.5 Eine andere Methode für 2D-Grafik289
2.15.6 Rückblick290
2.15.7 Übungsaufgaben290
2.16 In Texturen rendern290
2.16.1 Schritt 1: Erstellen einer Textur und eines Z-Buffers290
2.16.2 Schritt 2: Das neue Render-Target setzen291
2.16.3 Schritt 3: Rendern!291
2.16.4 Einfacher mit D3DX291
2.16.5 Wozu braucht man das?292
2.17 Ausblick293
3 3D-Grafik mit der TriBase- Engine294
3.1 Was Sie in diesem Kapitel erwartet295
3.2 Direct3D mit der TriBase-Engine295
3.2.1 Was uns das Leben leichter machen kann295
3.2.2 Die Klasse297
3.2.3 Der Texturmanager –308
3.2.4322
und322
3.2.5 Die Effektklasse333
3.2.6 Ein allumfassendes Beispielprogramm337
3.2.7 Rückblick346
3.2.8 Ausblick346
3.3 Modelldateien346
3.3.1 Die Vorarbeit347
3.3.2 Der Konverter352
3.3.3 Eine Modellklasse354
3.3.4 Das Beispielprogramm366
3.3.5 Rückblick369
3.4 Texte zeichnen370
3.4.1 Speicherung der Zeichen370
3.4.2 Das Format der Textur371
3.4.3 Transformierte Vertizes für Texte371
3.4.4 Der Weg von TrueType zur Bitmap-Font372
3.4.5 Inhalt der TBF-Dateien372
3.4.6 Programmierung einer Schriftartklasse373
3.4.7 Das Beispielprogramm383
3.4.8 Rückblick385
3.5 Ausblick385
4 Eingabe386
4.1 Was uns in diesem Kapitel erwartet387
4.2 DirectInput kurz vorgestellt387
4.2.1 Was kann DirectInput besser als Windows?387
4.2.2 Geräte und Geräteklassen388
4.2.3 GUIDs388
4.2.4 Achsen und Knöpfe388
4.2.5 Die Funktionsweise von DirectInput389
4.2.6 Ein paar Worte zum Debuggen390
4.3 Der Startschuss fällt390
4.3.1 Erstellen des390
Objekts390
4.3.2 Eingabegeräte abzählen392
4.3.3 Rückblick393
4.4 Initialisierung eines Geräts und Datenabfrage394
4.4.1 Keine Angst vor394
4.4.2 Vorbereitungen treffen394
4.4.3 Auf verlorene Eingabe achten!396
4.4.4 Hinterlassen Sie Ihren Platz …396
4.4.5 Einmal Daten, bitte!396
4.4.6 Rückblick397
4.5 Die Tastatur397
4.5.1 Das Datenformat der Tastatur397
4.5.2 Tastencodes398
4.5.3 Das Beispielprogramm400
4.5.4 Begrenzungen der Tastatur401
4.5.5 Rückblick402
4.6 Die Maus402
4.6.1 Das Datenformat der Maus402
4.6.2 Relative Achsen402
4.6.3 Die Mausknöpfe403
4.6.4 Der exklusive Modus403
4.6.5 Das Beispielprogramm404
4.6.6 Rückblick405
4.7 Der Joystick405
4.7.1 Achsen, Knöpfe, POVs und Schieberegler405
4.7.2 Das Joystick-Datenformat406
4.7.3 Das Beispielprogramm407
4.7.4 Rückblick408
4.8 Objekte abzählen und kalibrieren409
4.8.1 Objekte abzählen409
4.8.2 Eigenschaften festlegen410
4.8.3 Achsenmodus411
4.8.4 Achsenskalierung411
4.8.5 Die tote Zone412
4.8.6 Sättigung413
4.8.7 Das Beispielprogramm413
4.8.8 Gepufferte Daten und direkte Daten413
4.8.9 Rückblick414
4.9 Übungsaufgaben414
4.10 Eine Eingabeklasse für die Engine414
4.10.1 Probleme mit DirectInput414
4.10.2 Das Prinzip der analogen Knöpfe415
4.10.3 Die417
Klasse417
4.10.4 Das Beispielprogramm435
4.10.5 Rückblick437
4.11 Ausblick437
5 Sound und Musik438
5.1 DirectSound kurz vorgestellt439
5.1.1 Was kann DirectSound besser als Windows?439
5.1.2 Soundpuffer und Mixer439
5.1.3 Die Schnittstellen441
5.2 Initialisierung von DirectSound441
5.2.1 Formale Dinge441
5.2.2 Abzählen der DirectSound-Geräte441
5.2.3 Erstellung der442
Schnittstelle442
5.2.4 Die Kooperationsebene wählen443
5.2.5 Rückblick443
5.3 Erstellen von Soundpuffern443
5.3.1 Eigenschaften der Soundpuffer444
5.3.2 Das Format eines Soundpuffers446
5.3.3 Anfordern der447
Schnittstelle447
5.3.4 Der primäre Soundpuffer448
5.3.5 Rückblick449
5.4 Füllen eines sekundären Soundpuffers449
5.4.1 Eine kleine Einführung in die Akustik449
5.4.2 Wir sperren den Soundpuffer454
5.4.3 Entsperren456
5.4.4 Hinein mit den Daten!456
5.4.5 Rückblick458
5.5 Kontrolle eines Sounds459
5.5.1 Die459
Methode459
5.5.2 Festlegen der Lautstärke460
5.5.3 Festlegen der Balance461
5.5.4 Festlegen der Abspielfrequenz461
5.5.5 Das Beispielprogramm462
5.5.6 Rückblick462
5.6 WAV-Dateien laden463
5.6.1 Der RIFF-Header463
5.6.2 Die WAV-Chunks464
5.6.3 Die Funktion464
5.7 3D-Sound467
5.7.1 Theorie des 3D-Sounds467
5.7.2 Die467
Schnittstelle467
5.7.3 Die469
Schnittstelle469
5.7.4 Das Beispielprogramm471
5.7.5 Rückblick472
5.8 Echtzeiteffekte472
5.8.1 Effekte – vorberechnet und in Echtzeit472
5.8.2 Verschiedene Effektschnittstellen473
5.8.3 Vorwarnung erforderlich!474
5.8.4 Effekte mit474
anfordern474
5.8.5 Die Effektschnittstelle abfragen475
5.8.6 Effektparameter am Beispiel des Echos476
5.8.7 Experimentieren ist angesagt!477
5.8.8 Rückblick477
5.9 Ergänzende Informationen478
5.9.1 Die verschiedenen Schnittstellen478
5.9.2 Klonen von Sounds479
5.9.3 Status eines Soundpuffers479
5.10 Die Klasse480
5.10.1 Erweiterung des Konfigurationsdialogs480
5.10.2 Was481
können soll481
5.10.3 Die Klassendefinition481
5.10.4 Die Initialisierungsmethode483
5.10.5 Der Umgang mit dem Hörer484
5.11 Die485
Klasse485
5.11.1 Fähigkeiten der Klasse485
5.11.2 Das Prinzip der Soundpufferliste486
5.11.3 Die Klassendefinition486
5.11.4 Laden des Sounds488
5.11.5 Die490
Methode490
5.11.6 Die491
Methode491
5.11.7 Einen Sound abspielen492
5.11.8 Abspielen des nächsten Soundpuffers492
5.11.9 Die restlichen Methoden …493
5.12 Musik ins Spiel bringen493
5.12.1 Was unterscheidet Musik von Soundeffekten?493
5.12.2 DirectShow-Grundlagen494
5.12.3 Kontrolle über den Filtergraphen496
5.12.4 Die Klasse497
5.12.5 Das Beispielprogramm500
5.13 Ausblick501
6 Theorie der Spieleprogrammierung502
6.1 Was Sie in diesem Kapitel erwartet503
6.2 Warum Planung wichtig ist503
6.3 Am Anfang steht die Idee503
6.3.1 Inspiration504
6.3.2 Auf Ideen vorbereitet sein505
6.3.3 Aussortieren505
6.3.4 Storydesign505
6.3.5 Entwicklung eines Ablaufschemas507
6.4 Suche nach Teammitgliedern507
6.5 Vermitteln des Spiels und gemeinsame Analyse507
6.5.1 Die Absichten klarmachen508
6.5.2 Machbarkeitsanalyse508
6.5.3 Tipps509
6.6 Ausarbeitung der Details509
6.7 Einteilung in Module510
6.8 Level-Design und Atmosphäre510
6.8.1 Abenteuer-, Action- und Rollenspiele510
6.8.2 Puzzlespiele511
6.8.3 Simulatoren511
6.8.4 Wann eine Aufgabe zu schwer ist511
6.8.5 Tipps für das Level-Design512
6.8.6 Allgemeine Tipps für eine bessere Spielatmosphäre514
6.9 Tipps zum Programmieren516
6.9.1 Planung und Standard516
6.9.2 Implementierung neuer Features516
6.9.3 Die Liebe zum Detail518
6.10 Testen Ihres Spiels518
6.10.1 Testen während des Entwicklungsprozesses518
6.10.2 Testen des fertigen Spiels518
6.11 Ausblick520
7 Das erste Spiel522
7.1 Was Sie in diesem Kapitel erwartet523
7.2 Planung523
7.2.1 Das Spielprinzip und der Name des Spiels523
7.2.2 Die Darstellung524
7.2.3 Die Spielzustände524
7.2.4 Das Spielgerüst525
7.3 Die Grundklasse526
7.3.1 Variablen526
7.3.2 Methoden527
7.3.3 Die532
Funktion532
für Breakanoid532
7.4 Das Titelbild532
7.4.1 Planung des Titelbilds533
7.4.2 Die Schriftarten533
7.4.3 Initialisieren, Laden und Entladen des Titelbilds534
7.4.4 Rendern des Titelbilds535
7.4.5 Bewegung des Titelbilds537
7.5 Das Hauptmenü537
7.5.1 Planung des Hauptmenüs537
7.5.2 Laden, Entladen, Betreten und Verlassen538
7.5.3 Rendern538
7.5.4 Bewegen des Hauptmenüs540
7.5.5 Sound für das Hauptmenü!541
7.6 Das Spiel542
7.6.1 Planung des Spiels543
7.6.2 Schritt 1: die544
Klasse544
7.6.3 Schritt 2: Anzeigen des Levelmodells545
7.6.4 Schritt 3: Her mit dem Schläger!547
7.6.5 Schritt 4: Ein Levelsystem551
7.6.6 Schritt 5: Bälle hinzufügen552
7.6.7 Schritt 6: Die Blöcke558
7.6.8 Schritt 7: Versuche564
7.6.9 Schritt 8: Punkte566
7.6.10 Schritt 9: Sound für das Spiel567
7.6.11 Schritt 10: Hier spielt die Musik!568
7.7 Minimieren im Vollbildmodus569
7.7.1 Das Problem569
7.7.2 Die Lösung569
7.8 Motion-Blurring570
7.9 Erweiterungsvorschläge573
7.10 Ausblick573
8 Das zweite Spiel574
8.1 Was Sie in diesem Kapitel erwartet575
8.2 Planung575
8.2.1 Das Spielprinzip und der Name des Spiels575
8.2.2 Die Spielzustände576
8.2.3 Die Schiffe576
8.2.4 Die Waffensysteme577
8.2.5 Speicherung der Informationen578
8.2.6 Die Schiffssysteme579
8.3 Schiffs- und Waffentypen580
8.3.1 Die Struktur580
8.3.2 Die Struktur581
8.3.3 Laden aus der INI-Datei582
8.4 Die Klasse584
8.4.1 Unser bisheriger Ansatz584
8.4.2 Das neue Prinzip584
8.4.3 Position und Skalierung585
8.4.4 Ein Fall für die Matrix!585
8.4.5 Relativ zu absolut – und zurück586
8.4.6 Die Physik kommt hinzu587
8.4.7 Implementierung von588
8.5 Der Umgang mit Schiffen594
8.5.1 Die594
Klasse594
8.5.2 Integrierung in596
8.5.3 Bewegen der Schiffe597
8.5.4 Kontrolle eines Schiffs602
8.5.5 Rendern der Schiffe604
8.5.6 Aufschalten von Zielen605
8.6 Alle Waffen abfeuern!607
8.6.1 Die607
Klasse607
8.6.2 Feuern608
8.6.3 Bewegen610
8.6.4 Rendern612
8.7 Sprites612
8.7.1 Was sind Sprites?612
8.7.2 Missbrauch der Kameraachsen613
8.7.3 Die TriBase-Sprite-Engine613
8.7.4 Zurück zum Spiel: Rendern der Laser619
8.8 Kollisionserkennung623
8.8.1 Rückblick: Umgebungskugel und Umgebungsquader623
8.8.2 Das Prinzip der Kollisionserkennung623
8.8.3 Kugel – Kugel623
8.8.4 Linie – Kugel625
8.8.5 Linie – Dreieck630
8.8.6 Dreieck – Dreieck637
8.8.7 Linie – Quader642
8.8.8 Quader – Quader647
8.8.9 Wie wir mit Modellen umgehen649
8.8.10 Vorberechnungen651
8.8.11 Linien und Modelle660
8.8.12 Kollision zwischen zwei Modellen664
8.8.13 Hardcore-Kollisionserkennung668
8.8.14 Volltreffer!669
8.8.15 Zusammenstoß zweier Schiffe672
8.9 Auto-Aiming675
8.9.1 Definition675
8.9.2 Der mathematische Hintergrund675
8.9.3 Die neue676
Methode676
8.10 „Künstliche Intelligenz“677
8.10.1 Das Verhalten eines Schiffs678
8.10.2 Schritt 1: Kurs auf das Ziel nehmen678
8.10.3 Schritt 2: Feuern680
8.10.4 Schritt 3: Ausweichmanöver bei Treffer681
8.10.5 Schritt 4: Ausweichmanöver bei drohender Kollision682
8.10.6 Schritt 5: Wechseln des Ziels683
8.11 Partikel683
8.11.1 Was Partikel sind683
8.11.2 Das Partikelsystem der TriBase-Engine684
8.11.3 Antriebs- und Raketenflammen685
8.11.4 Explosionen686
8.11.5 Aufleuchten des Schutzschilds689
8.11.6 Trümmer691
8.12 Weitere optische Verfeinerungen692
8.12.1 Sky-Box, Licht und Nebel692
8.12.2 Ein „Sternenfeld“695
8.12.3 Glühen von Projektilen697
8.13 Die Kamera697
8.14 Das Cockpit700
8.14.1 Das Cockpitmodell700
8.14.2 Die Anzeigen701
8.14.3 Das HUD704
8.14.4 Radar705
8.15 Der Sound711
8.15.1 Schüsse711
8.15.2 Antriebssounds712
8.15.3 Der Hörer713
8.16 Die Benutzeroberfläche713
8.16.1 Die TriBase-Benutzeroberfläche714
8.16.2 Erstellung des Hauptmenüs723
8.17 Optimierungen und der Feinschliff730
8.17.1 Sichtbarkeit eines Objekts730
8.17.2 Render-Modell und Kollisionsmodell734
8.17.3 Musik735
8.17.4 Wackelndes Cockpit735
8.17.5 Screenshots schießen735
8.18 Erweiterungsvorschläge736
8.19 Ausblick737
9 Fortgeschrittene Techniken738
9.1 Was Sie in diesem Kapitel erwartet739
9.2 Schatten mit dem Stencil-Buffer739
9.2.1 Schatten in der 3D-Grafik739
9.2.2 Ansätze739
9.2.3 Das Prinzip740
9.2.4 Die Klasse745
9.2.5 Das Beispielprogramm754
9.3 Videos abspielen754
9.3.1 Zielsetzung754
9.3.2 Schreiben eines eigenen Filters754
9.3.3 Verwenden des Filters764
9.3.4 Der Back-Buffer-Mechanismus767
9.3.5 Videos in den Speicher laden767
9.4 Stereo-3D-Grafik768
9.4.1 Das räumliche Sehen768
9.4.2 Trennen der Bilder769
9.4.3 Implementierung771
9.4.4 Beispielprogramme772
9.5 Raumaufteilung772
9.5.1 Rekursives Rendern772
9.5.2 PVS und Portale773
9.5.3 Light-Mapping774
9.5.4 Die TriBase-Klasse776
9.6 Terrain-Rendering776
9.6.1 Repräsentierung eines Terrains777
9.6.2 Unterteilung des Terrains777
9.6.3 Erzeugen der Dreiecke778
9.6.4 Terrain-Rückruffunktion779
9.6.5 Geo-MIP-Mapping779
9.6.6 Texturierung779
9.6.7 Beleuchtung781
9.6.8 Das TriBase-Tool781
9.7 Die Welt der Shader783
9.7.1 Was ein Shader ist783
9.7.2 Einsatzgebiete783
9.7.3 Die fixe und die programmierbare Rendering-Pipeline784
9.7.4 Ein einfacher Vertex-Shader784
9.7.5 Ein einfacher Pixel-Shader787
9.7.6 Praktischer Einsatz von Shadern789
9.7.7 Weiterführende Quellen und Referenz799
9.8 Charakteranimation800
9.8.1 Das Grundprinzip800
9.8.2 Skinning in Hardware801
9.8.3 Skinning mit D3DX802
9.8.4 Weitere Informationen802
9.9 PlugIns schreiben und laden802
9.9.1 DLL-Dateien explizit laden802
9.9.2 Adresse einer Funktion abfragen803
9.9.3 DLL-Dateien erzeugen804
9.9.4 Die Kommunikation zwischen Anwendung und PlugIn806
9.9.5 Das Beispielprogramm806
9.10 Arbeiten mit Threads806
9.10.1 Prozesse im Betriebssystem806
9.10.2 Was ist ein Thread?807
9.10.3 Die Thread-Funktion808
9.10.4 Erzeugen eines Threads808
9.10.5 Verwaltungsfunktionen809
9.10.6 Thread-Synchronisierung810
9.10.7 Zusammenfassung815
9.11 Eine einfache Skriptsprache815
9.11.1 Einsatzgebiet von Skriptsprachen815
9.11.2 Ein Skript als Liste von Befehlen816
9.11.3 Verwendung von Funktionszeigern816
9.11.4 Übergabe von Parametern817
9.11.5 Einen Thread verwenden818
9.11.6 Die Klasse818
9.11.7 Das Beispielprogramm824
9.11.8 Fortgeschrittene Skriptsprachen825
9.12 Interpolationen825
9.12.1 Nachteil linearer Interpolationen825
9.12.2 Hermite-Interpolation mit Tangenten826
9.12.3 In zwei Richtungen – die bilineare Interpolation830
9.13 Abstrakte Spiel- und Spielzustandsklassen831
9.13.1 Die Spielzustandsklasse831
9.13.2 Die Spielklasse833
9.13.3 Die Anwendung835
9.14 Fixed-Step-Spiellogik835
9.14.1 Die Problematik835
9.14.2 Ein Lösungsansatz836
9.15 Online-Highscores und Versionskontrolle840
9.15.1 Die Möglichkeiten840
9.15.2 Die Realisierung840
9.15.3 Internetseiten in einem C++-Programm abrufen841
9.16 Ausblick842
10 FAQ, Internetseiten und CD- ROM (Inhalte auf Anfrage erhältlich)844
10.1 FAQ845
10.2 Interessante Internetseiten846
10.3 Die Programme auf der Begleit-CD-ROM848
10.3.1 3Dografe848
10.3.2 AC3D v5.021 Demo849
10.3.3 MilkShape 3D v1.76 Demo850
10.3.4 POV-Ray v3.6851
10.3.5 Sound Forge 7 Demo852
10.3.6 Terragen 0.943853
10.3.7 Texture Maker v2.81 Demo854
10.3.8 Visual Assist X Demo855
10.3.9 2D-Game-Framework855
10.4 Das Ende855
Index856
Mehr eBooks bei www.ciando.com0

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Automotive Embedded Systeme

E-Book Automotive Embedded Systeme
Effizfientes Framework - Vom Design zur Implementierung Format: PDF

Die Entwicklung hochkomplexer automotiver Infotainmentsysteme bestehend aus einer Headunit und weiteren Komponenten wie Audio- und Videoelementen, Kommunikationseinheiten, Navigationssystemen und…

Weitere Zeitschriften

Menschen. Inklusiv leben

Menschen. Inklusiv leben

MENSCHEN. das magazin informiert über Themen, die das Zusammenleben von Menschen in der Gesellschaft bestimmen -und dies konsequent aus Perspektive der Betroffenen. Die Menschen, um die es geht, ...

CAREkonkret

CAREkonkret

CAREkonkret ist die Wochenzeitung für Entscheider in der Pflege. Ambulant wie stationär. Sie fasst topaktuelle Informationen und Hintergründe aus der Pflegebranche kompakt und kompetent für Sie ...

CE-Markt

CE-Markt

 Das Fachmagazin für Consumer-Electronics & Home Technology Products Telefónica O2 Germany startet am 15. Oktober die neue O2 Handy-Flatrate. Der Clou: Die Mindestlaufzeit des Vertrages ...

SPORT in BW (Württemberg)

SPORT in BW (Württemberg)

SPORT in BW (Württemberg) ist das offizielle Verbandsorgan des Württembergischen Landessportbund e.V. (WLSB) und Informationsmagazin für alle im Sport organisierten Mitglieder in Württemberg. ...

filmdienst#de

filmdienst#de

filmdienst.de führt die Tradition der 1947 gegründeten Zeitschrift FILMDIENST im digitalen Zeitalter fort. Wir begleiten seit 1947 Filme in allen ihren Ausprägungen und Erscheinungsformen.  ...