Perełki programowania gier. Vademecum profesjonalisty. Tom 3

22
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG ONLINE Pere³ki programowania gier. Vademecum profesjonalisty. Tom 3 Autor: Dante Treglia T³umaczenie: Rafa³ Joñca ISBN: 83-7361-111-8 Tytu³ orygina³u: Game Programming Gems 3 Format: B5, stron: stron: 728+8 stron kolorowej wk³adki 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 programici gier. Na koñcu ka¿dego rozdzia³u znajduje siê bibliografia, która pozwala rozszerzyæ wiadomoci o prezentowanym temacie. Jeli jeste zaawansowanym programist¹, dziêki tej ksi¹¿ce zaoszczêdzisz mnóstwo czasu. Autorzy spêdzili ca³e miesi¹ce wymylaj¹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 • Dwiêk Jeli marzysz o karierze w przemyle gier komputerowych, musisz mieæ tê ksi¹¿kê. Informacje z pierwszej rêki s¹ zawsze najcenniejsze, a tylko takie informacje znajdziesz w tej ksi¹¿ce.

description

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ękJeśli marzysz o karierze w przemyśle gier komputerowych, musisz mieć tę książkę. Informacje z pierwszej ręki są zawsze najcenniejsze, a tylko takie informacje znajdziesz w tej książce.

Transcript of Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Page 1: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Wydawnictwo Helion

ul. Chopina 6

44-100 Gliwice

tel. (32)230-98-63

e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

Pere³ki programowaniagier. Vademecumprofesjonalisty. Tom 3Autor: Dante Treglia

T³umaczenie: Rafa³ Joñca

ISBN: 83-7361-111-8

Tytu³ orygina³u: Game Programming Gems 3

Format: B5, stron: stron: 728+8 stron kolorowej wk³adki

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

Je�li marzysz o karierze w przemy�le gier komputerowych, musisz mieæ tê ksi¹¿kê.

Informacje z pierwszej rêki s¹ zawsze najcenniejsze, a tylko takie informacje znajdziesz

w tej ksi¹¿ce.

Page 2: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

�������������������� �������������������������������������������������������������������������������������� �

��������� ������������������������������������������������������������������������������������������� �

������������������������������������������������������������������������������������������������� ��

������������ ������ � ����������������������������������������������������������������������� ��

Część I ��������������� � ��������������������������������������������������������������

������������������������������������������������������������������������������������������������ !�

Rozdział 1.1 "���������������������#���� ���������������������������������������������������� !�Koncepcje harmonogramowania ........................................................................................48Prosty system harmonogramowania ...................................................................................51Zwiększanie złożoności ......................................................................................................53Podsumowanie....................................................................................................................55Bibliografia .........................................................................................................................56

Rozdział 1.2 �����$�����������������%&'������������(���� ������������������������������� ��Etapy tworzenia gry............................................................................................................57Projekt szkieletu gry ...........................................................................................................59Implementacja szkieletu gry ...............................................................................................62Kod źródłowy .....................................................................................................................65Bibliografia .........................................................................................................................67

Rozdział 1.3 )�$���������%������* ��������������������������������������������������������������������������� +,Uwaga .................................................................................................................................69Sztuczka 1. — zamiana wyliczeń na tekst..........................................................................70Sztuczka 2. — stałe z reprezentacji binarnych w trakcie kompilacji .................................71Sztuczka 3. — stosowanie opisowych komentarzy w asercjach ........................................72Sztuczka 4. — asercje w trakcie kompilacji .......................................................................72Sztuczka 5. — określanie liczby elementów tablicy ..........................................................73Sztuczka 6. — Zamiana __LINE__ na tekst ......................................................................73Sztuczka 7. — zabezpieczenie się przed pętlami nieskończonymi ....................................74Sztuczka 8. — niewielkie, wyspecjalizowane języki .........................................................75Sztuczka 9. — upraszczanie interfejsu klasy......................................................................76Podsumowanie....................................................................................................................79Bibliografia .........................................................................................................................79

Rozdział 1.4 -����������������&'��������'%������$�.�����$���������������� / Młodość i wiedza................................................................................................................81Sedno sprawy......................................................................................................................82Szczegóły............................................................................................................................83

Page 3: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

4 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Skrypty................................................................................................................................85Sieć .....................................................................................................................................85Podsumowanie....................................................................................................................86Bibliografia .........................................................................................................................86

Rozdział 1.5 0��$����������1����(���%&'�����'2����'2 ������������������������������ /�Korzystanie z rozwiązania..................................................................................................88Uchwyt................................................................................................................................88Inteligentny wskaźnik.........................................................................................................89Podsumowanie....................................................................................................................91Bibliografia .........................................................................................................................91

Rozdział 1.6 3$���������45 ����������������������������������������������������������������������������������������� ,6Przykład ..............................................................................................................................93Podstawy alokatorów..........................................................................................................94Wymagania stawiane alokatorowi......................................................................................94Domyślny obiekt alokatora.................................................................................................98Pisanie własnego alokatora.................................................................................................99Sposoby wykorzystania ....................................................................................................100Dane stanu alokatora.........................................................................................................101Zalecenia...........................................................................................................................101Szczegóły implementacji ..................................................................................................102Podsumowanie..................................................................................................................102Bibliografia .......................................................................................................................102

Rozdział 1.7 )��������������7 ������������������������������������������������������������������������������� 86Dlaczego to jest takie trudne?...........................................................................................103Klasa SAVEMGR.............................................................................................................104Klasa SAVEOBJ...............................................................................................................104Typy danych i rozszerzenia ..............................................................................................105Przysłanianie domyślnych funkcji ....................................................................................106Prosty przykład .................................................................................................................106Podsumowanie..................................................................................................................107

Rozdział 1.8 ������'���%���������������'��'2�$��� ��������������������������������������� 8,Implementacja...................................................................................................................109Komentarz do implementacji............................................................................................111Podsumowanie..................................................................................................................113

Rozdział 1.9 9(��������%&�� ��$�'�(���������'�����'2 �������������������������� �Dlaczego warto powodować zawieszenia programu? ......................................................115Czy nasz program obsługuje wyjątki liczb zmiennoprzecinkowych?..............................116Rodzaje wyjątków ............................................................................................................116Kod ...................................................................................................................................117Usuwanie błędów powodujących wyjątki zmiennoprzecinkowe .....................................118Podsumowanie..................................................................................................................118

Rozdział 1.10 :����������%����������������������'&�%������;<5 �������������� ,Gra to obiekty ...................................................................................................................119Klasy poruszają się… jak skały........................................................................................122Współpraca i iteracja ........................................................................................................124Zagadnienia implementacyjne ..........................................................................................126Podsumowanie..................................................................................................................127Bibliografia .......................................................................................................................128

Page 4: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 5

Rozdział 1.11 ;.�'�����������5�=���>�''����������������$�� �����'2 ������ �,Lex ....................................................................................................................................130Yacc ..................................................................................................................................130Zalety i wady ....................................................................................................................131Współpraca Yacca z Leksem............................................................................................131Pliki danych w podsystemach gry ....................................................................................131Integracja Leksa i Yacca z eksporterami danych .............................................................133Przykład ............................................................................................................................134Podsumowanie..................................................................................................................137Dostępność narzędzi Flex i Bison.....................................................................................137Bibliografia .......................................................................................................................137

Rozdział 1.12 4��������������$�������?��������� ���������������������������������������������� 6,Potencjał rynku .................................................................................................................139Najważniejsze są podstawy — ekran i wejście ................................................................140Zbiory znaków..................................................................................................................143Zagadnienia związane z projektem i interfejsem..............................................................145Lokalizacja........................................................................................................................148Planowanie i projektowanie..............................................................................................150Testowanie........................................................................................................................151Podsumowanie..................................................................................................................154Bibliografia .......................................................................................................................154

Rozdział 1.13 ��%?'�����������%���.���������'��������'����������$�������6@ ������������������������������������������������������������������������������������������� ��Implementacja interfejsu użytkownika.............................................................................157Określanie elementów interfejsu użytkownika.................................................................158Zagadnienia związane z lokalizacją..................................................................................160System wejścia..................................................................................................................161Mysz i joystick..................................................................................................................162Rola interfejsu użytkownika w walce z opóźnieniami..........................................................162Podsumowanie..................................................................................................................163Bibliografia .......................................................................................................................164

Rozdział 1.14 @�( �������$��A����� %������������������������������������������������� +�Projektowanie menu kołowego.........................................................................................165Ewolucja i badania menu kołowego .................................................................................166Stosowanie menu kołowego .............................................................................................167Kierunek rozwoju .............................................................................................................172Poznajmy miasto SimCity ................................................................................................172Życie w domu z The Sims ................................................................................................172Podsumowanie..................................................................................................................175Bibliografia .......................................................................................................................176

Rozdział 1.15 :� ����������������������#�(���%&'������������'2 �������������� ��Opisy zasad.......................................................................................................................177Znacznik testowania .........................................................................................................178Plik konfiguracyjny ..........................................................................................................179Konfigurowalne znaczniki................................................................................................179Dzienniki zdarzeń .............................................................................................................179Sposób użycia ...................................................................................................................182Podsumowanie..................................................................................................................183Bibliografia .......................................................................................................................183

Page 5: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

6 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 1.16 ;������������ � ������������������������������������������������������������������������������� /�Zarządzanie informacją ....................................................................................................185Hierarchia systemu ...........................................................................................................186Interfejs dziennika ............................................................................................................189Budowanie usługi dziennika.............................................................................................191Podsumowanie..................................................................................................................194Bibliografia .......................................................................................................................194

Rozdział 1.17 "�����'2�'��������������$�%&'��������%&'�������� ������������������� ,�Drzewo profilowania ........................................................................................................196Sposób użycia ...................................................................................................................196Implementacja...................................................................................................................199Podsumowanie..................................................................................................................201Bibliografia .......................................................................................................................201

Część II ����������������������������������������������������������������������������������������

���������������������������������������������������������������������������������������������� �8�

Rozdział 2.1 ���(�������'%����������������$��$������� ����������� ��$�'�(������$�����'2 ���������������������������������������������� �8�Logarytm przy podstawie 2 dla liczb całkowitych ...........................................................207Maski bitów i generatory liczb losowych.........................................................................208Sposób działania funkcji...................................................................................................209Bibliografia .......................................................................................................................209

Rozdział 2.2 ��������������� �����������'2�������������������%���������� ��������������������������������������������������� � Problem.............................................................................................................................211Rozwiązanie — ułamki wektorowe..................................................................................215Korzystanie z ułamków wektorowych..............................................................................216Zakresy wartości ...............................................................................................................217Szczegóły implementacji ..................................................................................................218Podsumowanie..................................................................................................................220Bibliografia .......................................................................................................................220

Rozdział 2.3 3�������'%�����'%�������������'��'2����������������������������������� �� Pomiar błędu.....................................................................................................................221Sinus i cosinus ..................................................................................................................222Aproksymacja wielomianami ...........................................................................................229Uwagi na temat zbieżności ...............................................................................................234Podsumowanie..................................................................................................................235Bibliografia .......................................................................................................................235

Rozdział 2.4 :�����%���������� ������������������������������������������������������������������� �6�Kwaterniony .....................................................................................................................237Metoda trzech najmniejszych ...........................................................................................237Metoda biegunowa............................................................................................................238Implementacja...................................................................................................................239Wydajność ........................................................................................................................240Podsumowanie..................................................................................................................241Podziękowania..................................................................................................................241Bibliografia .......................................................................................................................241

Page 6: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 7

Rozdział 2.5 9����'����������������������B0:C ����������������������������������������� �!6Hierarchia kości ................................................................................................................243Cykliczne dochodzenie do współrzędnych.......................................................................244Ograniczanie obrotu..........................................................................................................246Wykonanie obrotu i zastosowanie ograniczeń .................................................................246Podsumowanie..................................................................................................................249Bibliografia .......................................................................................................................249

Rozdział 2.6 <���$������?������������'&������������� ���������������� �� Podstawy automatów komórkowych................................................................................252Drzewo ósemkowe............................................................................................................255Fizyka praktyczna.............................................................................................................255Model rdzenia przetwarzania............................................................................................256Powietrze ..........................................................................................................................257Woda.................................................................................................................................257Przepływ ...........................................................................................................................258Ciepło................................................................................................................................259Ogień.................................................................................................................................261Dynamiczna częstotliwość aktualizacji ............................................................................263Podsumowanie..................................................................................................................264Bibliografia .......................................................................................................................264

Rozdział 2.7 ��'2������'����������$�'%�'2������'��'2������������������������������ �+�Tarcie ................................................................................................................................267Metody numeryczne .........................................................................................................271Wzory dla przestrzeni trójwymiarowej ............................................................................276Zagadnienia geometryczne ...............................................................................................277Podsumowanie..................................................................................................................278Bibliografia .......................................................................................................................278

Część III������������ ���������������������������������������������������������������������

���������������������������������������������������������������������������������������������� �/

Rozdział 3.1 9����$���'%���'�����������'&���'2����-�*��������������������� �/6Omówienie architektury systemu GoCap.........................................................................283Nauka prowadzenia samochodu .......................................................................................285Uczenie zasad ...................................................................................................................289Podsumowanie..................................................................................................................291Bibliografia .......................................................................................................................291

Rozdział 3.2 D�����'%���(��������A������������������������%������������ ����������������������������������������������������������������������������� �,6Zacząć od starego podejścia .............................................................................................294By uzyskać nowe ..............................................................................................................295Dziel i rządź......................................................................................................................298Przechodzenie przez ścieżkę.............................................................................................302Rozszerzenie zagadnienia .................................................................................................306Podsumowanie..................................................................................................................307Bibliografia .......................................................................................................................308

Rozdział 3.3 3���������� �����#'���'2����������%&'������1���������'%� ���������������������������������������������� 68,Czym jest automat stanów? ..............................................................................................309Implementacja automatu stanów ......................................................................................311

Page 7: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

8 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Implementacja — klasa CFSM.........................................................................................313Korzystanie z klasy CFSM ...............................................................................................316Podsumowanie..................................................................................................................319Bibliografia .......................................................................................................................319

Rozdział 3.4 3�$���������������'2��4��A������������ ���������������������������������������� 6� Obszary .............................................................................................................................321Wielokąty wypukłe...........................................................................................................326Siła pudełka od zapałek ....................................................................................................329Punkty przyciągania..........................................................................................................332Przeprowadzanie analizy terenu .......................................................................................336Podsumowanie..................................................................................................................336Bibliografia .......................................................................................................................336

Rozdział 3.5 ���������$���������������#��$������ �����'��%����$���'%�E��(���� ��������#�������������������������������������������� 66�Wprowadzenie do systemu wyzwalania...........................................................................337System wyzwalania dla obiektów.....................................................................................338Definiowanie warunków...................................................................................................338Łączenie warunków logiką boolowską.............................................................................339Definiowanie odpowiedzi .................................................................................................340Obliczanie wyzwolenia.....................................................................................................341Pojedyncze strzały i czas przeładowania..........................................................................342Łączenie wyzwalania z licznikami i znacznikami............................................................342Systemy wyzwalania a języki skryptowe .........................................................................343Ograniczenia .....................................................................................................................344Podsumowanie..................................................................................................................345Bibliografia .......................................................................................................................345

Rozdział 3.6 )�%��������%(������%����������%������'����������$���������3F ����������������������������������������������������������������������������������� 6!�A*, ale bardziej ryzykownie .............................................................................................348Poprawianie niedoskonałej ścieżki ...................................................................................350Czas wystawienia i modelowanie wroga..........................................................................351Zagrożenia nie są statyczne ..............................................................................................353Poprawa uzyskiwanych ścieżek........................................................................................353Wydajność ........................................................................................................................354Wydajne testy widzialności i ostrzału ..............................................................................354Rozszerzone koszta A*.....................................................................................................356Program ASE....................................................................................................................357Podsumowanie..................................................................................................................357Bibliografia .......................................................................................................................357

Rozdział 3.7 ���(�����������($�'��#��$��������������'�%�'2 ��������������������� 6�,Przeszkody dynamiczne i statyczne..................................................................................359Siatki nawigacyjne............................................................................................................360Portale ...............................................................................................................................360Budowanie tablicy ............................................................................................................363Pozostałe zagadnienia dotyczące portali ..........................................................................365Reprezentacja postaci .......................................................................................................365Przeszkody dynamiczne....................................................................................................366Poruszanie się między przeszkodami statycznymi i dynamicznymi ................................369Dodatkowe uwagi dotyczące siatek nawigacyjnych.........................................................369Podsumowanie..................................................................................................................370

Page 8: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 9

Rozdział 3.8 ��( �����&�������������%�������������������������� �������� 6� Ruch pod kontrolą zderzeń ...............................................................................................371Model zderzeniowy dla znajdowania drogi ......................................................................372Podejście 1. Sztuczna inteligencja z tolerancją błędu ...........................................................372Podejście 2. Znajdowanie drogi w podzbiorze niezajętej przestrzeni ..............................375Podejście 3. Korzystanie ze znajdowania drogi w zderzeniach postaci ...........................377Implementacja ruchu wzdłuż ścieżki................................................................................378Podsumowanie..................................................................................................................380Bibliografia .......................................................................................................................381

Część IV ������ ������������������������������������������������������������������������������������� �

���������������������������������������������������������������������������������������������� 6/�

Rozdział 4.1 G$����'%����&'��#�����4������$�'���������������������������������������� 6/,Eliminacja połączeń typu T ..............................................................................................390Ponowna triangulacja........................................................................................................391Implementacja...................................................................................................................392Podsumowanie..................................................................................................................393

Rozdział 4.2 ���(�����($�'���������$�'2��$�� $�������?'������������������������� 6,�Normalne dla dowolnych siatek .......................................................................................395Normalne pól wysokości ..................................................................................................396Podsumowanie..................................................................................................................399Kod źródłowy ...................................................................................................................399Bibliografia .......................................................................................................................399

Rozdział 4.3 ���(��������$���$����� ������������������������������������������������������������������� !8 Definicje ...........................................................................................................................401Podejścia tradycyjne .........................................................................................................402Inne rozwiązania...............................................................................................................402Prostszy sposób.................................................................................................................402Inne zalety.........................................................................................................................403Jaką dokładność uzyskujemy?..........................................................................................403Podsumowanie..................................................................................................................403Bibliografia .......................................................................................................................404

Rozdział 4.4 ���(������������������������������������������������������������������������ !8�Problem widzialności........................................................................................................405Algorytm PLP...................................................................................................................406Algorytm cPLP .................................................................................................................407Zalety algorytmów............................................................................................................408Wyniki eksperymentów....................................................................................................408Podsumowanie..................................................................................................................409Bibliografia .......................................................................................................................410

Rozdział 4.5 4�������E������$���'%��������������� ���� %�&� ���������������� ! Paski trójkątów .................................................................................................................411Tworzenie pasków trójkątów............................................................................................413Optymalizacja ...................................................................................................................416Rendering..........................................................................................................................417Paski trójkątów przyjazne dla pamięci podręcznej...........................................................417Paski dla ciągłych poziomów szczegółowości .................................................................417Podsumowanie..................................................................................................................418Bibliografia .......................................................................................................................418

Page 9: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

10 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 4.6 9($�'�����������$������'2��(���� ��'�����$�����.��'2������� �����'2 ����������������������������������������������������� ! ,Poprzednie algorytmy.......................................................................................................419Algorytm...........................................................................................................................420Algorytm optymalizacji ....................................................................................................421Bibliografia .......................................................................................................................423

Rozdział 4.7 ��������������'2��������'%������'������������������������������������������� !��Sposoby podziału..............................................................................................................425Hierarchia kości i bufor akumulacji wierzchołków..........................................................430Optymalizacje ...................................................................................................................431Łączymy wszystko............................................................................................................433Kod źródłowy ...................................................................................................................435Podsumowanie..................................................................................................................435Bibliografia .......................................................................................................................435

Rozdział 4.8 ;������$����������'%����?'� ����������������������������������������������������� !6�Tło.....................................................................................................................................437Proste metody ...................................................................................................................438Dodawanie kości...............................................................................................................438Zmiana wag ......................................................................................................................439Łączymy wszystko i przyspieszamy działanie .................................................................443Podsumowanie..................................................................................................................445Bibliografia .......................................................................................................................445

Rozdział 4.9 ����#������������$����'������������������'�&���������������������� !!�Problem — przejście do dowolnego celu .........................................................................448Problem — płynne przejście między animacjami ............................................................449Rdzeń nowego rozwiązania — lokalne modyfikatory z niezależnymi stosunkami przejść.................................................................................451Zastosowanie — ruch do dowolnego celu........................................................................452Modyfikatory przemieszczenia.........................................................................................453Zastosowanie — przejścia ................................................................................................454Dodatkowe informacje......................................................................................................455Podsumowanie..................................................................................................................455Bibliografia .......................................................................................................................455

Rozdział 4.10 :���$��������������$�����2�����������'2��� � ����������������� !��Programowalny shader wierzchołków..............................................................................457Kompilator........................................................................................................................459Składniki kompilatora.......................................................................................................460Podsumowanie..................................................................................................................464Podziękowania..................................................................................................................464Bibliografia .......................................................................................................................464

Rozdział 4.11 �����������(�$$(���� � �������������������������������������������������������������������� !+�Macierze ...........................................................................................................................467Wierzchołki.......................................................................................................................468Mapowanie UV.................................................................................................................468Podsumowanie..................................................................................................................470

Rozdział 4.12 ����'������ %��������������������'��'2�������'2����� ����������� !� Przejście do trzeciego wymiaru ........................................................................................472Podsumowanie..................................................................................................................477Bibliografia .......................................................................................................................477

Page 10: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 11

Rozdział 4.13 ����$�'%����������������'&��������$�'2�������������������������� !�,Mapy normalnych.............................................................................................................479Opis procesu .....................................................................................................................480Przygotowanie danych......................................................................................................481Rzucanie promieni ............................................................................................................481Uzyskiwanie szczegółów..................................................................................................483Przetwarzanie końcowe ....................................................................................................483Często spotykane problemy..............................................................................................484Inne podejście ...................................................................................................................485Podsumowanie..................................................................................................................485Podziękowania..................................................................................................................485Bibliografia .......................................................................................................................486

Rozdział 4.14 <�����������'����E����$����'������?����$��������� ��������� !/�Tło.....................................................................................................................................487Taksonomia 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.................................................492Animowane cienie chmur .................................................................................................493Rozwiązanie bazujące na sekwencjach wideo..................................................................495Obiekty, które nie są terenem ...........................................................................................496Podsumowanie..................................................................................................................496Bibliografia .......................................................................................................................496

Rozdział 4.15 <�������?����$�����.���%&'��������?'���'2 ���������������������� !,,Fizyczne właściwości map sześciennych .........................................................................499Jak pobrać dane z mapy sześciennej lub umieścić je na niej............................................500Rendering map sześciennych............................................................................................501Kodowanie pokrywy chmur .............................................................................................502Kodowanie świateł na mapie sześciennej.........................................................................504Kodowanie świateł rozmytych na mapach sześciennych .................................................504Kodowanie cyklu dnia i nocy na mapie sześciennej ........................................................505Podsumowanie..................................................................................................................505Bibliografia .......................................................................................................................506

Rozdział 4.16 4��������������'�����$� ������������������������������������������������������������ �8�Parametry i procedury.......................................................................................................507Skupiamy się na grach ......................................................................................................508Akceleracja sprzętowa ......................................................................................................511Podsumowanie..................................................................................................................511Podziękowania..................................................................................................................512Bibliografia .......................................................................................................................513

Rozdział 4.17 ;���$���������� �������������������������������������������������������������������������������� � �Tekstury proceduralne ......................................................................................................515Inteligentne buforowanie tekstur ......................................................................................516Model łączeń.....................................................................................................................516Mapowanie warstw i przekształcenia ...............................................................................516Źródła i filtry warstw ........................................................................................................517Metody łączenia................................................................................................................518Wartości sterujące.............................................................................................................518Tekstury dynamiczne........................................................................................................519Skalowalność ....................................................................................................................519Łączenie wykonywane w procesorze czy karcie graficznej? ...........................................520Demo.................................................................................................................................521

Page 11: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

12 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Podsumowanie..................................................................................................................522Bibliografia .......................................................................................................................522

Rozdział 4.18 4��������%������($�'������$&�������($�'����'2��?����$�����$������$���������������������������������������������� ��6Oświetlenie z rozbłyskiem dla pikseli bez korzystania z mapy sześciennej w celu normalizacji (mapowanie n.h/h.h).......................................................................523Wykładnik rozbłysku dla pikseli na podstawie mapy (n.h)k ............................................525Opalizacja 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 .................530Podsumowanie..................................................................................................................531Bibliografia .......................................................................................................................531

Rozdział 4.19 ������������������%&'����'���������������$��'�������� �������������������������������������������������������������������������� �66Modele cieniowania..........................................................................................................533Model cieniowania bazujący na mikrofasetach................................................................534Cieniowanie NDF .............................................................................................................535Mapowanie nierówności w NDF......................................................................................537Rozszerzenia .....................................................................................................................538Podsumowanie..................................................................................................................538Bibliografia .......................................................................................................................538

Część V �!������" ��� �������������������������������������������������������������#�$

���������������������������������������������������������������������������������������������� �!6

Rozdział 5.1 <����$���'%��� 1��#������'2��4� ����������������������������������������������� �!�Blokowanie klatek a blokowanie zdarzeń ........................................................................545Synchronizacja czasu........................................................................................................549Podsumowanie..................................................................................................................551Bibliografia .......................................................................................................................552

Rozdział 5.2 ������ �����'������$������������'��������'����������������������������������� ��6Inne protokoły...................................................................................................................553Nasz protokół....................................................................................................................555Udoskonalanie ..................................................................................................................557Użyteczne moduły ............................................................................................................559Pułapki w grze StarTopia..................................................................................................560Przykładowa gra ...............................................................................................................562Podsumowanie..................................................................................................................562Bibliografia .......................................................................................................................562

Rozdział 5.3 G$����'�����'2�������������$�'%���$�������������&�$�'�(&����'��������������������������������������������������������������������� �+6Opis architektury ..............................................................................................................563Klasy pomocnicze.............................................................................................................564Klasy podstawowe............................................................................................................567Zarządcy i fabryki.............................................................................................................570Łączymy wszystko............................................................................................................572Podsumowanie..................................................................................................................574Bibliografia .......................................................................................................................574

Page 12: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 13

Rozdział 5.4 ���$���$������������������'����'2 ����������������������������������������������� ���Strategie zapewniające grę w pełni fair ............................................................................577Projektowanie skalowalnych serwerów............................................................................579Rozkład obciążenia...........................................................................................................584Optymalizacja ...................................................................................................................587Podsumowanie..................................................................................................................590Bibliografia .......................................................................................................................590

Rozdział 5.5 �����$���'%���(���� ��(���%&'�������($��'2����������������������������� �, Istniejące rozwiązania.......................................................................................................591Przenośność ......................................................................................................................593Klasa Serializer .................................................................................................................594Możliwe rozszerzenia i optymalizacje..............................................................................599Dalsze rozszerzanie możliwości .......................................................................................601Podsumowanie..................................................................................................................602Bibliografia .......................................................................................................................602

Rozdział 5.6 �����'������������������������������������������������������������������������������������ +86Standard IPSec..................................................................................................................603Założenia...........................................................................................................................604Związki bezpieczeństwa ...................................................................................................604Format pakietu ..................................................................................................................605Wysyłanie danych.............................................................................................................607Otrzymywanie danych ......................................................................................................608Przykładowa implementacja.............................................................................................610Interfejs CryptoAPI ..........................................................................................................611Wydajność ........................................................................................................................612Bezpieczeństwo ................................................................................................................613Podsumowanie..................................................................................................................613Bibliografia .......................................................................................................................613

Rozdział 5.7 D�������������$�'%�������������������'� ������������������������������������� + �Interfejs .............................................................................................................................615Monitoring sieci................................................................................................................616Symulacja połączeń TCP..................................................................................................617Symulacja połączeń UDP .................................................................................................617Symulacja przepustowości komputera .............................................................................618Podsumowanie..................................................................................................................618

Rozdział 5.8 4��������������$�����$�����'������������������@���'��$���/� ������������������������������������������������������� + ,Architektura systemu DirectPlay......................................................................................619Transmisja danych ............................................................................................................620Wywołania zwrotne ..........................................................................................................624Wysyłanie głosu za pomocą DirectPlay ...........................................................................627Źródła informacji ..............................................................................................................629

Rozdział 5.9 -��������'��'2�(�����������'2�����������?����������H�I��<�'���G����� ��������������������������������� +6 Charakterystyka sieci........................................................................................................632Środowisko Java Micro Edition........................................................................................633Obsługa sieci w J2ME ......................................................................................................633Ograniczenia protokołu HTTP .........................................................................................635Optymalizacja pakietów ...................................................................................................636

Page 13: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

14 Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Pobieranie obrazów z serwera ..........................................................................................637Podsumowanie..................................................................................................................638Bibliografia .......................................................................................................................639

Część VI %&�'��������������������������������������������������������������������������������������(�$

���������������������������������������������������������������������������������������������� +!6

Rozdział 6.1 :�����%���1�����������.�'���9���J��(�� ����������������������������������� +!�Kompresja psychoakustyczna...........................................................................................645Sposoby stosowania kompresji.........................................................................................647Przykłady kodu korzystającego z Ogg Vorbis..................................................................648Podsumowanie..................................................................................................................651Bibliografia .......................................................................................................................652

Rozdział 6.2 4�����������$����'�����?������������ %�������������������������� +�6Podstawowe koncepcje systemu dźwięku trójwymiarowego...........................................653Wydajne wykorzystanie systemu dźwięku.......................................................................654Implementacja...................................................................................................................656Podsumowanie..................................................................................................................657Materiały...........................................................................................................................657

Rozdział 6.3 �����������%�������������?'������� ���������� ���������������� +�,Problem.............................................................................................................................659Rozwiązanie......................................................................................................................660Implementacja...................................................................................................................663Podsumowanie..................................................................................................................664Bibliografia .......................................................................................................................664

Rozdział 6.4 :������������������������������$������������������������������� ++�Zasada działania filtrów cyfrowych..................................................................................665Filtry IIR a filtry FIR ........................................................................................................666Implementacja filtru dwukwadratowego ..........................................................................666Permutacja zmiennych......................................................................................................667Unikanie denormalizacji ...................................................................................................668Sterowanie filtrem ............................................................................................................668Obliczanie współczynników filtru....................................................................................668Filtr dolnoprzepustowy.....................................................................................................669Filtr górnoprzepustowy.....................................................................................................669Filtr pasmowoprzepustowy...............................................................................................670Szeregowe łączenie filtrów...............................................................................................670Równoległe łączenie filtrów .............................................................................................670Oprogramowanie ..............................................................................................................670Podsumowanie..................................................................................................................671Bibliografia .......................................................................................................................671

Rozdział 6.5 :�����������������������$�������$��������%���1������������� � ������������������������������������������������������ +�6Modelowanie głosu...........................................................................................................674Symulacja programowa ....................................................................................................675Zastępowanie strun głosowych.........................................................................................677Sterowanie ponowną syntezą............................................................................................678Zwiększenie głębi rozmówcy ...........................................................................................679Kodowanie danych ...........................................................................................................680Szybkość ...........................................................................................................................680

Page 14: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Spis treści 15

Eksperymenty ...................................................................................................................681Bibliografia .......................................................................................................................681

Rozdział 6.6 ����������'2����'����$�����.��'2��1���� � ��������������������������� +/6Algorytm przystawania liniowego....................................................................................683Rodzaje szumu..................................................................................................................684Przykłady ..........................................................................................................................685Generowanie odgłosów deszczu.......................................................................................686Podsumowanie..................................................................................................................689Bibliografia .......................................................................................................................690

Rozdział 6.7 ��������������1�����������'2���'���������'������������������������ +, Modułowe przetwarzanie dźwięku ...................................................................................691Proceduralna generacja dźwięku ......................................................................................692System Sphinx MMOS.....................................................................................................692Procesory ..........................................................................................................................693Opis pliku drogi ................................................................................................................693Zastosowania plików dróg dźwięku .................................................................................695Kod źródłowy ...................................................................................................................698Podsumowanie..................................................................................................................699Bibliografia .......................................................................................................................699

%�"�������������������������������������������������������������������������������������������������������$

)������?K������*@ ���������������������������������������������������������������������������� �86

��������� �������������������������������������������������������������������������������������������� �8�

Page 15: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 4.5

������������ ����������������������������������

����������������� �������

[email protected]

Obecnie, gdy istnieją wysokiej wydajności konsole do gier, paski trójkątów są stosowane

coraz częściej do reprezentacji i renderingu geometrii. W tym rozdziale zajmę się zagadnie-

niem generowania pasków trójkątów z dowolnych modeli trójwymiarowych. Po omówie-

niu algorytmu pasków trójkątów przedstawię zalety ich stosowania, a także błędy, które

mogą pojawić się przy ich kreowaniu. Następnie zajmę się sposobami ich przekazywania

do interfejsu programistycznego kart graficznych. Poza tym opiszę i poddam konstruk-

tywnej krytyce kilka innych algorytmów dotyczących trójkątów.

��������������

Pasek trójkątów to ciąg trójkątów połączonych ze sobą. Połączenie trójkątów umożliwia

buforowanie wierzchołków w karcie graficznej, a także ponowne wykorzystywanie współ-

dzielonych krawędzi trójkąta. Rysunek 4.5.1 przedstawia prosty pasek trójkątów ze współ-

dzielonymi krawędziami V2V3 i V3V4. Aby trójkąt mógł należeć do paska, musi mieć tę

samą grupę wygładzania i materiału, co pozostałe trójkąty. Grupa wygładzania to grupa

trójkątów posiadających tę samą normalną dla wierzchołków, a grupa materiału to grupa

trójkątów o takim samym oświetleniu i właściwościach tekstury.

��������

Paski trójkątów są stosowane od dłuższego czasu. Wcześniej do funkcji karty graficznej

jawnie wysyłało się położenie, normalną i kolor każdego wierzchołka. Ponieważ jednak dla

pasków trójkątów nie musimy przesyłać wierzchołków, które się powtarzają, zmniej-

szamy zapotrzebowanie na przepustowość magistrali. Teraz indeksowanie wierzchołków

zastąpiło wcześniejszy proces i stało się podstawową metodą przekazywania wielokątów

do karty graficznej. [Marselas00] sugeruje, że korzystanie z pasków trójkątów i indek-

sowania wierzchołków umożliwia uzyskanie stosunku wierzchołek-trójkąt wynoszącego

prawie 1:1. W ten sposób znacznie redukuje się ilość danych.

Page 16: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

412 Część IV � Grafika

�����������(A) Prosty pasek trójkątów z współdzielonymi krawędziami V2V3 i V3V4.(B) Kolejność trójkątów w pasku. Wierzchołki numerowane są naprzemiennie zgodnie z ruchemwskazówek zegara i przeciwnie do niego

Paski trójkątów będziemy generować z myślą o czterech celach:

�� Aby zminimalizować liczbę pasków trójkątów.

�� Aby zminimalizować liczbę powtarzających się wierzchołków.

�� Aby zminimalizować liczbę trójkątów swobodnych.

�� Aby zmaksymalizować wydajność buforowania wierzchołków.

Przedstawione cele zazwyczaj są ze sobą sprzeczne. Na przykład bardzo trudno jest wygene-

rować bardzo długi pasek trójkątów przyjazny dla buforu bez powtarzania znacznej

liczby wierzchołków. Czasem warto pozostawić niektóre trójkąty samym sobie, zamiast

starać się za wszelką cenę dołączyć je do paska, bo będzie to rozwiązanie bardziej wydajne.

Page 17: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 4.5 � Tworzenie, optymalizacja i rendering pasków trójkątów 413

���� ���

Korzystanie z pasków trójkątów zamiast niezależnych trójkątów umożliwia redukcję

zbędnych wierzchołków i ich indeksów. W zależności od sposobu traktowania pasków trój-

kątów przez sprzęt, możemy zaoszczędzić na danych wierzchołków, oświetleniu i prze-

kształceniach. Poza tym paski zdecydowanie bardziej efektywnie wykorzystują buforo-

wanie wierzchołków na karcie graficznej.

������������������������

Istnieje kilka opracowanych przez naukowców algorytmów tworzenia pasków trójkątów

i oczywiście każdy z nich ma swoje zalety i wady, jeśli chodzi o znajdowanie optymal-

nych pasków. [Evans96a] używa siatki bazującej na czworokątach, aby zoptymalizować

paski wewnątrz łat, natomiast [Hoppe99] stosuje podejście przyjazne dla buforów wierz-

chołków karty graficznej. Rozwiązanie, którym się zajmę, optymalizuje długość paska

trójkątów, aby zlikwidować narzut powodowany przez interfejs programistyczny grafiki.

Ponieważ niemożliwe jest osiągnięcie idealnego paska trójkątów dla każdej siatki, należy

wymyślić algorytm znajdowania najbardziej optymalnych pasków dla danego zestawu

danych. Zastosowany algorytm generuje paski o jak największej długości dla dowolnego

modelu trójwymiarowego złożonego z wielokątów. Generowanie pasków może się odby-

wać w aplikacji do kreowania modeli trójwymiarowych lub stanowić osobne narzędzie.

Naszym celem jest uzyskanie długich pasków, a następnie zapisanie ich w formacie uła-

twiającym ich rendering. Kolorowa wkładka 5. przedstawia przykładowy obraz dwóch

modeli po przeprowadzeniu podziału na paski trójkątów.

�������

Zanim przejdziemy do algorytmu tworzenia pasków trójkątów, musimy zdefiniować kilka

terminów. Aktywna krawędź to krawędź trójkąta wewnątrz paska, do której dodawane

są nowe trójkąty. Znajduje się ona między drugim a trzecim wierzchołkiem ostatniego

dodanego paska trójkątów. Pogrubiona krawędź z rysunku 4.5.2a przedstawia aktywną

krawędź, DE, do której zostanie dodany trójkąt z wierzchołkiem F. Zamiana używana

jest wtedy, gdy aktywna krawędź nie jest wyrównana z sąsiednim trójkątem dodawanym

do paska. Rysunek 4.5.2b przedstawia sytuację, w której aktywną krawędzią jest DE,

ale następny trójkąt jest dodawany do krawędzi CE. Aby dodać nowy trójkąt, wierzchołek

C musi zostać powtórzony, a następnie zamieniony z wierzchołkiem E. W ten sposób

zachowamy przemienność kierunku — zgodnie i przeciwnie do ruchu wskazówek zegara.

Ostatni termin, który zdefiniujemy, to obrócenie. Stosujemy go, gdy duplikujemy i zamie-

niamy dwa wierzchołki, aby dodać nowy (patrz rysunek 4.5.2c).

��� ����� �������� ��

Etap przygotowań dotyczy utworzenia metryki pozwalającej wykonać paski trójkątów

odpowiedniej jakości.

Page 18: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

414 Część IV � Grafika

��

��

����������Różne sposoby dodawania trójkątówdo paska.(A) Pasek z indeksem wierzchołkóww kolejności ABCDE i aktywnąkrawędzią DE. Ponieważ aktywnakrawędź dotyka nowego trójkąta,dodajemy po prostu wierzchołek Fna końcu paska. Nowy pasek składasię teraz z wierzchołków ABCDEF.(B) Pasek z indeksem wierzchołkóww kolejności ABCDE i aktywnąkrawędzią DE. Aby dodać wierzchołekF, musimy zduplikować C i zamienićz E, ponieważ nowy trójkąt nie stykasię z aktywną krawędzią. Nowy pasekskłada się teraz z wierzchołkówABCDCEF.(C) Przypadek, w którym zmieniamykolejność pierwszej powierzchni,by dopasować ją do drugiegotrójkąta jest istotny, jeśli chcemyzminimalizować powtarzanie sięwierzchołków. Jeśli pasek trójkątówzaczął się jako CAB, musielibyśmypowtórzyć B i C, aby dodaćwierzchołek D. Nowy pasek składasię z wierzchołków CABBCD.Jeśli aktywna krawędź nie styka sięz nowym trójkątem, musimy powtórzyćdwa wierzchołki

��

�� Znajdujemy trójkąt o najmniejszym polu. Nazwiemy go trójkątem początku. Aby

uniknąć słabego rozplanowania pasków, powinniśmy znaleźć 10 najmniejszych

trójkątów siatki i spośród nich wybrać najbardziej dogodny do rozpoczęcia obliczeń.

�� Wybieramy wierzchołek trójkąta początku lub obliczamy jego środek, który stanie

się pierwszym wierzchołkiem dla algorytmu pasków trójkątów.

�� Tworzymy środki wszystkich trójkątów. Możemy to łatwo wykonać, uśredniając

trzy wierzchołki każdego trójkąta (patrz równanie 4.5.1). C jest położeniem środka,

a V1, V2 i V3 to położenia wierzchołków trójkąta.

�� Dla każdego trójkąta obliczamy i przechowujemy odległość między wierzchołkiem

początku i środkiem.

C = (V1+V2+V3)/3,0 (4.5.1)

Page 19: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 4.5 � Tworzenie, optymalizacja i rendering pasków trójkątów 415

���� �����������

Po realizacji etapu przygotowań możemy rozpocząć generowanie pasków trójkątów. Po

dodaniu trójkąta siatki do paska oznaczamy taki trójkąt jako wykorzystany.

�� Zaznaczamy poprawny trójkąt. Będzie to pierwszy trójkąt paska.

�� Jeśli trójkąt ma sąsiadów, wybieramy spośród nich ten o najmniejszej odległości

i czynimy go aktualnym trójkątem. W przeciwnym razie kończymy tworzenie

paska i przechodzimy do kroku 6.

�� Zmieniamy kolejność wierzchołków pierwszego trójkąta w taki sposób, aby

dopasować aktywną krawędź do drugiego trójkąta. Drugiego trójkąta powinna

dotykać krawędź uzyskiwana między drugim i trzecim wierzchołkiem.

�� Pobieramy sąsiada aktualnego trójkąta, znajdując najbliższego sąsiada, którego

odległość została policzona w kroku 4. etapu przygotowań. Jeśli trójkąt nie jest

wyrównany do aktywnej krawędzi, musimy dokonać wstawienia wierzchołka

i zamiany, aby kontynuować pasek (patrz rysunek 4.5.2c).

�� Przechodzimy do kroku 2.

�� Sprawdzamy, czy pozostały jeszcze jakieś trójkąty niezwiązane z żadnym paskiem.

Jeśli tak, przechodzimy do kroku 1.

Pseudokod wysokiego poziomu dla algorytmu pasków przedstawia listing 4.5.1.

���������� Pseudokod wysokiego poziomu dla algorytmu tworzenia pasków trójkątów

���������������� ������ ���

��������� ���� ��������������� ������������� ����������� �������������� ��!���� � �"�#���$���� ��%� �!���� � �����&���'��� & ������#��(���!���� � �

��������)���� �� ���� *�+��������������� �����������������������'��� ��������������&���'��� ,������ #���!�(���!���� � -�� ��!���� � �

������������ �� ���������������������!��$����. � �������� ���

��������������� �/�������������� �'�������� ���0�������� +�� ���������� � ����� ���������1�����*����2����&��� ��!���� � $����������&��� ��!��$����������3���������� ��*��� �����'��'���������4

Po zakończeniu algorytmu tworzenia uzyskujemy N pasków trójkątów. Każdy z pasków

należy do tej samej grupy wygładzania i ma ten sam identyfikator materiału. Po umiesz-

czeniu pasków w pamięci możemy je zapisać w formacie wymaganym przez grę.

Page 20: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

416 Część IV � Grafika

����������� ���� ���� �

W drugim przebiegu analizujemy paski, by sprawdzić, czy któreś z punktów tworzących

jeden pasek mogą zostać połączone z innym paskiem. Analizę zaczynamy od określenia

wszystkich krawędzi początkowych i końcowych każdego paska trójkątów, a także indek-

sów powierzchni związanych z każdą z nich. Następnie dokonujemy porównania tych

krawędzi z takimi samymi krawędziami innych pasków. Jeśli znajdziemy dopasowanie,

wtedy dwa paski trójkątów są analizowane, by dokonać połączenia (patrz rysunek 4.5.2).

W większości sytuacji w trakcie połączenia będziemy musieli powtórzyć niektóre wierz-

chołki. Najprostszy przypadek ma miejsce wtedy, gdy znajdziemy dopasowanie paska

do pojedynczego trójkąta. W większości sytuacji możemy tak zmienić kolejność wierz-

chołków, by dodać ten trójkąt do paska.

��� ���������

Ponieważ paski trójkątów tworzymy po to, by zwiększyć wydajność, optymalizacja to

kluczowy element algorytmu generowania pasków. Optymalizację można przeprowadzić

na kilku etapach procesu tworzenia pasków trójkątów — podczas początkowego prze-

twarzania, generowania i wykorzystywania w czasie rzeczywistym.

���������������������

� Tworzymy siatki z tylko kilkoma grupami wygładzania (więcej niż jedna normalna

na wierzchołek).

� Ograniczamy liczbę grup materiałów dla modelu.

� Optymalizujemy model w taki sposób, by powierzchnie wielokątów nie miały

naprzemiennie ułożonych grup materiałów lub wygładzania, ponieważ ograniczyłoby

to długość pasków trójkątów.

� Sortujemy paski względem grup materiałów przed ich przekazaniem do karty

graficznej.

� Eliminujemy wszystkie niepotrzebne powierzchnie. Taka powierzchnia istnieje,

gdy dwa (lub więcej) z trzech położeń wierzchołków są równoważne. Może to

powodować błędy w renderingu, gdy będą stosowane paski.

!�������

� Osobne trójkąty umieszczamy w jednym poindeksowanym buforze.

� Staramy się połączyć paski, których trójkąty początku i końca znajdują

się obok siebie.

� Powinniśmy znać rozmiar pamięci podręcznej sprzętu, by odpowiednio

ją wykorzystać.

Page 21: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

Rozdział 4.5 � Tworzenie, optymalizacja i rendering pasków trójkątów 417

"������������#����

� Używamy wywołań interfejsu dotyczących poindeksowanej tablicy zamiast

wywołań dotyczących kolejnych wierzchołków.

� Redukujemy zmiany stanów i dynamicznych współrzędnych tekstur.

���������

Większość interfejsów programistycznych kart graficznych obsługuje paski trójkątów.

Istnieje kilka formatów, w jakich możemy przesyłać paski do karty graficznej. Jeden z nich

wymaga wysłania danych wierzchołka dla każdego wierzchołka paska. Jest to bardzo

kosztowne, ponieważ wiele wierzchołków jest zduplikowanych z racji współdzielonych

krawędzi wewnątrz paska. Inny format wykorzystuje przesyłanie pasków w postaci indek-

sów. Oznacza to, że najpierw przekazujemy dane wierzchołków dla danego fragmentu

wraz z indeksami, a następnie korzystamy już tylko z indeksów. Problem polega na tym,

że w większości kart graficznych w jednym wywołaniu funkcji możemy określić tylko

jeden trójkąt. Niektóre systemy umożliwiają jednak przekazanie całych pasków w jed-

nym wywołaniu, jeśli stosuje się dodatkowe wierzchołki. W [Neider99] i [Microsoft00]

znajdują się listy funkcji, z których należy korzystać w przypadku pasków trójkątów.

Biblioteka OpenGL wykorzystuje typ ���������������, a biblioteka Direct3D firmy

Microsoft — typ � ���������������.

����������������� �������������������������

Inne algorytmy tworzenia pasków trójkątów starają się być przyjazne dla pamięci podręcz-

nej, ograniczając chybienia w buforze wierzchołków karty graficznej [Hoppe99]. [Nvidia00]

stosuje specjalny schemat rozkładu wierzchołków, który wykonuje się po utworzeniu

pasków trójkątów. Zaletą tego podejścia jest to, że możemy zoptymalizować trójkąty

w sposób korzystny dla karty graficznej. Oczywiście rozwiązanie to ma także wadę —

optymalizacja będzie dotyczyła danego rodzaju kart graficznych i może dać efekt odwrotny

od zamierzonego w przypadku innych kart.

������������� ������������������������

Tworzenie pasków trójkątów dla siatek o ciągłym poziomie szczegółowości nie jest proste.

Usunięcie jednego wierzchołka lub powierzchni z siatki może mieć znaczny wpływ na

paski, jeśli były tworzone dla siatki o wysokiej rozdzielczości. Istnieje kilka sposobów

rozwiązania tego problemu. Pierwszy polega na wygenerowaniu pasków dla każdej

rozdzielczości modelu. Jest to bardzo niepraktyczne i może znacznie zwiększyć zapo-

trzebowanie na pamięć. Drugie rozwiązanie to tworzenie pasków „w locie” i przecho-

wywanie ich w pamięci aż do zmiany rozdzielczości siatki. Wybieramy drugi sposób

i stawiamy jeden warunek: trójkąty mogą być dodawane tylko do sąsiadów aktywnej

krawędzi lub możliwa jest zamiana. Jeśli nie istnieją sąsiedzi, kończymy pasek. Musimy

tak zoptymalizować strukturę danych, by móc szybko wyszukiwać i sprawdzać sąsiadów.

Page 22: Perełki programowania gier. Vademecum profesjonalisty. Tom 3

418 Część IV � Grafika

Zaletą tego rozwiązania jest możliwość stosowania pasków dla siatek generowanych

dynamicznie — niestety zwiększy to zapotrzebowanie na pamięć.

���� �������

W tym rozdziale przedstawiłem, jak tworzyć i optymalizować paski trójkątów dla gier. Gdy

zamierzamy renderować siatki, paski zapewniają zwiększenie szybkości w porównaniu

z przekazywaniem zwykłych list trójkątów. Zachęcam do sprawdzenia wersji oryginalnej

i z paskami, aby samemu przekonać się o występujących między nimi różnicach.

!�"������#��

[Evans96a] Evans Francine, Steven Skiena i Amitabh Varshney: „Optimizing Triangle Strips for

Fast Rendering”, Visualization ’96 Proceedings, IEEE, 1996, strony 319 – 326.

[Evans96b] Evans Francine, Steven Skiena i Amitabh Varshney: „Completing Sequential Trian-

gulations Is Hard”, sprawozdanie techniczne, Department of Computer Science, State University

of New York at Stony Brook, 1996.

[Hoppe99] Hoppe Hughes: „Optimization of Mesh Locality for Transparent Vertex Caching”,

Computer Graphics Proceedings, SIGGRAPH 1999, strony 269 – 276.

[Isenburg00] Isenburg Martin: „Triangle Strip Compression”, Graphics Interface, strony 197 – 204,

2000.

[Marselas02] Marselas Herb: „Optymalizacja dostarczania wierzchołków w OpenGL”, Perełki

programowania gier. Vademecum profesjonalisty. Tom 1, Wydawnictwo Helion, 2002.

[Microsoft00] Microsoft DirectX 8.0 Software Development Kit, dostępne pod adresem http://www.

msdn.microsoft.com/downloads, 2000.

[Neider99] Neider Jackie i inni: OpenGL Programming Guide, Version 1.2, Addison Wesley, 1999.

[Nvidia00] Nvidia NvTriStrip v1.1., dostępne pod adresem http://developer.nvidia.com/view.asp?IO=

nvtristrip_v1_1, 2000.