David Scherfgen
3D-Spieleprogrammierung mit DirectX 9 und C++
Inhalt
6
Vorwort
19
1 Einleitung
22
1.1 Ein paar Dinge im Voraus
23
1.1.1 Was Sie erwartet
23
1.1.2 Was Sie nicht erwartet
23
1.1.3 Voraussetzungen
24
1.1.4 Die Schriftformate in diesem Buch
24
1.1.5 Was tun bei Problemen?
24
1.1.6 Zu DirectX 9.0 und DirectX 9.0c
25
1.1.7 Die ungarische Notation
25
1.2 Einführung in die Spieleprogrammierung
26
1.2.1 Der kleine Unterschied
26
1.2.2 Was macht ein Spiel eigentlich?
27
1.2.3 Eingliederung in die Windows-Architektur
29
1.2.4 Das Problem mit der Zeit
30
1.2.5 Die verschiedenen Seiten eines Spiels
34
1.2.6 Rückblick
35
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 DirectX
39
1.3.4 Rückblick
42
1.4 Wir bauen uns eine eigene Engine!
42
1.4.1 Was versteht man unter einer Engine?
42
1.4.2 Verschiedene Entwicklungsansätze
42
1.4.3 Konkrete Planung
43
1.4.4 Installation der Engine und Einrichten eines Projekts
46
1.4.5 Vorgabefunktionen, Klassen und Makros
47
1.4.6 Rückblick
57
1.4.7 Übungsaufgaben
57
1.5 Tipps zum Debuggen
58
1.6 Ausblick
61
2 3D-Grafik
62
2.1 Was Sie in diesem Kapitel erwartet
63
2.2 Einführung in die 3D-Grafik
63
2.2.1 Ein neues Koordinatensystem
63
2.2.2 Theorie der 3D-Grafik
65
2.2.3 Vektoren
67
2.2.4 Matrizen
86
2.2.5 Ebenen
109
2.2.6 Das RGB-Farbsystem
115
2.2.7 Rückblick
118
2.2.8 Übungsaufgaben
119
2.3 Direct3D-Grundlagen
119
2.3.1 Was ist Direct3D?
119
2.3.2 Die Transformationspipeline
120
2.3.3 Der Rasterizer
121
2.3.4 Die wichtigsten Schnittstellen
122
2.3.5 Ressourcen
122
2.3.6 Oberflächen
123
2.3.7 Direct3D im C++-Programm ansprechen
127
2.3.8 Rückblick
127
2.4 Initialisierung von Direct3D
128
2.4.1 Erstellen der
128
Schnittstelle
128
2.4.2 Adapterinformationen
129
2.4.3 Caps – die Fähigkeiten eines Geräts
133
2.4.4 Erstellen des Fensters
134
2.4.5 Erstellen der
137
Schnittstelle
137
2.4.6 Direct3D herunterfahren
149
2.4.7 Beispielprogramm: eine komplette Direct3D-Anwendung
149
2.4.8 Rückblick
151
2.4.9 Übungsaufgaben
152
2.5 Das erste Dreieck
152
2.5.1 Vertizes
152
2.5.2 Erste Render-States
154
2.5.3 Setup der Transformationspipeline
158
2.5.4 Der Zeichenvorgang
160
2.5.5 Rückblick
166
2.5.6 Übungsaufgaben
167
2.6 Texturen
167
2.6.1 Was Texturen sind
167
2.6.2 Grundlegende Dinge
170
2.6.3 Der bilineare Filter
172
2.6.4 MIP-Mapping – schnell und schön
174
2.6.5 Weitere Spielereien
176
2.6.6 Texturen mit D3DX laden
177
2.6.7 Texturinformationen abfragen
180
2.6.8 Das Beispielprogramm
181
2.6.9 Kachelfähige Texturen erzeugen
186
2.6.10 Rückblick
187
2.6.11 Übungsaufgaben
188
2.7 Vertex- und Index-Buffer
188
2.7.1 Zweck von Vertex- und Index-Buffern
188
2.7.2 Der Vertex-Buffer im Detail
189
2.7.3 Der Index-Buffer im Detail
193
2.7.4 Das Beispielprogramm
197
2.7.5 Rückblick
202
2.7.6 Übungsaufgaben
202
2.8 Nebel
203
2.8.1 Die Theorie
203
2.8.2 Nebel mit Direct3D
205
2.8.3 Das Beispielprogramm
207
2.8.4 Rückblick
208
2.8.5 Übungsaufgaben
209
2.9 Beleuchtung
209
2.9.1 Ein einfaches Beleuchtungssystem
209
2.9.2 Die Praxis – Beleuchtung mit Direct3D
216
2.9.3 Das Beispielprogramm
224
2.9.4 Rückblick
225
2.9.5 Übungsaufgaben
226
2.10 Alpha-Blending
227
2.10.1 Die Theorie
227
2.10.2 Alpha-Blending mit Direct3D
229
2.10.3 Das Beispielprogramm
232
2.10.4 Rückblick
233
2.10.5 Übungsaufgaben
234
2.11 Multi-Texturing
234
2.11.1 Der theoretische Teil
234
2.11.2 Multi-Texturing anwenden
238
2.11.3 Mehr über Texturkoordinaten
241
2.11.4 Das Beispielprogramm
244
2.11.5 Rückblick
246
2.11.6 Übungsaufgaben
246
2.12 Exotische Texturformen
247
2.12.1 Volumentexturen
247
2.12.2 Umgebungstexturen
251
2.12.3 Bump-Mapping
261
2.12.4 Rückblick
264
2.12.5 Übungsaufgaben
265
2.13 Der Stencil-Buffer
266
2.13.1 Was war das noch gleich?
266
2.13.2 Die Details
266
2.13.3 Das Beispielprogramm
270
2.13.4 Rückblick
273
2.13.5 Übungsaufgaben
273
2.14 D3DX-Effekte
273
2.14.1 Probleme beim Verwalten von Modellen
273
2.14.2 „Effekte“
274
2.14.3 Laden eines Effekts
277
2.14.4 Mit Effekten rendern
278
2.14.5 Variablen von außen setzen und abfragen
280
2.14.6 Das Beispielprogramm
282
2.14.7 Rückblick
284
2.14.8 Übungsaufgaben
284
2.15 Transformierte Vertizes für 2D-Grafik
285
2.15.1 Wozu denn noch 2D?
285
2.15.2 Die Transformation umgehen
285
2.15.3 Ein anderes Vertexformat
286
2.15.4 DirectDraw imitieren
287
2.15.5 Eine andere Methode für 2D-Grafik
289
2.15.6 Rückblick
290
2.15.7 Übungsaufgaben
290
2.16 In Texturen rendern
290
2.16.1 Schritt 1: Erstellen einer Textur und eines Z-Buffers
290
2.16.2 Schritt 2: Das neue Render-Target setzen
291
2.16.3 Schritt 3: Rendern!
291
2.16.4 Einfacher mit D3DX
291
2.16.5 Wozu braucht man das?
292
2.17 Ausblick
293
3 3D-Grafik mit der TriBase- Engine
294
3.1 Was Sie in diesem Kapitel erwartet
295
3.2 Direct3D mit der TriBase-Engine
295
3.2.1 Was uns das Leben leichter machen kann
295
3.2.2 Die Klasse
297
3.2.3 Der Texturmanager –
308
3.2.4
322
und
322
3.2.5 Die Effektklasse
333
3.2.6 Ein allumfassendes Beispielprogramm
337
3.2.7 Rückblick
346
3.2.8 Ausblick
346
3.3 Modelldateien
346
3.3.1 Die Vorarbeit
347
3.3.2 Der Konverter
352
3.3.3 Eine Modellklasse
354
3.3.4 Das Beispielprogramm
366
3.3.5 Rückblick
369
3.4 Texte zeichnen
370
3.4.1 Speicherung der Zeichen
370
3.4.2 Das Format der Textur
371
3.4.3 Transformierte Vertizes für Texte
371
3.4.4 Der Weg von TrueType zur Bitmap-Font
372
3.4.5 Inhalt der TBF-Dateien
372
3.4.6 Programmierung einer Schriftartklasse
373
3.4.7 Das Beispielprogramm
383
3.4.8 Rückblick
385
3.5 Ausblick
385
4 Eingabe
386
4.1 Was uns in diesem Kapitel erwartet
387
4.2 DirectInput kurz vorgestellt
387
4.2.1 Was kann DirectInput besser als Windows?
387
4.2.2 Geräte und Geräteklassen
388
4.2.3 GUIDs
388
4.2.4 Achsen und Knöpfe
388
4.2.5 Die Funktionsweise von DirectInput
389
4.2.6 Ein paar Worte zum Debuggen
390
4.3 Der Startschuss fällt
390
4.3.1 Erstellen des
390
Objekts
390
4.3.2 Eingabegeräte abzählen
392
4.3.3 Rückblick
393
4.4 Initialisierung eines Geräts und Datenabfrage
394
4.4.1 Keine Angst vor
394
4.4.2 Vorbereitungen treffen
394
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ückblick
397
4.5 Die Tastatur
397
4.5.1 Das Datenformat der Tastatur
397
4.5.2 Tastencodes
398
4.5.3 Das Beispielprogramm
400
4.5.4 Begrenzungen der Tastatur
401
4.5.5 Rückblick
402
4.6 Die Maus
402
4.6.1 Das Datenformat der Maus
402
4.6.2 Relative Achsen
402
4.6.3 Die Mausknöpfe
403
4.6.4 Der exklusive Modus
403
4.6.5 Das Beispielprogramm
404
4.6.6 Rückblick
405
4.7 Der Joystick
405
4.7.1 Achsen, Knöpfe, POVs und Schieberegler
405
4.7.2 Das Joystick-Datenformat
406
4.7.3 Das Beispielprogramm
407
4.7.4 Rückblick
408
4.8 Objekte abzählen und kalibrieren
409
4.8.1 Objekte abzählen
409
4.8.2 Eigenschaften festlegen
410
4.8.3 Achsenmodus
411
4.8.4 Achsenskalierung
411
4.8.5 Die tote Zone
412
4.8.6 Sättigung
413
4.8.7 Das Beispielprogramm
413
4.8.8 Gepufferte Daten und direkte Daten
413
4.8.9 Rückblick
414
4.9 Übungsaufgaben
414
4.10 Eine Eingabeklasse für die Engine
414
4.10.1 Probleme mit DirectInput
414
4.10.2 Das Prinzip der analogen Knöpfe
415
4.10.3 Die
417
Klasse
417
4.10.4 Das Beispielprogramm
435
4.10.5 Rückblick
437
4.11 Ausblick
437
5 Sound und Musik
438
5.1 DirectSound kurz vorgestellt
439
5.1.1 Was kann DirectSound besser als Windows?
439
5.1.2 Soundpuffer und Mixer
439
5.1.3 Die Schnittstellen
441
5.2 Initialisierung von DirectSound
441
5.2.1 Formale Dinge
441
5.2.2 Abzählen der DirectSound-Geräte
441
5.2.3 Erstellung der
442
Schnittstelle
442
5.2.4 Die Kooperationsebene wählen
443
5.2.5 Rückblick
443
5.3 Erstellen von Soundpuffern
443
5.3.1 Eigenschaften der Soundpuffer
444
5.3.2 Das Format eines Soundpuffers
446
5.3.3 Anfordern der
447
Schnittstelle
447
5.3.4 Der primäre Soundpuffer
448
5.3.5 Rückblick
449
5.4 Füllen eines sekundären Soundpuffers
449
5.4.1 Eine kleine Einführung in die Akustik
449
5.4.2 Wir sperren den Soundpuffer
454
5.4.3 Entsperren
456
5.4.4 Hinein mit den Daten!
456
5.4.5 Rückblick
458
5.5 Kontrolle eines Sounds
459
5.5.1 Die
459
Methode
459
5.5.2 Festlegen der Lautstärke
460
5.5.3 Festlegen der Balance
461
5.5.4 Festlegen der Abspielfrequenz
461
5.5.5 Das Beispielprogramm
462
5.5.6 Rückblick
462
5.6 WAV-Dateien laden
463
5.6.1 Der RIFF-Header
463
5.6.2 Die WAV-Chunks
464
5.6.3 Die Funktion
464
5.7 3D-Sound
467
5.7.1 Theorie des 3D-Sounds
467
5.7.2 Die
467
Schnittstelle
467
5.7.3 Die
469
Schnittstelle
469
5.7.4 Das Beispielprogramm
471
5.7.5 Rückblick
472
5.8 Echtzeiteffekte
472
5.8.1 Effekte – vorberechnet und in Echtzeit
472
5.8.2 Verschiedene Effektschnittstellen
473
5.8.3 Vorwarnung erforderlich!
474
5.8.4 Effekte mit
474
anfordern
474
5.8.5 Die Effektschnittstelle abfragen
475
5.8.6 Effektparameter am Beispiel des Echos
476
5.8.7 Experimentieren ist angesagt!
477
5.8.8 Rückblick
477
5.9 Ergänzende Informationen
478
5.9.1 Die verschiedenen Schnittstellen
478
5.9.2 Klonen von Sounds
479
5.9.3 Status eines Soundpuffers
479
5.10 Die Klasse
480
5.10.1 Erweiterung des Konfigurationsdialogs
480
5.10.2 Was
481
können soll
481
5.10.3 Die Klassendefinition
481
5.10.4 Die Initialisierungsmethode
483
5.10.5 Der Umgang mit dem Hörer
484
5.11 Die
485
Klasse
485
5.11.1 Fähigkeiten der Klasse
485
5.11.2 Das Prinzip der Soundpufferliste
486
5.11.3 Die Klassendefinition
486
5.11.4 Laden des Sounds
488
5.11.5 Die
490
Methode
490
5.11.6 Die
491
Methode
491
5.11.7 Einen Sound abspielen
492
5.11.8 Abspielen des nächsten Soundpuffers
492
5.11.9 Die restlichen Methoden …
493
5.12 Musik ins Spiel bringen
493
5.12.1 Was unterscheidet Musik von Soundeffekten?
493
5.12.2 DirectShow-Grundlagen
494
5.12.3 Kontrolle über den Filtergraphen
496
5.12.4 Die Klasse
497
5.12.5 Das Beispielprogramm
500
5.13 Ausblick
501
6 Theorie der Spieleprogrammierung
502
6.1 Was Sie in diesem Kapitel erwartet
503
6.2 Warum Planung wichtig ist
503
6.3 Am Anfang steht die Idee
503
6.3.1 Inspiration
504
6.3.2 Auf Ideen vorbereitet sein
505
6.3.3 Aussortieren
505
6.3.4 Storydesign
505
6.3.5 Entwicklung eines Ablaufschemas
507
6.4 Suche nach Teammitgliedern
507
6.5 Vermitteln des Spiels und gemeinsame Analyse
507
6.5.1 Die Absichten klarmachen
508
6.5.2 Machbarkeitsanalyse
508
6.5.3 Tipps
509
6.6 Ausarbeitung der Details
509
6.7 Einteilung in Module
510
6.8 Level-Design und Atmosphäre
510
6.8.1 Abenteuer-, Action- und Rollenspiele
510
6.8.2 Puzzlespiele
511
6.8.3 Simulatoren
511
6.8.4 Wann eine Aufgabe zu schwer ist
511
6.8.5 Tipps für das Level-Design
512
6.8.6 Allgemeine Tipps für eine bessere Spielatmosphäre
514
6.9 Tipps zum Programmieren
516
6.9.1 Planung und Standard
516
6.9.2 Implementierung neuer Features
516
6.9.3 Die Liebe zum Detail
518
6.10 Testen Ihres Spiels
518
6.10.1 Testen während des Entwicklungsprozesses
518
6.10.2 Testen des fertigen Spiels
518
6.11 Ausblick
520
7 Das erste Spiel
522
7.1 Was Sie in diesem Kapitel erwartet
523
7.2 Planung
523
7.2.1 Das Spielprinzip und der Name des Spiels
523
7.2.2 Die Darstellung
524
7.2.3 Die Spielzustände
524
7.2.4 Das Spielgerüst
525
7.3 Die Grundklasse
526
7.3.1 Variablen
526
7.3.2 Methoden
527
7.3.3 Die
532
Funktion
532
für Breakanoid
532
7.4 Das Titelbild
532
7.4.1 Planung des Titelbilds
533
7.4.2 Die Schriftarten
533
7.4.3 Initialisieren, Laden und Entladen des Titelbilds
534
7.4.4 Rendern des Titelbilds
535
7.4.5 Bewegung des Titelbilds
537
7.5 Das Hauptmenü
537
7.5.1 Planung des Hauptmenüs
537
7.5.2 Laden, Entladen, Betreten und Verlassen
538
7.5.3 Rendern
538
7.5.4 Bewegen des Hauptmenüs
540
7.5.5 Sound für das Hauptmenü!
541
7.6 Das Spiel
542
7.6.1 Planung des Spiels
543
7.6.2 Schritt 1: die
544
Klasse
544
7.6.3 Schritt 2: Anzeigen des Levelmodells
545
7.6.4 Schritt 3: Her mit dem Schläger!
547
7.6.5 Schritt 4: Ein Levelsystem
551
7.6.6 Schritt 5: Bälle hinzufügen
552
7.6.7 Schritt 6: Die Blöcke
558
7.6.8 Schritt 7: Versuche
564
7.6.9 Schritt 8: Punkte
566
7.6.10 Schritt 9: Sound für das Spiel
567
7.6.11 Schritt 10: Hier spielt die Musik!
568
7.7 Minimieren im Vollbildmodus
569
7.7.1 Das Problem
569
7.7.2 Die Lösung
569
7.8 Motion-Blurring
570
7.9 Erweiterungsvorschläge
573
7.10 Ausblick
573
8 Das zweite Spiel
574
8.1 Was Sie in diesem Kapitel erwartet
575
8.2 Planung
575
8.2.1 Das Spielprinzip und der Name des Spiels
575
8.2.2 Die Spielzustände
576
8.2.3 Die Schiffe
576
8.2.4 Die Waffensysteme
577
8.2.5 Speicherung der Informationen
578
8.2.6 Die Schiffssysteme
579
8.3 Schiffs- und Waffentypen
580
8.3.1 Die Struktur
580
8.3.2 Die Struktur
581
8.3.3 Laden aus der INI-Datei
582
8.4 Die Klasse
584
8.4.1 Unser bisheriger Ansatz
584
8.4.2 Das neue Prinzip
584
8.4.3 Position und Skalierung
585
8.4.4 Ein Fall für die Matrix!
585
8.4.5 Relativ zu absolut – und zurück
586
8.4.6 Die Physik kommt hinzu
587
8.4.7 Implementierung von
588
8.5 Der Umgang mit Schiffen
594
8.5.1 Die
594
Klasse
594
8.5.2 Integrierung in
596
8.5.3 Bewegen der Schiffe
597
8.5.4 Kontrolle eines Schiffs
602
8.5.5 Rendern der Schiffe
604
8.5.6 Aufschalten von Zielen
605
8.6 Alle Waffen abfeuern!
607
8.6.1 Die
607
Klasse
607
8.6.2 Feuern
608
8.6.3 Bewegen
610
8.6.4 Rendern
612
8.7 Sprites
612
8.7.1 Was sind Sprites?
612
8.7.2 Missbrauch der Kameraachsen
613
8.7.3 Die TriBase-Sprite-Engine
613
8.7.4 Zurück zum Spiel: Rendern der Laser
619
8.8 Kollisionserkennung
623
8.8.1 Rückblick: Umgebungskugel und Umgebungsquader
623
8.8.2 Das Prinzip der Kollisionserkennung
623
8.8.3 Kugel – Kugel
623
8.8.4 Linie – Kugel
625
8.8.5 Linie – Dreieck
630
8.8.6 Dreieck – Dreieck
637
8.8.7 Linie – Quader
642
8.8.8 Quader – Quader
647
8.8.9 Wie wir mit Modellen umgehen
649
8.8.10 Vorberechnungen
651
8.8.11 Linien und Modelle
660
8.8.12 Kollision zwischen zwei Modellen
664
8.8.13 Hardcore-Kollisionserkennung
668
8.8.14 Volltreffer!
669
8.8.15 Zusammenstoß zweier Schiffe
672
8.9 Auto-Aiming
675
8.9.1 Definition
675
8.9.2 Der mathematische Hintergrund
675
8.9.3 Die neue
676
Methode
676
8.10 „Künstliche Intelligenz“
677
8.10.1 Das Verhalten eines Schiffs
678
8.10.2 Schritt 1: Kurs auf das Ziel nehmen
678
8.10.3 Schritt 2: Feuern
680
8.10.4 Schritt 3: Ausweichmanöver bei Treffer
681
8.10.5 Schritt 4: Ausweichmanöver bei drohender Kollision
682
8.10.6 Schritt 5: Wechseln des Ziels
683
8.11 Partikel
683
8.11.1 Was Partikel sind
683
8.11.2 Das Partikelsystem der TriBase-Engine
684
8.11.3 Antriebs- und Raketenflammen
685
8.11.4 Explosionen
686
8.11.5 Aufleuchten des Schutzschilds
689
8.11.6 Trümmer
691
8.12 Weitere optische Verfeinerungen
692
8.12.1 Sky-Box, Licht und Nebel
692
8.12.2 Ein „Sternenfeld“
695
8.12.3 Glühen von Projektilen
697
8.13 Die Kamera
697
8.14 Das Cockpit
700
8.14.1 Das Cockpitmodell
700
8.14.2 Die Anzeigen
701
8.14.3 Das HUD
704
8.14.4 Radar
705
8.15 Der Sound
711
8.15.1 Schüsse
711
8.15.2 Antriebssounds
712
8.15.3 Der Hörer
713
8.16 Die Benutzeroberfläche
713
8.16.1 Die TriBase-Benutzeroberfläche
714
8.16.2 Erstellung des Hauptmenüs
723
8.17 Optimierungen und der Feinschliff
730
8.17.1 Sichtbarkeit eines Objekts
730
8.17.2 Render-Modell und Kollisionsmodell
734
8.17.3 Musik
735
8.17.4 Wackelndes Cockpit
735
8.17.5 Screenshots schießen
735
8.18 Erweiterungsvorschläge
736
8.19 Ausblick
737
9 Fortgeschrittene Techniken
738
9.1 Was Sie in diesem Kapitel erwartet
739
9.2 Schatten mit dem Stencil-Buffer
739
9.2.1 Schatten in der 3D-Grafik
739
9.2.2 Ansätze
739
9.2.3 Das Prinzip
740
9.2.4 Die Klasse
745
9.2.5 Das Beispielprogramm
754
9.3 Videos abspielen
754
9.3.1 Zielsetzung
754
9.3.2 Schreiben eines eigenen Filters
754
9.3.3 Verwenden des Filters
764
9.3.4 Der Back-Buffer-Mechanismus
767
9.3.5 Videos in den Speicher laden
767
9.4 Stereo-3D-Grafik
768
9.4.1 Das räumliche Sehen
768
9.4.2 Trennen der Bilder
769
9.4.3 Implementierung
771
9.4.4 Beispielprogramme
772
9.5 Raumaufteilung
772
9.5.1 Rekursives Rendern
772
9.5.2 PVS und Portale
773
9.5.3 Light-Mapping
774
9.5.4 Die TriBase-Klasse
776
9.6 Terrain-Rendering
776
9.6.1 Repräsentierung eines Terrains
777
9.6.2 Unterteilung des Terrains
777
9.6.3 Erzeugen der Dreiecke
778
9.6.4 Terrain-Rückruffunktion
779
9.6.5 Geo-MIP-Mapping
779
9.6.6 Texturierung
779
9.6.7 Beleuchtung
781
9.6.8 Das TriBase-Tool
781
9.7 Die Welt der Shader
783
9.7.1 Was ein Shader ist
783
9.7.2 Einsatzgebiete
783
9.7.3 Die fixe und die programmierbare Rendering-Pipeline
784
9.7.4 Ein einfacher Vertex-Shader
784
9.7.5 Ein einfacher Pixel-Shader
787
9.7.6 Praktischer Einsatz von Shadern
789
9.7.7 Weiterführende Quellen und Referenz
799
9.8 Charakteranimation
800
9.8.1 Das Grundprinzip
800
9.8.2 Skinning in Hardware
801
9.8.3 Skinning mit D3DX
802
9.8.4 Weitere Informationen
802
9.9 PlugIns schreiben und laden
802
9.9.1 DLL-Dateien explizit laden
802
9.9.2 Adresse einer Funktion abfragen
803
9.9.3 DLL-Dateien erzeugen
804
9.9.4 Die Kommunikation zwischen Anwendung und PlugIn
806
9.9.5 Das Beispielprogramm
806
9.10 Arbeiten mit Threads
806
9.10.1 Prozesse im Betriebssystem
806
9.10.2 Was ist ein Thread?
807
9.10.3 Die Thread-Funktion
808
9.10.4 Erzeugen eines Threads
808
9.10.5 Verwaltungsfunktionen
809
9.10.6 Thread-Synchronisierung
810
9.10.7 Zusammenfassung
815
9.11 Eine einfache Skriptsprache
815
9.11.1 Einsatzgebiet von Skriptsprachen
815
9.11.2 Ein Skript als Liste von Befehlen
816
9.11.3 Verwendung von Funktionszeigern
816
9.11.4 Übergabe von Parametern
817
9.11.5 Einen Thread verwenden
818
9.11.6 Die Klasse
818
9.11.7 Das Beispielprogramm
824
9.11.8 Fortgeschrittene Skriptsprachen
825
9.12 Interpolationen
825
9.12.1 Nachteil linearer Interpolationen
825
9.12.2 Hermite-Interpolation mit Tangenten
826
9.12.3 In zwei Richtungen – die bilineare Interpolation
830
9.13 Abstrakte Spiel- und Spielzustandsklassen
831
9.13.1 Die Spielzustandsklasse
831
9.13.2 Die Spielklasse
833
9.13.3 Die Anwendung
835
9.14 Fixed-Step-Spiellogik
835
9.14.1 Die Problematik
835
9.14.2 Ein Lösungsansatz
836
9.15 Online-Highscores und Versionskontrolle
840
9.15.1 Die Möglichkeiten
840
9.15.2 Die Realisierung
840
9.15.3 Internetseiten in einem C++-Programm abrufen
841
9.16 Ausblick
842
10 FAQ, Internetseiten und CD- ROM (Inhalte auf Anfrage erhältlich)
844
10.1 FAQ
845
10.2 Interessante Internetseiten
846
10.3 Die Programme auf der Begleit-CD-ROM
848
10.3.1 3Dografe
848
10.3.2 AC3D v5.021 Demo
849
10.3.3 MilkShape 3D v1.76 Demo
850
10.3.4 POV-Ray v3.6
851
10.3.5 Sound Forge 7 Demo
852
10.3.6 Terragen 0.943
853
10.3.7 Texture Maker v2.81 Demo
854
10.3.8 Visual Assist X Demo
855
10.3.9 2D-Game-Framework
855
10.4 Das Ende
855
Index
856
Mehr eBooks bei www.ciando.com
0
© 2009-2025 ciando GmbH