Upload
wydawnictwo-helion
View
988
Download
7
Embed Size (px)
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.
Citation preview
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.
�������������������� �������������������������������������������������������������������������������������� �
��������� ������������������������������������������������������������������������������������������� �
������������������������������������������������������������������������������������������������� ��
������������ ������ � ����������������������������������������������������������������������� ��
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
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
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
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
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
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
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
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
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
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
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
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
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�
Rozdział 4.5
������������ ����������������������������������
����������������� �������
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.
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.
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.
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)
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ę.
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ć.
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.
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.