
To już trzecia część "Perełek programowania gier. Vademecum profesjonalisty", wspaniałego zbioru opisów rozmaitych technik programistycznych używanych przez profesjonalnych programistów gier. Twórcy gier i oprogramowania graficznego z firm takich jak Nintendo, ATI, Electronic Arts, Sony Computer Entertainment, Intel, Creative Labs, NVidia, Microsoft, IBM czy Westwood Studios - najlepsi z najlepszych - przedstawiają swoje ulubione algorytmy i sztuczki pozwalające tworzyć gry na światowym poziomie.
Dla początkujących niniejsza książka to prawdziwy przewodnik po wyzwaniach, którym muszą stawić czoło programiści gier. Na końcu każdego rozdziału znajduje się bibliografia, która pozwala rozszerzyć wiadomości o prezentowanym temacie. Jeśli jesteś zaawansowanym programistą, dzięki tej książce zaoszczędzisz mnóstwo czasu. Autorzy spędzili całe miesiące wymyślając, pisząc kod i ilustrując wybrane zagadnienie, więc nie musimy być ekspertami w danym temacie, aby go zrozumieć. Więcej czasu pozostanie na tworzenie wspaniałych funkcji dla własnych gier.
Książka podzielona jest na 6 części:- Programowanie ogólne
- Matematyka
- Sztuczna inteligencja
- Grafika
- Sieć i gry dla wielu graczy
- Dźwięk
Słowo wstępne (17)Przedmowa (21)
Rysunek z okładki (25)
Biografie Współautorów (27)
Część I Programowanie ogólne (43)
Wprowadzenie (45)
Rozdział 1.1 Harmonogramowanie zdarzeń gry (47)
- Koncepcje harmonogramowania (48)
- Prosty system harmonogramowania (51)
- Zwiększanie złożoności (53)
- Podsumowanie (55)
- Bibliografia (56)
- Etapy tworzenia gry (57)
- Projekt szkieletu gry (59)
- Implementacja szkieletu gry (62)
- Kod źródłowy (65)
- Bibliografia (67)
- Uwaga (69)
- Sztuczka 1. - zamiana wyliczeń na tekst (70)
- Sztuczka 2. - stałe z reprezentacji binarnych w trakcie kompilacji (71)
- Sztuczka 3. - stosowanie opisowych komentarzy w asercjach (72)
- Sztuczka 4. - asercje w trakcie kompilacji (72)
- Sztuczka 5. - określanie liczby elementów tablicy (73)
- Sztuczka 6. - Zamiana __LINE__ na tekst (73)
- Sztuczka 7. - zabezpieczenie się przed pętlami nieskończonymi (74)
- Sztuczka 8. - niewielkie, wyspecjalizowane języki (75)
- Sztuczka 9. - upraszczanie interfejsu klasy (76)
- Podsumowanie (79)
- Bibliografia (79)
- Młodość i wiedza (81)
- Sedno sprawy (82)
- Szczegóły (83)
- Skrypty (85)
- Sieć (85)
- Podsumowanie (86)
- Bibliografia (86)
- Korzystanie z rozwiązania (88)
- Uchwyt (88)
- Inteligentny wskaźnik (89)
- Podsumowanie (91)
- Bibliografia (91)
- Przykład (93)
- Podstawy alokatorów (94)
- Wymagania stawiane alokatorowi (94)
- Domyślny obiekt alokatora (98)
- Pisanie własnego alokatora (99)
- Sposoby wykorzystania (100)
- Dane stanu alokatora (101)
- Zalecenia (101)
- Szczegóły implementacji (102)
- Podsumowanie (102)
- Bibliografia (102)
- Dlaczego to jest takie trudne? (103)
- Klasa SAVEMGR (104)
- Klasa SAVEOBJ (104)
- Typy danych i rozszerzenia (105)
- Przysłanianie domyślnych funkcji (106)
- Prosty przykład (106)
- Podsumowanie (107)
- Implementacja (109)
- Komentarz do implementacji (111)
- Podsumowanie (113)
- Dlaczego warto powodować zawieszenia programu? (115)
- Czy nasz program obsługuje wyjątki liczb zmiennoprzecinkowych? (116)
- Rodzaje wyjątków (116)
- Kod (117)
- Usuwanie błędów powodujących wyjątki zmiennoprzecinkowe (118)
- Podsumowanie (118)
- Gra to obiekty (119)
- Klasy poruszają się... jak skały (122)
- Współpraca i iteracja (124)
- Zagadnienia implementacyjne (126)
- Podsumowanie (127)
- Bibliografia (128)
- Lex (130)
- Yacc (130)
- Zalety i wady (131)
- Współpraca Yacca z Leksem (131)
- Pliki danych w podsystemach gry (131)
- Integracja Leksa i Yacca z eksporterami danych (133)
- Przykład (134)
- Podsumowanie (137)
- Dostępność narzędzi Flex i Bison (137)
- Bibliografia (137)
- Potencjał rynku (139)
- Najważniejsze są podstawy - ekran i wejście (140)
- Zbiory znaków (143)
- Zagadnienia związane z projektem i interfejsem (145)
- Lokalizacja (148)
- Planowanie i projektowanie (150)
- Testowanie (151)
- Podsumowanie (154)
- Bibliografia (154)
- Implementacja interfejsu użytkownika (157)
- Określanie elementów interfejsu użytkownika (158)
- Zagadnienia związane z lokalizacją (160)
- System wejścia (161)
- Mysz i joystick (162)
- Rola interfejsu użytkownika w walce z opóźnieniami (162)
- Podsumowanie (163)
- Bibliografia (164)
- Projektowanie menu kołowego (165)
- Ewolucja i badania menu kołowego (166)
- Stosowanie menu kołowego (167)
- Kierunek rozwoju (172)
- Poznajmy miasto SimCity (172)
- Życie w domu z The Sims (172)
- Podsumowanie (175)
- Bibliografia (176)
- Opisy zasad (177)
- Znacznik testowania (178)
- Plik konfiguracyjny (179)
- Konfigurowalne znaczniki (179)
- Dzienniki zdarzeń (179)
- Sposób użycia (182)
- Podsumowanie (183)
- Bibliografia (183)
- Zarządzanie informacją (185)
- Hierarchia systemu (186)
- Interfejs dziennika (189)
- Budowanie usługi dziennika (191)
- Podsumowanie (194)
- Bibliografia (194)
- Drzewo profilowania (196)
- Sposób użycia (196)
- Implementacja (199)
- Podsumowanie (201)
- Bibliografia (201)
Wprowadzenie (205)
Rozdział 2.1 Szybkie funkcje o podstawie 2 dla logarytmów i generatorów liczb pseudolosowych (207)
- Logarytm przy podstawie 2 dla liczb całkowitych (207)
- Maski bitów i generatory liczb losowych (208)
- Sposób działania funkcji (209)
- Bibliografia (209)
- Problem (211)
- Rozwiązanie - ułamki wektorowe (215)
- Korzystanie z ułamków wektorowych (216)
- Zakresy wartości (217)
- Szczegóły implementacji (218)
- Podsumowanie (220)
- Bibliografia (220)
- Pomiar błędu (221)
- Sinus i cosinus (222)
- Aproksymacja wielomianami (229)
- Uwagi na temat zbieżności (234)
- Podsumowanie (235)
- Bibliografia (235)
- Kwaterniony (237)
- Metoda trzech najmniejszych (237)
- Metoda biegunowa (238)
- Implementacja (239)
- Wydajność (240)
- Podsumowanie (241)
- Podziękowania (241)
- Bibliografia (241)
- Hierarchia kości (243)
- Cykliczne dochodzenie do współrzędnych (244)
- Ograniczanie obrotu (246)
- Wykonanie obrotu i zastosowanie ograniczeń (246)
- Podsumowanie (249)
- Bibliografia (249)
- Podstawy automatów komórkowych (252)
- Drzewo ósemkowe (255)
- Fizyka praktyczna (255)
- Model rdzenia przetwarzania (256)
- Powietrze (257)
- Woda (257)
- Przepływ (258)
- Ciepło (259)
- Ogień (261)
- Dynamiczna częstotliwość aktualizacji (263)
- Podsumowanie (264)
- Bibliografia (264)
- Tarcie (267)
- Metody numeryczne (271)
- Wzory dla przestrzeni trójwymiarowej (276)
- Zagadnienia geometryczne (277)
- Podsumowanie (278)
- Bibliografia (278)
Wprowadzenie (281)
Rozdział 3.1 Optymalizacja uczenia za pomocą techniki GoCap (283)
- Omówienie architektury systemu GoCap (283)
- Nauka prowadzenia samochodu (285)
- Uczenie zasad (289)
- Podsumowanie (291)
- Bibliografia (291)
- Zacząć od starego podejścia (294)
- By uzyskać nowe (295)
- Dziel i rządź (298)
- Przechodzenie przez ścieżkę (302)
- Rozszerzenie zagadnienia (306)
- Podsumowanie (307)
- Bibliografia (308)
- Czym jest automat stanów? (309)
- Implementacja automatu stanów (311)
- Implementacja - klasa CFSM (313)
- Korzystanie z klasy CFSM (316)
- Podsumowanie (319)
- Bibliografia (319)
- Obszary (321)
- Wielokąty wypukłe (326)
- Siła pudełka od zapałek (329)
- Punkty przyciągania (332)
- Przeprowadzanie analizy terenu (336)
- Podsumowanie (336)
- Bibliografia (336)
- Wprowadzenie do systemu wyzwalania (337)
- System wyzwalania dla obiektów (338)
- Definiowanie warunków (338)
- Łączenie warunków logiką boolowską (339)
- Definiowanie odpowiedzi (340)
- Obliczanie wyzwolenia (341)
- Pojedyncze strzały i czas przeładowania (342)
- Łączenie wyzwalania z licznikami i znacznikami (342)
- Systemy wyzwalania a języki skryptowe (343)
- Ograniczenia (344)
- Podsumowanie (345)
- Bibliografia (345)
- A*, ale bardziej ryzykownie (348)
- Poprawianie niedoskonałej ścieżki (350)
- Czas wystawienia i modelowanie wroga (351)
- Zagrożenia nie są statyczne (353)
- Poprawa uzyskiwanych ścieżek (353)
- Wydajność (354)
- Wydajne testy widzialności i ostrzału (354)
- Rozszerzone koszta A* (356)
- Program ASE (357)
- Podsumowanie (357)
- Bibliografia (357)
- Przeszkody dynamiczne i statyczne (359)
- Siatki nawigacyjne (360)
- Portale (360)
- Budowanie tablicy (363)
- Pozostałe zagadnienia dotyczące portali (365)
- Reprezentacja postaci (365)
- Przeszkody dynamiczne (366)
- Poruszanie się między przeszkodami statycznymi i dynamicznymi (369)
- Dodatkowe uwagi dotyczące siatek nawigacyjnych (369)
- Podsumowanie (370)
- Ruch pod kontrolą zderzeń (371)
- Model zderzeniowy dla znajdowania drogi (372)
- Podejście 1. Sztuczna inteligencja z tolerancją błędu (372)
- Podejście 2. Znajdowanie drogi w podzbiorze niezajętej przestrzeni (375)
- Podejście 3. Korzystanie ze znajdowania drogi w zderzeniach postaci (377)
- Implementacja ruchu wzdłuż ścieżki (378)
- Podsumowanie (380)
- Bibliografia (381)
Wprowadzenie (385)
Rozdział 4.1 Eliminacja połączeń typu T i przeliczanie siatek (389)
- Eliminacja połączeń typu T (390)
- Ponowna triangulacja (391)
- Implementacja (392)
- Podsumowanie (393)
- Normalne dla dowolnych siatek (395)
- Normalne pól wysokości (396)
- Podsumowanie (399)
- Kod źródłowy (399)
- Bibliografia (399)
- Definicje (401)
- Podejścia tradycyjne (402)
- Inne rozwiązania (402)
- Prostszy sposób (402)
- Inne zalety (403)
- Jaką dokładność uzyskujemy? (403)
- Podsumowanie (403)
- Bibliografia (404)
- Problem widzialności (405)
- Algorytm PLP (406)
- Algorytm cPLP (407)
- Zalety algorytmów (408)
- Wyniki eksperymentów (408)
- Podsumowanie (409)
- Bibliografia (410)
- Paski trójkątów (411)
- Tworzenie pasków trójkątów (413)
- Optymalizacja (416)
- Rendering (417)
- Paski trójkątów przyjazne dla pamięci podręcznej (417)
- Paski dla ciągłych poziomów szczegółowości (417)
- Podsumowanie (418)
- Bibliografia (418)
- Poprzednie algorytmy (419)
- Algorytm (420)
- Algorytm optymalizacji (421)
- Bibliografia (423)
- Sposoby podziału (425)
- Hierarchia kości i bufor akumulacji wierzchołków (430)
- Optymalizacje (431)
- Łączymy wszystko (433)
- Kod źródłowy (435)
- Podsumowanie (435)
- Bibliografia (435)
- Tło (437)
- Proste metody (438)
- Dodawanie kości (438)
- Zmiana wag (439)
- Łączymy wszystko i przyspieszamy działanie (443)
- Podsumowanie (445)
- Bibliografia (445)
- Problem - przejście do dowolnego celu (448)
- Problem - płynne przejście między animacjami (449)
- Rdzeń nowego rozwiązania - lokalne modyfikatory
z niezależnymi stosunkami przejść (451)
- Zastosowanie - ruch do dowolnego celu (452)
- Modyfikatory przemieszczenia (453)
- Zastosowanie - przejścia (454)
- Dodatkowe informacje (455)
- Podsumowanie (455)
- Bibliografia (455)
- Programowalny shader wierzchołków (457)
- Kompilator (459)
- Składniki kompilatora (460)
- Podsumowanie (464)
- Podziękowania (464)
- Bibliografia (464)
- Macierze (467)
- Wierzchołki (468)
- Mapowanie UV (468)
- Podsumowanie (470)
- Przejście do trzeciego wymiaru (472)
- Podsumowanie (477)
- Bibliografia (477)
- Mapy normalnych (479)
- Opis procesu (480)
- Przygotowanie danych (481)
- Rzucanie promieni (481)
- Uzyskiwanie szczegółów (483)
- Przetwarzanie końcowe (483)
- Często spotykane problemy (484)
- Inne podejście (485)
- Podsumowanie (485)
- Podziękowania (485)
- Bibliografia (486)
- Tło (487)
- Taksonomia rozwiązań (489)
- Światło słoneczne - kąt horyzontu, elipsy cienia i wielomianowe mapy tekstur (489)
- Światło z nieba - łaty i aproksymacja metodą radiosity (492)
- Animowane cienie chmur (493)
- Rozwiązanie bazujące na sekwencjach wideo (495)
- Obiekty, które nie są terenem (496)
- Podsumowanie (496)
- Bibliografia (496)
- Fizyczne właściwości map sześciennych (499)
- Jak pobrać dane z mapy sześciennej lub umieścić je na niej (500)
- Rendering map sześciennych (501)
- Kodowanie pokrywy chmur (502)
- Kodowanie świateł na mapie sześciennej (504)
- Kodowanie świateł rozmytych na mapach sześciennych (504)
- Kodowanie cyklu dnia i nocy na mapie sześciennej (505)
- Podsumowanie (505)
- Bibliografia (506)
- Parametry i procedury (507)
- Skupiamy się na grach (508)
- Akceleracja sprzętowa (511)
- Podsumowanie (511)
- Podziękowania (512)
- Bibliografia (513)
- Tekstury proceduralne (515)
- Inteligentne buforowanie tekstur (516)
- Model łączeń (516)
- Mapowanie warstw i przekształcenia (516)
- Źródła i filtry warstw (517)
- Metody łączenia (518)
- Wartości sterujące (518)
- Tekstury dynamiczne (519)
- Skalowalność (519)
- Łączenie wykonywane w procesorze czy karcie graficznej? (520)
- Demo (521)
- Podsumowanie (522)
- Bibliografia (522)
- Oświetlenie z rozbłyskiem dla pikseli bez korzystania z mapy sześciennej
w celu normalizacji (mapowanie n.h/h.h) (523)
- Wykładnik rozbłysku dla pikseli na podstawie mapy (n.h)k (525)
- Opalizacja przesunięcia kolorów (528)
- Światła punktowe z poprawnym zanikiem oparte na pikselach (529)
- Światła kierunkowe i reflektory z poprawnym zanikiem oparte na pikselach (530)
- Podsumowanie (531)
- Bibliografia (531)
- Modele cieniowania (533)
- Model cieniowania bazujący na mikrofasetach (534)
- Cieniowanie NDF (535)
- Mapowanie nierówności w NDF (537)
- Rozszerzenia (538)
- Podsumowanie (538)
- Bibliografia (538)
Wprowadzenie (543)
Rozdział 5.1 Minimalizacja opóźnień w grach RTS (545)
- Blokowanie klatek a blokowanie zdarzeń (545)
- Synchronizacja czasu (549)
- Podsumowanie (551)
- Bibliografia (552)
- Inne protokoły (553)
- Nasz protokół (555)
- Udoskonalanie (557)
- Użyteczne moduły (559)
- Pułapki w grze StarTopia (560)
- Przykładowa gra (562)
- Podsumowanie (562)
- Bibliografia (562)
- Opis architektury (563)
- Klasy pomocnicze (564)
- Klasy podstawowe (567)
- Zarządcy i fabryki (570)
- Łączymy wszystko (572)
- Podsumowanie (574)
- Bibliografia (574)
- Strategie zapewniające grę w pełni fair (577)
- Projektowanie skalowalnych serwerów (579)
- Rozkład obciążenia (584)
- Optymalizacja (587)
- Podsumowanie (590)
- Bibliografia (590)
- Istniejące rozwiązania (591)
- Przenośność (593)
- Klasa Serializer (594)
- Możliwe rozszerzenia i optymalizacje (599)
- Dalsze rozszerzanie możliwości (601)
- Podsumowanie (602)
- Bibliografia (602)
- Standard IPSec (603)
- Założenia (604)
- Związki bezpieczeństwa (604)
- Format pakietu (605)
- Wysyłanie danych (607)
- Otrzymywanie danych (608)
- Przykładowa implementacja (610)
- Interfejs CryptoAPI (611)
- Wydajność (612)
- Bezpieczeństwo (613)
- Podsumowanie (613)
- Bibliografia (613)
- Interfejs (615)
- Monitoring sieci (616)
- Symulacja połączeń TCP (617)
- Symulacja połączeń UDP (617)
- Symulacja przepustowości komputera (618)
- Podsumowanie (618)
- Architektura systemu DirectPlay (619)
- Transmisja danych (620)
- Wywołania zwrotne (624)
- Wysyłanie głosu za pomocą DirectPlay (627)
- Źródła informacji (629)
- Charakterystyka sieci (632)
- Środowisko Java Micro Edition (633)
- Obsługa sieci w J2ME (633)
- Ograniczenia protokołu HTTP (635)
- Optymalizacja pakietów (636)
- Pobieranie obrazów z serwera (637)
- Podsumowanie (638)
- Bibliografia (639)
Wprowadzenie (643)
Rozdział 6.1 Kompresja dźwięku przy użyciu Ogg Vorbis (645)
- Kompresja psychoakustyczna (645)
- Sposoby stosowania kompresji (647)
- Przykłady kodu korzystającego z Ogg Vorbis (648)
- Podsumowanie (651)
- Bibliografia (652)
- Podstawowe koncepcje systemu dźwięku trójwymiarowego (653)
- Wydajne wykorzystanie systemu dźwięku (654)
- Implementacja (656)
- Podsumowanie (657)
- Materiały (657)
- Problem (659)
- Rozwiązanie (660)
- Implementacja (663)
- Podsumowanie (664)
- Bibliografia (664)
- Zasada działania filtrów cyfrowych (665)
- Filtry IIR a filtry FIR (666)
- Implementacja filtru dwukwadratowego (666)
- Permutacja zmiennych (667)
- Unikanie denormalizacji (668)
- Sterowanie filtrem (668)
- Obliczanie współczynników filtru (668)
- Filtr dolnoprzepustowy (669)
- Filtr górnoprzepustowy (669)
- Filtr pasmowoprzepustowy (670)
- Szeregowe łączenie filtrów (670)
- Równoległe łączenie filtrów (670)
- Oprogramowanie (670)
- Podsumowanie (671)
- Bibliografia (671)
- Modelowanie głosu (674)
- Symulacja programowa (675)
- Zastępowanie strun głosowych (677)
- Sterowanie ponowną syntezą (678)
- Zwiększenie głębi rozmówcy (679)
- Kodowanie danych (680)
- Szybkość (680)
- Eksperymenty (681)
- Bibliografia (681)
- Algorytm przystawania liniowego (683)
- Rodzaje szumu (684)
- Przykłady (685)
- Generowanie odgłosów deszczu (686)
- Podsumowanie (689)
- Bibliografia (690)
- Modułowe przetwarzanie dźwięku (691)
- Proceduralna generacja dźwięku (692)
- System Sphinx MMOS (692)
- Procesory (693)
- Opis pliku drogi (693)
- Zastosowania plików dróg dźwięku (695)
- Kod źródłowy (698)
- Podsumowanie (699)
- Bibliografia (699)
Zawartość płyty CD (703)
Skorowidz (705)