Triki najlepszych programistów gier 3D. Vademecum profesjonalisty - Helion
Tytuł oryginału: Tricks of the 3D Game Programming Gurus
Tłumaczenie: Adam Bochenek (wstęp, rozdz. 1 - 3), Jarosław Dobrzański (rozdz. 6 - 9), Przemysław Szeremiota (rozdz. 4 - 5, 10 - 13), Sławomir Dzieniszewski (rozdz. 14 - 16, dod. A - F)
ISBN: 83-7361-267-X
stron: 1312, Format: B5, okładka: twarda
Data wydania: 2004-04-08
Księgarnia: Helion
Cena książki: 149,00 zł
Swoje triki zdradzą Ci prawdziwi guru ze świata twórców gier
- algorytmy matematyczne wykorzystywane w grafice 3D,
- zasady programowania w Windows i DirectX,
- algorytmy wyświetlania grafiki 2D i 3D,
- techniki animacji i renderingu 3D,
- mapowanie tekstur,
- techniki symulacji oświetlenia i wiele innych informacji.
Korzystając z tej książki, opracujesz doskonały, oparty wyłącznie na warstwie oprogramowania silnik 3D dla gry, wykorzystasz w swoich grach modele i postaci stworzone w programach 3D, stworzysz realistyczną scenerię gry 3D i zoptymalizujesz kod źródłowy programu pod kątem szybkości jego wykonywania.
Takich informacji nie znajdziesz w żadnej innej książce.
O autorze:
Andre LaMothe autor uznanych przez rynek książek o programowaniu gier i grafiki trójwymiarowej. Posiada stosowne wykształcenie z zakresu matematyki, informatyki i elektrotechniki.
[więcej...]
Osoby które kupowały "Triki najlepszych programistów gier 3D. Vademecum profesjonalisty", wybierały także:
- Tworzenie gier w języku HTML5 dla profesjonalistów. Wydanie II 67,42 zł, (20,90 zł -69%)
- GameMaker. Kurs video. Kompleksowy przewodnik tworzenia gier platformowych 154,58 zł, (55,65 zł -64%)
- Gry Unity i Facebook. Efektywna integracja, budowanie zasięgu i popularności. Kurs video 47,93 zł, (22,05 zł -54%)
- Unity. Kurs video. Poziom pierwszy. Tworzenie gier komputerowych 3D 47,93 zł, (22,05 zł -54%)
- Unity. Kurs video. Poziom drugi. Tworzenie gier komputerowych 3D 47,93 zł, (22,05 zł -54%)
Spis treści
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty -- spis treści
O Autorze (17)
Przedmowa (19)
Wstęp (21)
Część I Wprowadzenie do programowania gier 3D (25)
Rozdział 1. Wstęp do programowania gier 3D (27)
- Wprowadzenie (27)
- Elementy gier 2D/3D (29)
- Ogólne wskazówki dotyczące programowania gier (33)
- Narzędzia (36)
- Edytor poziomów 3D (39)
- Przygotowanie kompilatora (40)
- Przykładowa gra 3D: Raiders 3D (43)
- Pętla obsługi zdarzeń (62)
- Logika gry 3D (62)
- Rzutowanie 3D (64)
- Gwiezdne tło (66)
- Działo laserowe i wykrywanie kolizji (66)
- Eksplozja (66)
- Zasady gry (67)
- Podsumowanie (67)
Rozdział 2. Krótki kurs programowania w Windows i DirectX (69)
- Model programowania Win32 (69)
- Programowanie w Windows - absolutne minimum (70)
- Wszystko zaczyna się od WinMain() (70)
- Wzorcowa aplikacja Windows (75)
- Klasa okna (76)
- Rejestracja klasy okna (80)
- Tworzenie okna (80)
- Obsługa zdarzeń (82)
- Pętla obsługi komunikatów (87)
- Pętla obsługi komunikatów pracująca w czasie rzeczywistym (90)
- DirectX i COM w pigułce (91)
- HEL i HAL (93)
- Komponenty DirectX (94)
- Wprowadzenie do COM (95)
- Co to jest obiekt COM? (96)
- Tworzenie i używanie interfejsów COM biblioteki DirectX (98)
- Dostęp do interfejsów (98)
- Podsumowanie (100)
Rozdział 3. Abstrakcyjny komputer 3D (101)
- Założenia interfejsu abstrakcyjnego komputera (101)
- Budujemy abstrakcyjny komputer (103)
- System video, bufor ramki (103)
- Praca z kolorami (106)
- Kopiowanie bufora (108)
- Kompletny system graficzny abstrakcyjnego komputera (110)
- Dźwięk, muzyka, urządzenia wejścia (110)
- Konsola do gier T3DLIB (111)
- Podstawowa konsola do gier (111)
- Biblioteka T3DLIB (116)
- Architektura modułu graficznego (117)
- Podstawowe definicje (117)
- Makra (119)
- Typy danych, struktury (119)
- Funkcje (122)
- Globalna dominacja (125)
- Interfejs DirectDraw (126)
- Funkcje operujące na figurach 2D (130)
- Funkcje matematyczne i obsługa błędów (136)
- Mapy bitowe (138)
- Obsługa palety w trybie 8-bitowym (142)
- Funkcje pomocnicze (145)
- Obiekty BOB (146)
- T3DLIB2 - moduł obsługi urządzeń wejścia (154)
- T3DLIB3 - biblioteka obsługi dźwięku i muzyki (159)
- Definicje (160)
- Typy (160)
- Zmienne globalne (161)
- DirectSound API (161)
- DirectMusic API (166)
- Ostateczna postać konsoli T3D (168)
- Przypisanie funkcji graficznych abstrakcyjnemu modelowi (168)
- Konsola T3DLIB (171)
- Przykładowe aplikacje (179)
- Aplikacje okienkowe (179)
- Aplikacje pełnoekranowe (180)
- Dźwięk i muzyka (181)
- Klawiatura, myszka, joystick (181)
- Podsumowanie (184)
Część II Obliczenia i transformacje w trzech wymiarach (185)
Rozdział 4. Trygonometria, wektory, macierze i kwaterniony - cała ta matematyka (187)
- Notacje matematyczne (187)
- Dwuwymiarowe układy współrzędnych (188)
- Dwuwymiarowy układ współrzędnych kartezjańskich (189)
- Dwuwymiarowy układ współrzędnych biegunowych (190)
- Trójwymiarowe układy współrzędnych (193)
- Trójwymiarowe współrzędne kartezjańskie (193)
- Trójwymiarowe współrzędne cylindryczne (196)
- Konwersja trójwymiarowych współrzędnych kartezjańskich do współrzędnych cylindrycznych (196)
- Trójwymiarowe współrzędne sferyczne (197)
- Podstawy trygonometrii (198)
- Trójkąt prostokątny (199)
- Odwrotne funkcje trygonometryczne (200)
- Zależności trygonometryczne (201)
- Wektory (202)
- Długość wektora (203)
- Normalizacja (204)
- Mnożenie wektora przez wartości skalarne (204)
- Dodawanie wektorów (205)
- Odejmowanie wektorów (206)
- Iloczyn skalarny wektorów (206)
- Iloczyn wektorowy (209)
- Wektor zerowy (211)
- Wektory położenia i wektory przemieszczenia (211)
- Wektory jako kombinacje liniowe składowych (211)
- Macierze i algebra liniowa (212)
- Macierz jednostkowa (214)
- Dodawanie macierzy (214)
- Transpozycja macierzy (215)
- Mnożenie macierzy (215)
- Reguły mnożenia macierzy (217)
- Wyznaczanie macierzy odwrotnej i rozwiązywanie układów równań (217)
- Reguła Cramera (219)
- Przekształcenia geometryczne z wykorzystaniem macierzy (221)
- Współrzędne jednorodne (222)
- Przekształcenia macierzowe (223)
- Podstawowe obiekty geometryczne (230)
- Punkty (230)
- Proste (230)
- Proste w przestrzeni trójwymiarowej (232)
- Płaszczyzny (234)
- Równania parametryczne (238)
- Proste parametryczne na płaszczyźnie i w przestrzeni trójwymiarowej (238)
- Parametryczne definicje odcinków, wykorzystujące zwykły wektor kierunkowy v (239)
- Parametryczne definicje odcinków, wykorzystujące jednostkowy wektor kierunkowy |v| = 1 (240)
- Parametryczne proste w przestrzeni trójwymiarowej (241)
- Kwaterniony - wprowadzenie (246)
- Teoria liczb zespolonych (247)
- Rozszerzenie liczb zespolonych (252)
- Zastosowania kwaternionów (257)
- Wstęp do analizy matematycznej (261)
- Pojęcie nieskończoności (261)
- Granice (263)
- Sumy i szeregi liczbowe skończone (264)
- Szeregi liczbowe nieskończone (266)
- Pochodne (267)
- Całki (274)
- Podsumowanie (279)
Rozdział 5. Implementacja modułu matematycznego (281)
- Moduł matematyczny - przegląd (282)
- Struktura plików modułu matematycznego (282)
- Konwencja nazewnicza (282)
- Obsługa błędów (283)
- Słowo na temat języka C++ (284)
- Struktury i typy danych (284)
- Wektory i punkty (284)
- Równania parametryczne prostych (286)
- Płaszczyzny w przestrzeni trójwymiarowej (287)
- Macierze (287)
- Kwaterniony (290)
- Obsługa współrzędnych niekartezjańskich (291)
- Dwuwymiarowy układ współrzędnych biegunowych (292)
- Trójwymiarowy układ współrzędnych cylindrycznych (293)
- Trójwymiarowy układ współrzędnych sferycznych (293)
- Liczby stałoprzecinkowe (294)
- Stałe matematyczne (295)
- Makrodefinicje i funkcje rozwijane w miejscu wywołania (297)
- Funkcje użytkowe i funkcje konwersji (301)
- Funkcje manipulujące punktami i wektorami (301)
- Macierze (302)
- Kwaterniony (304)
- Obliczenia stałoprzecinkowe (304)
- Prototypy (305)
- Zmienne globalne (308)
- Interfejs programowy modułu matematycznego (308)
- Funkcje trygonometryczne (309)
- Funkcje obsługi różnych układów współrzędnych (310)
- Funkcje obsługi wektorów (313)
- Funkcje operujące na macierzach (321)
- Funkcje operujące parametryczną reprezentacją prostych na płaszczyźnie i w przestrzeni trójwymiarowej (333)
- Funkcje obsługi płaszczyzn trójwymiarowych (337)
- Funkcje obsługi kwaternionów (341)
- Funkcje obliczeń stałoprzecinkowych (350)
- Funkcje rozwiązujące równania macierzowe (355)
- Elementarz arytmetyki zmiennoprzecinkowej z wykorzystaniem koprocesora (357)
- Architektura jednostki zmiennoprzecinkowej (358)
- Stos jednostki zmiennoprzecinkowej (359)
- Zestaw instrukcji jednostki FPU (361)
- Klasyczny tryb adresowania operandów (364)
- Tryb adresowania operandów z odwołaniem do pamięci (364)
- Tryb adresowania operandów z odwołaniem do rejestru (365)
- Adresowanie operandów ze zdjęciem operandu ze stosu (365)
- Przykłady zastosowania instrukcji jednostki FPU (366)
- Instrukcje FLD (366)
- Instrukcje FST (367)
- Instrukcje FADD (368)
- Instrukcje FSUB (371)
- Instrukcje FMUL (372)
- Instrukcje FDIV (373)
- Stosowanie modułu matematycznego - uwagi (374)
- Nowy szablon aplikacji (375)
- Słowo o optymalizacji modułu (375)
- Podsumowanie (376)
Rozdział 6. Wprowadzenie do grafiki 3D (377)
- Filozofia silnika 3D (377)
- Struktura silnika gry 3D (378)
- Silnik 3D (378)
- Silnik gry (379)
- System sterowania grą i gry sieciowej (379)
- System animacji (379)
- Wykrywanie kolizji i system nawigacji (384)
- Moduł fizyki (384)
- System sztucznej inteligencji (386)
- Baza modeli 3D i grafiki (387)
- Układy współrzędnych trójwymiarowych (388)
- Współrzędne modelu (lokalne) (389)
- Współrzędne świata gry (392)
- Współrzędne kamery (396)
- Ostateczna reprezentacja świata 3D za pomocą współrzędnych kamery (404)
- Usuwanie ukrytych obiektów (powierzchni) i przycinanie (405)
- Współrzędne perspektywy (411)
- Zakończenie potoku - współrzędne ekranowe (422)
- Podstawowe struktury danych 3D (430)
- Reprezentacje danych opisujących wielokąty w grafice 3D (431)
- Definiowanie wielokątów (433)
- Definiowanie obiektów (439)
- Reprezentowanie światów (443)
- Narzędzia 3D (443)
- Animacja i dane o ruchu (445)
- Ładowanie danych ze źródeł zewnętrznych (446)
- Pliki PLG (446)
- Pliki NFF (449)
- Pliki 3D Studio (452)
- Pliki COB firmy Caligari (459)
- Pliki .X Microsoft DirectX (461)
- Formaty plików 3D - podsumowanie (461)
- Proste przekształcenia i animacja (462)
- Przesunięcie w przestrzeni (462)
- Obrót w przestrzeni (463)
- Zmiana kształtu (465)
- Podsumowanie potoku 3D (466)
- Typy silników 3D (467)
- Silniki przestrzeni kosmicznej (468)
- Silniki terenu (468)
- Silniki pomieszczeń zamkniętych (470)
- Ray casting i silniki wokselowe (471)
- Silniki hybrydowe (472)
- Integracja całości w ostateczną postać silnika (472)
- Podsumowanie (473)
Rozdział 7. Renderowanie światów szkieletowych w 3D (475)
- Ogólna architektura silnika szkieletowego (475)
- Struktury danych i potok 3D (476)
- Główna lista wielokątów (479)
- Nowe moduły programowe (482)
- Piszemy program ładujący pliki 3D (482)
- Program ładujący pliki PLG (PLX) (485)
- Budowanie potoku 3D (491)
- Ogólne funkcje przekształcające (491)
- Przekształcenie współrzędnych lokalnych na współrzędne świata 3D (497)
- Eulerowski model kamery (500)
- Model kamery UVN (503)
- Przekształcenie współrzędnych świata na współrzędne kamery (515)
- Usuwanie obiektów (519)
- Usuwanie ścian zwróconych tyłem (523)
- Przekształcenie współrzędnych kamery na współrzędne perspektywy (526)
- Przekształcenie współrzędnych perspektywy na współrzędne ekranowe (530)
- Połączone przekształcenie do współrzędnych perspektywy i współrzędnych ekranowych (535)
- Renderowanie świata 3D (538)
- Rzut oka na potok 3D (538)
- Programy demonstracyjne 3D (542)
- Pojedynczy trójkąt 3D - DEMOII7_1.CPP|EXE (542)
- Szkielet sześcianu 3D - DEMOII7_2.CPP|EXE (545)
- Szkielet sześcianu 3D z usuwaniem ścian zwróconych tyłem - DEMOII7_3.CPP|EXE (548)
- Czołg 3D - DEMOII7_4.CPP|EXE (550)
- Czołgi 3D i latająca kamera - DEMOII7_5.CPP|EXE (553)
- Wycieczka po świecie gry a la Battle Zone - DEMOII7_6.CPP|EXE (554)
- Podsumowanie (559)
Część III Podstawy renderowania 3D (561)
Rozdział 8. Modelowanie brył i proste oświetlenie (563)
- Proste modele oświetlenia w grafice komputerowej (564)
- Modele kolorów i materiały (566)
- Typy świateł (574)
- Oświetlanie i rasteryzacja trójkątów (582)
- Przygotowania do implementacji oświetlenia (586)
- Definiowanie materiałów (587)
- Definiowanie świateł (591)
- Cieniowanie w praktyce (596)
- Cieniowanie w trybie 16-bitowym (596)
- Cieniowanie w trybie 8-bitowym (597)
- Sprawny model RGB w trybach 8-bitowych (597)
- Model z uproszczonym natężeniem dla trybów 8-bitowych (601)
- Cieniowanie jednorodne (605)
- Cieniowanie płaskie (607)
- Cieniowanie płaskie w trybie 8-bitowym (622)
- Wstęp do cieniowania Gourauda (624)
- Wstęp do cieniowania Phonga (626)
- Sortowanie względem głębokości i algorytm malarza (627)
- Praca z nowymi formatami plików (632)
- Klasa parsera (632)
- Interpretacja funkcji pomocniczych (635)
- Format ASCII programu 3D Studio Max (.ASC) (638)
- Format ASCII programu trueSpace (.COB) (641)
- Przegląd formatu binarnego .MD2 z gry Quake II (650)
- Przegląd narzędzi do modelowania 3D (651)
- Podsumowanie (654)
Rozdział 9. Interpolacyjne techniki cieniowania i afiniczne mapowanie tekstur (655)
- Nowe funkcje silnika T3D (655)
- Ulepszanie struktur danych i budowy silnika T3D (657)
- Nowe definicje (657)
- Nowe struktury matematyczne (660)
- Makra pomocnicze (661)
- Dodatkowe elementy umożliwiające reprezentację danych siatki 3D (662)
- Aktualizacja struktur obiektów i listy renderowania (668)
- Przegląd funkcji i prototypów (672)
- Nowe wersje procedur ładujących obiekty (680)
- Aktualizacja starego dobrego czytnika .PLG (.PLX) (680)
- Aktualizacja czytnika formatu .ASC z 3D Studio Max (691)
- Aktualizacja czytnika .COB firmy Caligari (692)
- Powtórka z rasteryzacji wielokątów (697)
- Rasteryzacja trójkąta (697)
- Konwencja wypełniania (702)
- Przycinanie (704)
- Nowe funkcje kreślące trójkąty (706)
- Zabiegi optymalizacyjne (710)
- Implementacja cieniowania Gourauda (712)
- Cieniowanie Gourauda bez oświetlenia (713)
- Uzupełnianie procedury cieniowania Gourauda o oświetlanie wierzchołków (723)
- Podstawy teorii próbkowania (732)
- Próbkowanie w jednym wymiarze (733)
- Interpolacja dwuliniowa (735)
- Interpolacja u i v (737)
- Implementacja afinicznego mapowania tekstur (739)
- Uwzględnienie tekstur w module oświetlenia i rasteryzacji (742)
- Dodawanie oświetlenia do funkcji renderującej tekstury w trybie 16-bitowym (742)
- Podsumowanie strategii optymalizacyjnych dla trybów 8- i 16-bitowych (748)
- Tabele wyszukiwania (748)
- Spójność wierzchołków siatki (749)
- Buforowanie (749)
- Instrukcje SIMD (749)
- Programy demonstracyjne (750)
- Raiders 3D II (751)
- Podsumowanie (754)
Rozdział 10. Przycinanie scen 3D (755)
- Przycinanie scen 3D - wprowadzenie (755)
- Przycinanie w przestrzeni obiektu (755)
- Przycinanie w obszarze obrazu sceny (759)
- Omówienie algorytmów przycinania (760)
- Przycinanie - podstawy (761)
- Algorytm Cohena-Sutherlanda (766)
- Algorytm Cyrusa-Becka (Lianga-Barskiego) (768)
- Algorytm Weilera-Athertona (771)
- Przycinanie - dodatkowe źródła informacji (774)
- Przycinanie do ostrosłupa widzenia - przykład implementacji (775)
- Potok przekształceń geometrycznych i nowe struktury danych (776)
- Dodawanie przycinania do silnika graficznego (777)
- Zabawa w terenie (799)
- Funkcja generowania terenu (800)
- Generowanie mapy wysokości (809)
- Rajd łazikiem terenowym (810)
- Podsumowanie (814)
Rozdział 11. Buforowanie odległości a widoczność powierzchni (815)
- Bufory odległości i identyfikowanie widocznych powierzchni - wprowadzenie (815)
- Bufor Z (818)
- Trudności implementacji bufora Z (820)
- Przykład buforowania odległości (820)
- Obliczanie wartości Z piksela z równania płaszczyzny (822)
- Interpolacja współrzędnej Z (824)
- Problemy buforowania Z i buforowanie odwrotności Z (826)
- Przykładowa interpolacja Z i odwrotności Z (827)
- Tworzenie systemu z buforem głębokości (830)
- Dodawanie obsługi bufora Z do funkcji rasteryzacji (833)
- Optymalizacje bufora odległości (845)
- Oszczędzanie pamięci (846)
- Rzadsze czyszczenie bufora (846)
- Buforowanie mieszane (848)
- Bufory odległości - problemy (849)
- Programy demonstrujące działanie buforów Z (849)
- Program 1.: Obrazowanie zawartości bufora Z (849)
- Program 2.: Wodny rajd (851)
- Podsumowanie (857)
Część IV Zaawansowane techniki renderowania 3D (859)
Rozdział 12. Zaawansowane metody teksturowania (861)
- Teksturowanie - podejście drugie (861)
- Nowe struktury w pliku nagłówkowym (862)
- Podstawa funkcji rasteryzacji (869)
- Przyjęcie formatu stałoprzecinkowego (870)
- Nowe funkcje rasteryzacji bez buforowania Z (870)
- Nowe funkcje rasteryzacji z buforowaniem Z (873)
- Teksturowanie z cieniowaniem Gourauda (875)
- Przezroczystość i łączenie alfa (882)
- Łączenie alfa z wykorzystaniem tablic przeglądowych (883)
- Niezależne definiowanie łączenia alfa dla poszczególnych obiektów (895)
- Łączenie alfa w module generowania terenu (901)
- Teksturowanie z korektą perspektywiczną i buforowanie odwrotności Z (904)
- Matematyczne podstawy teksturowania z korektą perspektywiczną (905)
- Dodawanie do rasteryzatorów buforowania odwrotności Z (913)
- Implementacja teksturowania poprawnego perspektywicznie (921)
- Implementacja teksturowania częściowo poprawnego perspektywicznie (925)
- Aproksymacja kwadratowa w teksturowaniu perspektywicznym (931)
- Optymalizacja teksturowania - teksturowanie hybrydowe (936)
- Dwuliniowe filtrowanie tekstur (938)
- Filtrowanie trzyliniowe tekstur i mipmapowanie (943)
- Wprowadzenie do analizy Fouriera i efektu aliasingu (944)
- Tworzenie szeregu tekstur mipmapowania (949)
- Wybór poziomu teksturowania mip (958)
- Filtrowanie trzyliniowe (964)
- Wyświetlanie i teksturowanie wieloprzebiegowe (965)
- Zaawansowane teksturowanie w jednym wywołaniu (966)
- Nowy kontekst renderowania (967)
- Wypełnianie struktury kontekstu renderowania (969)
- Funkcja zbiorcza rasteryzacji (971)
- Podsumowanie (979)
Rozdział 13. Podział przestrzenny i algorytmy określania widoczności (981)
- Nowy moduł silnika graficznego (981)
- Podział przestrzenny i określanie widoczności powierzchni - wprowadzenie (982)
- Binarny podział przestrzeni (BSP) (986)
- Binarny podział przestrzenny płaszczyznami równoległymi do osi układu współrzędnych (988)
- Binarny podział przestrzenny płaszczyznami arbitralnymi (988)
- Binarny podział przestrzenny płaszczyznami wyznaczanymi przez płaszczyzny wielokątów (989)
- Wyświetlanie (odwiedzanie) węzłów drzewa BSP (993)
- Struktury danych i funkcje obsługujące drzewa BSP (995)
- Tworzenie drzewa BSP (997)
- Strategie podziału (1001)
- Przeglądanie i wyświetlanie węzłów drzewa BSP (1010)
- Wpasowanie drzew BSP do potoku renderowania (1019)
- Edytor poziomu wykorzystujący drzewa BSP (1021)
- Ograniczenia drzew BSP (1032)
- Minimalizacja nadmiarowości odrysowywania z wykorzystaniem drzew BSP (1033)
- Wykorzystanie drzew BSP do redukowania sceny (1035)
- Wykorzystanie drzew BSP do wykrywania kolizji (1045)
- Integracja drzew BSP ze standardowymi funkcjami rasteryzacji (1045)
- Zbiory powierzchni potencjalnie widocznych (1052)
- Zastosowania zbiorów PVS (1053)
- Możliwe sposoby kodowania zbiorów potencjalnej widoczności (1055)
- Wyznaczanie zbiorów PVS (1057)
- Portale (1059)
- Hierarchie brył otaczających i drzewa oktalne (1063)
- Sposób użycia drzewa hierarchii BHV (1065)
- Wydajność w czasie rzeczywistym (1065)
- Strategie budowy hierarchii BHV (1067)
- Implementacja hierarchii BHV (1069)
- Drzewa oktalne (1076)
- Eliminowanie powierzchni zasłoniętych (1078)
- Bryły zasłaniające (1079)
- Wybór obiektów zasłaniających (1080)
- Hybrydowa metoda wyboru obiektów zasłaniających (1081)
- Podsumowanie (1081)
Rozdział 14. Cienie, oświetlenie i sekrety id (1083)
- Nowy moduł silnika gry (1083)
- Wprowadzenie i plan gry (1083)
- Uproszczone zasady fizyki cieni (1084)
- Droga fotonów i wyliczanie intensywności światła (1085)
- Symulowanie cieni za pomocą rzutowanych obrazów i billboardów (1088)
- Implementowanie rasteryzatorów z obsługą przezroczystości (1090)
- Nowa biblioteka (1092)
- Proste cienie (1094)
- Skalowanie cieni (1096)
- Śledzenie położenia źródła światła (1100)
- Końcowe uwagi na temat tworzenia symulowanych cieni (1105)
- Tworzenie cieni poprzez rzutowanie na płaszczyznę siatki obiektu (1105)
- Wzory przekształceń wektorowych dla potrzeb rzutowania (1106)
- Optymalizowanie cieni rzutowanych na płaszczyznę (1110)
- Wprowadzenie do mapowania oświetlenia i przechowywania powierzchni w pamięci podręcznej (1110)
- Przechowywanie powierzchni w pamięci podręcznej (1113)
- Generowanie map oświetlenia (1114)
- Implementowanie mapera oświetlenia (1115)
- Mapowanie ciemności (1118)
- Efekty specjalne z użyciem map oświetlenia (1120)
- Optymalizowanie kodu mapowania oświetlenia (1120)
- Łącząc wszystko w jedną całość (1121)
- Podsumowanie (1121)
Część V Zaawansowane problemy animacji, modelowanie zjawisk fizycznych i optymalizacja (1123)
Rozdział 15. Animowanie postaci, programowanie ruchu i wykrywanie kolizji (1125)
- Nowy moduł silnika gry (1125)
- Wprowadzenie do animacji trójwymiarowej (1126)
- Format .MD2 stosowany w grze Quake II (1126)
- Nagłówek pliku .MD2 (1129)
- Ładowanie plików .MD2 gry Quake II (1138)
- Animowanie plików .MD2 (1147)
- Proste zasady animacji bez modeli bohaterów (1158)
- Rotacja w ruchu i ruch w wyniku translacji (1158)
- Złożone ruchy parametryczne i ruch po krzywej (1161)
- Wykorzystywanie skryptów do programowania ruchu (1162)
- Wykrywanie kolizji w przestrzeni trójwymiarowej (1164)
- Ograniczające sfery i walce (1165)
- Wykorzystywanie struktur danych do przyśpieszania wykrywania kolizji (1166)
- Poruszanie się po powierzchni terenu (1167)
- Podsumowanie (1168)
Rozdział 16. Techniki optymalizacji kodu (1169)
- Wprowadzenie do technik optymalizacyjnych (1169)
- Profilowanie kodu za pomocą kompilatora Microsoft Visual C++ i programu VTune Intela (1170)
- Profilowanie przy pomocy kompilatora Visual C++ (1171)
- Analizowanie danych profilowania (1173)
- Optymalizowanie kodu za pomocą programu VTune (1174)
- Korzystanie z kompilatora C++ firmy Intel (1182)
- Ściąganie kompilatora optymalizacyjnego Intela (1182)
- Korzystanie z kompilatora (1183)
- Korzystanie z opcji optymalizacyjnych kompilatora (1184)
- Ręczne wybieranie różnych kompilatorów dla różnych plików źródłowych (1185)
- Strategie optymalizacyjne (1185)
- Przykład programowania instrukcji SIMD w mechanizmie SSE (1185)
- Podstawy architektury SIMD (1187)
- Jak naprawdę wygląda korzystanie z instrukcji SIMD (1188)
- Klasa wektorów trójwymiarowych przystosowana do instrukcji SIMD (1199)
- Kilka podstawowych trików optymalizacyjnych (1205)
- Trik 1. Pozbywanie się funkcji _ftol() (1205)
- Trik 2. Ustawianie słowa kontrolującego FPU (1206)
- Trik 3. Szybkie zerowanie liczb zmiennoprzecinkowych (1207)
- Trik 4. Szybkie wyciąganie pierwiastków kwadratowych (1207)
- Trik 5. Uproszczone wyliczanie arcustangens (1207)
- Trik 6: Zwiększanie wartości wskaźnika (1208)
- Trik 7. Wyjmowanie instrukcji if z pętli (1209)
- Trik 8. Rozgałęzianie potoków instrukcji (1209)
- Trik 9. Wyrównywanie danych (1210)
- Trik 10. Wywoływanie wszystkich krótkich funkcji w miejscu (1210)
- Literatura (1210)
- Podsumowanie (1210)
Dodatki (1211)
Dodatek A Zawartość CD-ROM-u (1213)
Dodatek B Instalowanie DirectX i korzystanie z kompilatora Visual C/C++ (1215)
- Instalowanie DirectX (1215)
- Korzystanie z kompilatora Visual C/C++ (1216)
- Kilka praktycznych porad związanych z kompilacją (1216)
Dodatek C Trygonometria i wektory (1219)
- Trygonometria (1219)
- Wektory (1222)
- Długość wektora (1223)
- Normalizacja (1223)
- Mnożenie wektora przez skalar (1223)
- Dodawanie wektorów (1224)
- Odejmowanie wektorów (1225)
- Iloczyn skalarny wektorów (1225)
- Iloczyn wektorowy wektorów (1227)
- Wektor zerowy (1228)
- Wektory pozycji (1228)
- Wektory jako liniowe kombinacje wektorów jednostkowych (1229)
Dodatek D Krótkie kompendium języka C++ (1231)
- Czym język C++ różni się od C (1231)
- Minimum tego co trzeba wiedzieć o C++ (1233)
- Nowe typy, słowa kluczowe i konwencje (1234)
- Komentarze (1234)
- Stałe (1234)
- Zmienne referencyjne (1234)
- Tworzenie zmiennych w dowolnym miejscu kodu (1235)
- Zarządzanie pamięcią (1236)
- Strumienie wejścia i wyjścia (1236)
- Klasy (1238)
- Całkiem nowy typ struktur (1238)
- Przykład prostej klasy (1239)
- Publiczne a prywatne (1240)
- Funkcje składowe klasy (metody) (1240)
- Konstruktory i destruktory (1242)
- Pisanie konstruktora (1243)
- Pisanie destruktora (1244)
- Operator ustalania zakresu (1246)
- Pisanie funkcji składowych klasy poza zakresem klasy (1246)
- Przeciążanie operatorów i funkcji (1247)
- Podstawy korzystania z szablonów (1249)
- Wprowadzenie do obsługi wyjątków (1250)
- Komponenty składające się na obsługę wyjątków (1251)
- Podsumowanie (1254)
Dodatek E Przydatne adresy internetowe (1255)
- Witryny poświęcone programowaniu gier i nowinkom programistycznym (1255)
- Witryny, z których można ściągać użyteczne materiały i programy (1256)
- Silniki 2D i 3D (1256)
- Książki poświęcone programowaniu gier komputerowych (1257)
- Strony Microsoftu poświęcone interfejsowi DirectX (1257)
- Grupy dyskusyjne Usenetu (1257)
- Najnowsze wiadomości z branży: Blues News (1258)
- Magazyny komputerowe poświęcone projektowaniu gier (1258)
- Dodatkowe materiały do gry Quake (1258)
- Darmowe modele i tekstury (1258)
- Twórcy witryn poświęconych grom komputerowym (1258)
Dodatek F Tablica znaków ASCII (1259)
Skorowidz (1267)