3D-Spieleprogrammierung mit DirectX 9 und C++
von: David Scherfgen
Carl Hanser Fachbuchverlag, 2006
ISBN: 9783446408456
Sprache: Deutsch
867 Seiten, Download: 14555 KB
Format: PDF, auch als Online-Lesen
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 |