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.
22
Embed
KATALOG KSI EK esjonalisty Tom 3 - pdf.helion.pl · To ju¿ trzecia czê æ „Pere³ek programowania gier. Vademecum profesjonalisty”, wspania³ego zbioru opisów rozmaitych technik
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
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.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ł 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.5 9����'����������������������B0:C ����������������������������������������� �!6Hierarchia kości ................................................................................................................243Cykliczne dochodzenie do współrzędnych.......................................................................244Ograniczanie obrotu..........................................................................................................246Wykonanie obrotu i zastosowanie ograniczeń .................................................................246Podsumowanie..................................................................................................................249Bibliografia .......................................................................................................................249
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 ������ ������������������������������������������������������������������������������������� �
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.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.12 ����'������ %��������������������'��'2�������'2����� ����������� !� Przejście do trzeciego wymiaru ........................................................................................472Podsumowanie..................................................................................................................477Bibliografia .......................................................................................................................477
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
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 �!������" ��� �������������������������������������������������������������#�$
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 %&�'��������������������������������������������������������������������������������������(�$
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