SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£
                                         Triki najlepszych
                           SPIS TRE CI   programistów gier 3D.
           KATALOG KSI¥¯EK
                                         Vademecum profesjonalisty
                                         Autor: Andre LaMothe
                      KATALOG ONLINE     T³umaczenie: Adam Bochenek (wstêp, rozdz. 1 –3),
                                         Jaros³aw Dobrzañski (rozdz. 6 – 9), S³awomir
       ZAMÓW DRUKOWANY KATALOG           Dzieniszewski (rozdz. 14 – 16, dod. A – F)
                                         ISBN: 83-7361-267-X
                                         Tytu³ orygina³u: Tricks of the 3D Game Programming Gurus
              TWÓJ KOSZYK                Format: B5, stron: 1312

                    DODAJ DO KOSZYKA             Swoje triki zdradz¹ Ci prawdziwi guru ze wiata twórców gier
                                         Tworzenie gier 3D wymaga opanowania nie tylko jêzyka programowania, ale tak¿e
                                         wielu innych dziedzin wiedzy -- analizy matematycznej, rachunku macierzowego
         CENNIK I INFORMACJE             i wektorowego oraz geometrii. Oczywi cie ka¿da z tych nauk zosta³a ju¿ opisana
                                         w dziesi¹tkach tomów. Ksi¹¿ka, któr¹ trzymasz w rêce, zawiera wszystkie informacje
                   ZAMÓW INFORMACJE      niezbêdne do stworzenia gry 3D dzia³aj¹cej w rodowisku Windows, zebrane w jednym
                     O NOWO CIACH        tomie. Korzystaj¹c z niej, nie bêdziesz ju¿ musia³ przerzucaæ tysiêcy stron
                                         w poszukiwaniu potrzebnego Ci wzoru.
                       ZAMÓW CENNIK      Autor ksi¹¿ki, wykorzystuj¹c ponad dwudziestopiêcioletnie do wiadczenie
                                         w programowaniu, przedstawi Ci:

                 CZYTELNIA                  • algorytmy matematyczne wykorzystywane w grafice 3D,
                                            • zasady programowania w Windows i DirectX,
          FRAGMENTY KSI¥¯EK ONLINE          • algorytmy wy wietlania grafiki 2D i 3D,
                                            • techniki animacji i renderingu 3D,
                                            • mapowanie tekstur,
                                            • techniki symulacji o wietlenia i wiele innych informacji.
                                         Korzystaj¹c z tej ksi¹¿ki, opracujesz doskona³y, oparty wy³¹cznie na warstwie
                                         oprogramowania silnik 3D dla gry, wykorzystasz w swoich grach modele i postaci
                                         stworzone w programach 3D, stworzysz realistyczn¹ sceneriê gry 3D i zoptymalizujesz
                                         kod ród³owy programu pod k¹tem szybko ci jego wykonywania.
                                         O autorze:
                                         Andre LaMothe to autor uznanych przez rynek ksi¹¿ek o programowaniu gier i grafiki
                                         trójwymiarowej. Ci¹g jego sukcesów wydawniczych zapocz¹tkowa³o pierwsze wydanie
Wydawnictwo Helion                       tej ksi¹¿ki (ustanowi³o ono swego czasu standardy programowania gier dla systemu
ul. Chopina 6                            DOS). Andre LaMothe programuje od ponad 25 lat i oprócz niew¹tpliwej praktyki
44-100 Gliwice                           posiada stosowne wykszta³cenie z zakresu matematyki, informatyki i elektrotechniki.
tel. (32)230-98-63                       Znany jest równie¿ jako za³o¿yciel firm Xtreme Games LCC, Nurve Networks i XGDC.
e-mail: helion@helion.pl
5RKU VTG EK
             1 #WVQTG  
             2TGFOQYC  
             9UVúR 

%ú è +      9RTQYCFGPKG FQ RTQITCOQYCPKC IKGT  
4QFKC    9UVúR FQ RTQITCOQYCPKC IKGT   
             Wprowadzenie .......................................................................................................................27
             Elementy gier 2D/3D .............................................................................................................29
             Ogólne wskazówki dotyczące programowania gier ..............................................................33
             Narzędzia ...............................................................................................................................36
                Edytor poziomów 3D.......................................................................................................39
                Przygotowanie kompilatora.............................................................................................40
             Przykładowa gra 3D: Raiders 3D ..........................................................................................43
                Pętla obsługi zdarzeń .......................................................................................................62
                Logika gry 3D..................................................................................................................62
                Rzutowanie 3D ................................................................................................................64
                Gwiezdne tło....................................................................................................................66
                Działo laserowe i wykrywanie kolizji .............................................................................66
                Eksplozja .........................................................................................................................66
                Zasady gry .......................................................................................................................67
             Podsumowanie .......................................................................................................................67
4QFKC    -TÎVMK MWTU RTQITCOQYCPKC Y 9KPFQYU K KTGEV:  
             Model programowania Win32 ...............................................................................................69
             Programowanie w Windows — absolutne minimum ............................................................70
                 Wszystko zaczyna się od WinMain() ..............................................................................70
             Wzorcowa aplikacja Windows ..............................................................................................75
                 Klasa okna .......................................................................................................................76
                 Rejestracja klasy okna .....................................................................................................80
                 Tworzenie okna ...............................................................................................................80
                 Obsługa zdarzeń ..............................................................................................................82
                 Pętla obsługi komunikatów .............................................................................................87
                 Pętla obsługi komunikatów pracująca w czasie rzeczywistym .......................................90
             DirectX i COM w pigułce......................................................................................................91
                 HEL i HAL ......................................................................................................................93
                 Komponenty DirectX ......................................................................................................94
             Wprowadzenie do COM ........................................................................................................95
                 Co to jest obiekt COM? ...................................................................................................96
                 Tworzenie i u ywanie interfejsów COM biblioteki DirectX ..........................................98
                 Dostęp do interfejsów......................................................................................................98
             Podsumowanie .....................................................................................................................100
6       Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



4QFKC    #DUVTCME[LP[ MQORWVGT   
             Zało enia interfejsu abstrakcyjnego komputera ..................................................................101
             Budujemy abstrakcyjny komputer .......................................................................................103
                System video, bufor ramki.............................................................................................103
                Praca z kolorami ............................................................................................................106
                Kopiowanie bufora ........................................................................................................108
                Kompletny system graficzny abstrakcyjnego komputera..............................................110
                Dźwięk, muzyka, urządzenia wejścia............................................................................110
             Konsola do gier T3DLIB .....................................................................................................111
                Podstawowa konsola do gier .........................................................................................111
             Biblioteka T3DLIB ..............................................................................................................116
                Architektura modułu graficznego..................................................................................117
                Podstawowe definicje ....................................................................................................117
                Makra.............................................................................................................................119
                Typy danych, struktury..................................................................................................119
                Funkcje ..........................................................................................................................122
                Globalna dominacja.......................................................................................................125
                Interfejs DirectDraw ......................................................................................................126
                Funkcje operujące na figurach 2D.................................................................................130
                Funkcje matematyczne i obsługa błędów......................................................................136
                Mapy bitowe ..................................................................................................................138
                Obsługa palety w trybie 8-bitowym ..............................................................................142
                Funkcje pomocnicze ......................................................................................................145
                Obiekty BOB .................................................................................................................146
             T3DLIB2 — moduł obsługi urządzeń wejścia ....................................................................154
             T3DLIB3 — biblioteka obsługi dźwięku i muzyki .............................................................159
                Definicje ........................................................................................................................160
                Typy...............................................................................................................................160
                Zmienne globalne ..........................................................................................................161
                DirectSound API............................................................................................................161
                DirectMusic API............................................................................................................166
             Ostateczna postać konsoli T3D............................................................................................168
                Przypisanie funkcji graficznych abstrakcyjnemu modelowi .........................................168
                Konsola T3DLIB ...........................................................................................................171
             Przykładowe aplikacje .........................................................................................................179
                Aplikacje okienkowe .....................................................................................................179
                Aplikacje pełnoekranowe ..............................................................................................180
                Dźwięk i muzyka ...........................................................................................................181
                Klawiatura, myszka, joystick.........................................................................................181
             Podsumowanie .....................................................................................................................184

%ú è ++     1DNKEGPKC K VTCPUHQTOCELG Y VTGEJ Y[OKCTCEJ 
4QFKC    6T[IQPQOGVTKC YGMVQT[ OCEKGTG K MYCVGTPKQP[
                EC C VC OCVGOCV[MC  
             Notacje matematyczne .........................................................................................................187
             Dwuwymiarowe układy współrzędnych..............................................................................188
                Dwuwymiarowy układ współrzędnych kartezjańskich .................................................189
                Dwuwymiarowy układ współrzędnych biegunowych...................................................190
             Trójwymiarowe układy współrzędnych...............................................................................193
                Trójwymiarowe współrzędne kartezjańskie ..................................................................193
             Trójwymiarowe współrzędne cylindryczne.........................................................................196
                Konwersja trójwymiarowych współrzędnych kartezjańskich
                  do współrzędnych cylindrycznych..............................................................................196
Spis treści                    7



             Trójwymiarowe współrzędne sferyczne ..............................................................................197
             Podstawy trygonometrii.......................................................................................................198
                Trójkąt prostokątny........................................................................................................199
                Odwrotne funkcje trygonometryczne ............................................................................200
                Zale ności trygonometryczne........................................................................................201
             Wektory ...............................................................................................................................202
                Długość wektora ............................................................................................................203
                Normalizacja..................................................................................................................204
                Mno enie wektora przez wartości skalarne...................................................................204
                Dodawanie wektorów ....................................................................................................205
                Odejmowanie wektorów................................................................................................206
                Iloczyn skalarny wektorów............................................................................................206
                Iloczyn wektorowy ........................................................................................................209
                Wektor zerowy ..............................................................................................................211
                Wektory poło enia i wektory przemieszczenia .............................................................211
                Wektory jako kombinacje liniowe składowych.............................................................211
             Macierze i algebra liniowa...................................................................................................212
                Macierz jednostkowa.....................................................................................................214
                Dodawanie macierzy .....................................................................................................214
                Transpozycja macierzy ..................................................................................................215
                Mno enie macierzy........................................................................................................215
                Reguły mno enia macierzy ...........................................................................................217
             Wyznaczanie macierzy odwrotnej i rozwiązywanie układów równań ................................217
                Reguła Cramera .............................................................................................................219
                Przekształcenia geometryczne z wykorzystaniem macierzy .........................................221
                Współrzędne jednorodne ...............................................................................................222
                Przekształcenia macierzowe ..........................................................................................223
             Podstawowe obiekty geometryczne.....................................................................................230
                Punkty............................................................................................................................230
                Proste .............................................................................................................................230
                Proste w przestrzeni trójwymiarowej ............................................................................232
                Płaszczyzny ...................................................................................................................234
             Równania parametryczne.....................................................................................................238
                Proste parametryczne na płaszczyźnie i w przestrzeni trójwymiarowej .......................238
                Parametryczne definicje odcinków, wykorzystujące zwykły wektor kierunkowy v.....239
                Parametryczne definicje odcinków,
                  wykorzystujące jednostkowy wektor kierunkowy |v| = 1 ...........................................240
                Parametryczne proste w przestrzeni trójwymiarowej....................................................241
             Kwaterniony — wprowadzenie ...........................................................................................246
                Teoria liczb zespolonych ...............................................................................................247
                Rozszerzenie liczb zespolonych ....................................................................................252
                Zastosowania kwaternionów .........................................................................................257
             Wstęp do analizy matematycznej ........................................................................................261
                Pojęcie nieskończoności ................................................................................................261
                Granice...........................................................................................................................263
                Sumy i szeregi liczbowe skończone ..............................................................................264
                Szeregi liczbowe nieskończone .....................................................................................266
                Pochodne .......................................................................................................................267
                Całki...............................................................................................................................274
             Podsumowanie .....................................................................................................................279
4QFKC    +ORNGOGPVCELC OQFW W OCVGOCV[EPGIQ  
             Moduł matematyczny — przegląd.......................................................................................282
               Struktura plików modułu matematycznego...................................................................282
               Konwencja nazewnicza .................................................................................................282
8   Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



             Obsługa błędów .............................................................................................................283
             Słowo na temat języka C++...........................................................................................284
         Struktury i typy danych........................................................................................................284
             Wektory i punkty ...........................................................................................................284
             Równania parametryczne prostych................................................................................286
             Płaszczyzny w przestrzeni trójwymiarowej ..................................................................287
             Macierze ........................................................................................................................287
             Kwaterniony ..................................................................................................................290
             Obsługa współrzędnych niekartezjańskich....................................................................291
             Dwuwymiarowy układ współrzędnych biegunowych...................................................292
             Trójwymiarowy układ współrzędnych cylindrycznych ................................................293
             Trójwymiarowy układ współrzędnych sferycznych......................................................293
             Liczby stałoprzecinkowe ...............................................................................................294
         Stałe matematyczne .............................................................................................................295
         Makrodefinicje i funkcje rozwijane w miejscu wywołania .................................................297
             Funkcje u ytkowe i funkcje konwersji..........................................................................301
             Funkcje manipulujące punktami i wektorami ...............................................................301
             Macierze ........................................................................................................................302
             Kwaterniony ..................................................................................................................304
             Obliczenia stałoprzecinkowe.........................................................................................304
         Prototypy..............................................................................................................................305
         Zmienne globalne ................................................................................................................308
         Interfejs programowy modułu matematycznego .................................................................308
             Funkcje trygonometryczne ............................................................................................309
             Funkcje obsługi ró nych układów współrzędnych........................................................310
             Funkcje obsługi wektorów.............................................................................................313
             Funkcje operujące na macierzach..................................................................................321
             Funkcje operujące parametryczną reprezentacją prostych
               na płaszczyźnie i w przestrzeni trójwymiarowej ........................................................333
             Funkcje obsługi płaszczyzn trójwymiarowych..............................................................337
             Funkcje obsługi kwaternionów......................................................................................341
             Funkcje obliczeń stałoprzecinkowych...........................................................................350
             Funkcje rozwiązujące równania macierzowe ................................................................355
         Elementarz arytmetyki zmiennoprzecinkowej z wykorzystaniem koprocesora..................357
             Architektura jednostki zmiennoprzecinkowej ...............................................................358
             Stos jednostki zmiennoprzecinkowej ............................................................................359
             Zestaw instrukcji jednostki FPU....................................................................................361
             Klasyczny tryb adresowania operandów .......................................................................364
             Tryb adresowania operandów z odwołaniem do pamięci .............................................364
             Tryb adresowania operandów z odwołaniem do rejestru ..............................................365
             Adresowanie operandów ze zdjęciem operandu ze stosu..............................................365
             Przykłady zastosowania instrukcji jednostki FPU.........................................................366
             Instrukcje FLD...............................................................................................................366
             Instrukcje FST ...............................................................................................................367
             Instrukcje FADD ...........................................................................................................368
             Instrukcje FSUB ............................................................................................................371
             Instrukcje FMUL ...........................................................................................................372
             Instrukcje FDIV.............................................................................................................373
         Stosowanie modułu matematycznego — uwagi ..................................................................374
             Nowy szablon aplikacji .................................................................................................375
         Słowo o optymalizacji modułu ............................................................................................375
         Podsumowanie .....................................................................................................................376
Spis treści                    9



4QFKC    9RTQYCFGPKG FQ ITCHKMK  
             Filozofia silnika 3D .............................................................................................................377
             Struktura silnika gry 3D.......................................................................................................378
                 Silnik 3D........................................................................................................................378
                 Silnik gry .......................................................................................................................379
                 System sterowania grą i gry sieciowej ..........................................................................379
                 System animacji.............................................................................................................379
                 Wykrywanie kolizji i system nawigacji.........................................................................384
                 Moduł fizyki ..................................................................................................................384
                 System sztucznej inteligencji.........................................................................................386
                 Baza modeli 3D i grafiki ...............................................................................................387
             Układy współrzędnych trójwymiarowych ...........................................................................388
                 Współrzędne modelu (lokalne)......................................................................................389
                 Współrzędne świata gry.................................................................................................392
                 Współrzędne kamery .....................................................................................................396
                 Ostateczna reprezentacja świata 3D za pomocą współrzędnych kamery......................404
                 Usuwanie ukrytych obiektów (powierzchni) i przycinanie...........................................405
                 Współrzędne perspektywy.............................................................................................411
                 Zakończenie potoku — współrzędne ekranowe............................................................422
             Podstawowe struktury danych 3D .......................................................................................430
                 Reprezentacje danych opisujących wielokąty w grafice 3D .........................................431
                 Definiowanie wielokątów..............................................................................................433
                 Definiowanie obiektów..................................................................................................439
                 Reprezentowanie światów .............................................................................................443
             Narzędzia 3D .......................................................................................................................443
                 Animacja i dane o ruchu................................................................................................445
             Ładowanie danych ze źródeł zewnętrznych ........................................................................446
                 Pliki PLG .......................................................................................................................446
                 Pliki NFF .......................................................................................................................449
                 Pliki 3D Studio ..............................................................................................................452
                 Pliki COB firmy Caligari...............................................................................................459
                 Pliki .X Microsoft DirectX ............................................................................................461
                 Formaty plików 3D — podsumowanie .........................................................................461
             Proste przekształcenia i animacja ........................................................................................462
                 Przesunięcie w przestrzeni.............................................................................................462
                 Obrót w przestrzeni .......................................................................................................463
                 Zmiana kształtu..............................................................................................................465
             Podsumowanie potoku 3D ...................................................................................................466
             Typy silników 3D ................................................................................................................467
                 Silniki przestrzeni kosmicznej.......................................................................................468
                 Silniki terenu..................................................................................................................468
                 Silniki pomieszczeń zamkniętych .................................................................................470
                 Ray casting i silniki wokselowe ....................................................................................471
                 Silniki hybrydowe..........................................................................................................472
             Integracja całości w ostateczną postać silnika .....................................................................472
             Podsumowanie .....................................................................................................................473
4QFKC    4GPFGTQYCPKG YKCVÎY UMKGNGVQY[EJ Y  
             Ogólna architektura silnika szkieletowego ..........................................................................475
                 Struktury danych i potok 3D .........................................................................................476
                 Główna lista wielokątów ...............................................................................................479
                 Nowe moduły programowe ...........................................................................................482
             Piszemy program ładujący pliki 3D.....................................................................................482
                 Program ładujący pliki PLG (PLX)...............................................................................485
10      Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



             Budowanie potoku 3D .........................................................................................................491
                Ogólne funkcje przekształcające ...................................................................................491
                Przekształcenie współrzędnych lokalnych na współrzędne świata 3D .........................497
                Eulerowski model kamery .............................................................................................500
                Model kamery UVN ......................................................................................................503
                Przekształcenie współrzędnych świata na współrzędne kamery...................................515
                Usuwanie obiektów .......................................................................................................519
                Usuwanie ścian zwróconych tyłem ...............................................................................523
                Przekształcenie współrzędnych kamery na współrzędne perspektywy.........................526
                Przekształcenie współrzędnych perspektywy na współrzędne ekranowe .....................530
                Połączone przekształcenie do współrzędnych perspektywy
                  i współrzędnych ekranowych......................................................................................535
             Renderowanie świata 3D .....................................................................................................538
                Rzut oka na potok 3D ....................................................................................................538
             Programy demonstracyjne 3D .............................................................................................542
                Pojedynczy trójkąt 3D — DEMOII7_1.CPP|EXE ........................................................542
                Szkielet sześcianu 3D — DEMOII7_2.CPP|EXE .........................................................545
                Szkielet sześcianu 3D z usuwaniem ścian zwróconych tyłem
                  — DEMOII7_3.CPP|EXE...........................................................................................548
                Czołg 3D — DEMOII7_4.CPP|EXE.............................................................................550
                Czołgi 3D i latająca kamera — DEMOII7_5.CPP|EXE ...............................................553
                Wycieczka po świecie gry à la Battle Zone — DEMOII7_6.CPP|EXE........................554
             Podsumowanie .....................................................................................................................559

%ú è +++    2QFUVCY[ TGPFGTQYCPKC  
4QFKC    /QFGNQYCPKG DT[ K RTQUVG Q YKGVNGPKG  
             Proste modele oświetlenia w grafice komputerowej ...........................................................564
                 Modele kolorów i materiały ..........................................................................................566
                 Typy świateł ..................................................................................................................574
             Oświetlanie i rasteryzacja trójkątów....................................................................................582
                 Przygotowania do implementacji oświetlenia ...............................................................586
                 Definiowanie materiałów ..............................................................................................587
                 Definiowanie świateł .....................................................................................................591
             Cieniowanie w praktyce.......................................................................................................596
                 Cieniowanie w trybie 16-bitowym ................................................................................596
                 Cieniowanie w trybie 8-bitowym ..................................................................................597
                 Sprawny model RGB w trybach 8-bitowych.................................................................597
                 Model z uproszczonym natę eniem dla trybów 8-bitowych .........................................601
                 Cieniowanie jednorodne ................................................................................................605
                 Cieniowanie płaskie.......................................................................................................607
                 Cieniowanie płaskie w trybie 8-bitowym......................................................................622
                 Wstęp do cieniowania Gourauda...................................................................................624
                 Wstęp do cieniowania Phonga.......................................................................................626
             Sortowanie względem głębokości i algorytm malarza ........................................................627
             Praca z nowymi formatami plików ......................................................................................632
                 Klasa parsera..................................................................................................................632
                 Interpretacja funkcji pomocniczych ..............................................................................635
                 Format ASCII programu 3D Studio Max (.ASC)..........................................................638
                 Format ASCII programu trueSpace (.COB) ..................................................................641
                 Przegląd formatu binarnego .MD2 z gry Quake II........................................................650
             Przegląd narzędzi do modelowania 3D ...............................................................................651
             Podsumowanie .....................................................................................................................654
Spis treści                 11



4QFKC         +PVGTRQNCE[LPG VGEJPKMK EKGPKQYCPKC K CHKPKEPG OCRQYCPKG VGMUVWT 
                  Nowe funkcje silnika T3D ...................................................................................................655
                  Ulepszanie struktur danych i budowy silnika T3D..............................................................657
                     Nowe definicje...............................................................................................................657
                     Nowe struktury matematyczne ......................................................................................660
                     Makra pomocnicze ........................................................................................................661
                     Dodatkowe elementy umo liwiające reprezentację danych siatki 3D ..........................662
                     Aktualizacja struktur obiektów i listy renderowania.....................................................668
                     Przegląd funkcji i prototypów .......................................................................................672
                  Nowe wersje procedur ładujących obiekty ..........................................................................680
                     Aktualizacja starego dobrego czytnika .PLG (.PLX) ....................................................680
                     Aktualizacja czytnika formatu .ASC z 3D Studio Max.................................................691
                     Aktualizacja czytnika .COB firmy Caligari ..................................................................692
                  Powtórka z rasteryzacji wielokątów ....................................................................................697
                     Rasteryzacja trójkąta......................................................................................................697
                     Konwencja wypełniania ................................................................................................702
                     Przycinanie ....................................................................................................................704
                     Nowe funkcje kreślące trójkąty .....................................................................................706
                     Zabiegi optymalizacyjne................................................................................................710
                  Implementacja cieniowania Gourauda.................................................................................712
                     Cieniowanie Gourauda bez oświetlenia ........................................................................713
                     Uzupełnianie procedury cieniowania Gourauda o oświetlanie wierzchołków..............723
                  Podstawy teorii próbkowania...............................................................................................732
                     Próbkowanie w jednym wymiarze ................................................................................733
                     Interpolacja dwuliniowa ................................................................................................735
                     Interpolacja u i v ............................................................................................................737
                     Implementacja afinicznego mapowania tekstur ............................................................739
                  Uwzględnienie tekstur w module oświetlenia i rasteryzacji................................................742
                     Dodawanie oświetlenia do funkcji renderującej tekstury w trybie 16-bitowym ...........742
                  Podsumowanie strategii optymalizacyjnych dla trybów 8- i 16-bitowych..........................748
                     Tabele wyszukiwania ....................................................................................................748
                     Spójność wierzchołków siatki .......................................................................................749
                     Buforowanie ..................................................................................................................749
                     Instrukcje SIMD ............................................................................................................749
                  Programy demonstracyjne ...................................................................................................750
                     Raiders 3D II .................................................................................................................751
                  Podsumowanie .....................................................................................................................754
4QFKC  2T[EKPCPKG UEGP  
                  Przycinanie scen 3D — wprowadzenie ...............................................................................755
                     Przycinanie w przestrzeni obiektu.................................................................................755
                     Przycinanie w obszarze obrazu sceny ...........................................................................759
                  Omówienie algorytmów przycinania...................................................................................760
                     Przycinanie — podstawy ...............................................................................................761
                     Algorytm Cohena-Sutherlanda ......................................................................................766
                     Algorytm Cyrusa-Becka (Lianga-Barskiego)................................................................768
                     Algorytm Weilera-Athertona.........................................................................................771
                     Przycinanie — dodatkowe źródła informacji ................................................................774
                  Przycinanie do ostrosłupa widzenia — przykład implementacji.........................................775
                     Potok przekształceń geometrycznych i nowe struktury danych....................................776
                     Dodawanie przycinania do silnika graficznego.............................................................777
                  Zabawa w terenie .................................................................................................................799
                     Funkcja generowania terenu..........................................................................................800
                     Generowanie mapy wysokości ......................................................................................809
                     Rajd łazikiem terenowym..............................................................................................810
                  Podsumowanie .....................................................................................................................814
12        Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



4QFKC  $WHQTQYCPKG QFNGI Q EK C YKFQEPQ è RQYKGTEJPK 
               Bufory odległości i identyfikowanie widocznych powierzchni — wprowadzenie .............815
               Bufor Z.................................................................................................................................818
                  Trudności implementacji bufora Z ................................................................................820
                  Przykład buforowania odległości ..................................................................................820
                  Obliczanie wartości Z piksela z równania płaszczyzny ................................................822
                  Interpolacja współrzędnej Z ..........................................................................................824
                  Problemy buforowania Z i buforowanie odwrotności Z ...............................................826
                  Przykładowa interpolacja Z i odwrotności Z.................................................................827
               Tworzenie systemu z buforem głębokości...........................................................................830
                  Dodawanie obsługi bufora Z do funkcji rasteryzacji.....................................................833
               Optymalizacje bufora odległości .........................................................................................845
                  Oszczędzanie pamięci....................................................................................................846
                  Rzadsze czyszczenie bufora ..........................................................................................846
                  Buforowanie mieszane ..................................................................................................848
               Bufory odległości — problemy ...........................................................................................849
               Programy demonstrujące działanie buforów Z ....................................................................849
                  Program 1.: Obrazowanie zawartości bufora Z .............................................................849
                  Program 2.: Wodny rajd ................................................................................................851
               Podsumowanie .....................................................................................................................857

%ú è +8       CCYCPUQYCPG VGEJPKMK TGPFGTQYCPKC 
4QFKC  CCYCPUQYCPG OGVQF[ VGMUVWTQYCPKC  
               Teksturowanie — podejście drugie .....................................................................................861
                    Nowe struktury w pliku nagłówkowym ........................................................................862
               Podstawa funkcji rasteryzacji ..............................................................................................869
                    Przyjęcie formatu stałoprzecinkowego..........................................................................870
                    Nowe funkcje rasteryzacji bez buforowania Z ..............................................................870
                    Nowe funkcje rasteryzacji z buforowaniem Z...............................................................873
               Teksturowanie z cieniowaniem Gourauda...........................................................................875
               Przezroczystość i łączenie alfa ............................................................................................882
                    Łączenie alfa z wykorzystaniem tablic przeglądowych ................................................883
                    Niezale ne definiowanie łączenia alfa dla poszczególnych obiektów ..........................895
                    Łączenie alfa w module generowania terenu ................................................................901
               Teksturowanie z korektą perspektywiczną i buforowanie odwrotności Z...........................904
                    Matematyczne podstawy teksturowania z korektą perspektywiczną ............................905
                    Dodawanie do rasteryzatorów buforowania odwrotności Z..........................................913
                    Implementacja teksturowania poprawnego perspektywicznie ......................................921
                    Implementacja teksturowania częściowo poprawnego perspektywicznie.....................925
                    Aproksymacja kwadratowa w teksturowaniu perspektywicznym.................................931
                    Optymalizacja teksturowania — teksturowanie hybrydowe .........................................936
               Dwuliniowe filtrowanie tekstur ...........................................................................................938
               Filtrowanie trzyliniowe tekstur i mipmapowanie ................................................................943
                    Wprowadzenie do analizy Fouriera i efektu aliasingu ..................................................944
                    Tworzenie szeregu tekstur mipmapowania ...................................................................949
                    Wybór poziomu teksturowania mip ..............................................................................958
                    Filtrowanie trzyliniowe..................................................................................................964
               Wyświetlanie i teksturowanie wieloprzebiegowe................................................................965
               Zaawansowane teksturowanie w jednym wywołaniu..........................................................966
                    Nowy kontekst renderowania ........................................................................................967
                    Wypełnianie struktury kontekstu renderowania ............................................................969
                    Funkcja zbiorcza rasteryzacji ........................................................................................971
               Podsumowanie .....................................................................................................................979
Spis treści                   13



4QFKC  2QFKC RTGUVTGPP[ K CNIQT[VO[ QMTG NCPKC YKFQEPQ EK  
                 Nowy moduł silnika graficznego .........................................................................................981
                 Podział przestrzenny i określanie widoczności powierzchni — wprowadzenie .................982
                 Binarny podział przestrzeni (BSP) ......................................................................................986
                     Binarny podział przestrzenny płaszczyznami równoległymi
                       do osi układu współrzędnych......................................................................................988
                     Binarny podział przestrzenny płaszczyznami arbitralnymi...........................................988
                     Binarny podział przestrzenny płaszczyznami wyznaczanymi
                       przez płaszczyzny wielokątów....................................................................................989
                     Wyświetlanie (odwiedzanie) węzłów drzewa BSP .......................................................993
                     Struktury danych i funkcje obsługujące drzewa BSP....................................................995
                     Tworzenie drzewa BSP .................................................................................................997
                     Strategie podziału ........................................................................................................1001
                     Przeglądanie i wyświetlanie węzłów drzewa BSP ......................................................1010
                     Wpasowanie drzew BSP do potoku renderowania......................................................1019
                     Edytor poziomu wykorzystujący drzewa BSP ............................................................1021
                     Ograniczenia drzew BSP .............................................................................................1032
                     Minimalizacja nadmiarowości odrysowywania z wykorzystaniem drzew BSP .........1033
                     Wykorzystanie drzew BSP do redukowania sceny .....................................................1035
                     Wykorzystanie drzew BSP do wykrywania kolizji .....................................................1045
                     Integracja drzew BSP ze standardowymi funkcjami rasteryzacji ...............................1045
                 Zbiory powierzchni potencjalnie widocznych ...................................................................1052
                     Zastosowania zbiorów PVS.........................................................................................1053
                     Mo liwe sposoby kodowania zbiorów potencjalnej widoczności...............................1055
                     Wyznaczanie zbiorów PVS .........................................................................................1057
                 Portale ................................................................................................................................1059
                 Hierarchie brył otaczających i drzewa oktalne ..................................................................1063
                     Sposób u ycia drzewa hierarchii BHV........................................................................1065
                     Wydajność w czasie rzeczywistym .............................................................................1065
                     Strategie budowy hierarchii BHV ...............................................................................1067
                     Implementacja hierarchii BHV....................................................................................1069
                     Drzewa oktalne ............................................................................................................1076
                 Eliminowanie powierzchni zasłoniętych ...........................................................................1078
                     Bryły zasłaniające........................................................................................................1079
                     Wybór obiektów zasłaniających..................................................................................1080
                     Hybrydowa metoda wyboru obiektów zasłaniających ................................................1081
                 Podsumowanie ...................................................................................................................1081
4QFKC  %KGPKG Q YKGVNGPKG K UGMTGV[ KF  
                 Nowy moduł silnika gry ....................................................................................................1083
                 Wprowadzenie i plan gry ...................................................................................................1083
                 Uproszczone zasady fizyki cieni........................................................................................1084
                    Droga fotonów i wyliczanie intensywności światła ....................................................1085
                 Symulowanie cieni za pomocą rzutowanych obrazów i billboardów................................1088
                    Implementowanie rasteryzatorów z obsługą przezroczystości....................................1090
                    Nowa biblioteka...........................................................................................................1092
                    Proste cienie.................................................................................................................1094
                    Skalowanie cieni..........................................................................................................1096
                    Śledzenie poło enia źródła światła..............................................................................1100
                    Końcowe uwagi na temat tworzenia symulowanych cieni..........................................1105
                 Tworzenie cieni poprzez rzutowanie na płaszczyznę siatki obiektu .................................1105
                    Wzory przekształceń wektorowych dla potrzeb rzutowania .......................................1106
                    Optymalizowanie cieni rzutowanych na płaszczyznę .................................................1110
14         Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



                 Wprowadzenie do mapowania oświetlenia i przechowywania powierzchni
                  w pamięci podręcznej .....................................................................................................1110
                    Przechowywanie powierzchni w pamięci podręcznej .................................................1113
                    Generowanie map oświetlenia.....................................................................................1114
                    Implementowanie mapera oświetlenia ........................................................................1115
                    Mapowanie ciemności .................................................................................................1118
                    Efekty specjalne z u yciem map oświetlenia ..............................................................1120
                    Optymalizowanie kodu mapowania oświetlenia .........................................................1120
                 Łącząc wszystko w jedną całość........................................................................................1121
                 Podsumowanie ...................................................................................................................1121

%ú è 8          CCYCPUQYCPG RTQDNGO[ CPKOCELK
                 OQFGNQYCPKG LCYKUM HK[EP[EJ K QRV[OCNKCELC 
4QFKC  #PKOQYCPKG RQUVCEK RTQITCOQYCPKG TWEJW K Y[MT[YCPKG MQNKLK 
                 Nowy moduł silnika gry ....................................................................................................1125
                 Wprowadzenie do animacji trójwymiarowej .....................................................................1126
                 Format .MD2 stosowany w grze Quake II.........................................................................1126
                    Nagłówek pliku .MD2 .................................................................................................1129
                    Ładowanie plików .MD2 gry Quake II .......................................................................1138
                    Animowanie plików .MD2 ..........................................................................................1147
                 Proste zasady animacji bez modeli bohaterów ..................................................................1158
                    Rotacja w ruchu i ruch w wyniku translacji ................................................................1158
                    Zło one ruchy parametryczne i ruch po krzywej ........................................................1161
                    Wykorzystywanie skryptów do programowania ruchu ...............................................1162
                 Wykrywanie kolizji w przestrzeni trójwymiarowej...........................................................1164
                    Ograniczające sfery i walce.........................................................................................1165
                    Wykorzystywanie struktur danych do przyśpieszania wykrywania kolizji.................1166
                    Poruszanie się po powierzchni terenu .........................................................................1167
                 Podsumowanie ...................................................................................................................1168
4QFKC  6GEJPKMK QRV[OCNKCELK MQFW  
                 Wprowadzenie do technik optymalizacyjnych ..................................................................1169
                 Profilowanie kodu za pomocą kompilatora Microsoft Visual C++
                   i programu VTune Intela ................................................................................................1170
                      Profilowanie przy pomocy kompilatora Visual C++...................................................1171
                      Analizowanie danych profilowania .............................................................................1173
                      Optymalizowanie kodu za pomocą programu VTune.................................................1174
                 Korzystanie z kompilatora C++ firmy Intel.......................................................................1182
                      Ściąganie kompilatora optymalizacyjnego Intela........................................................1182
                      Korzystanie z kompilatora...........................................................................................1183
                      Korzystanie z opcji optymalizacyjnych kompilatora ..................................................1184
                      Ręczne wybieranie ró nych kompilatorów dla ró nych plików źródłowych..............1185
                      Strategie optymalizacyjne............................................................................................1185
                 Przykład programowania instrukcji SIMD w mechanizmie SSE ......................................1185
                      Podstawy architektury SIMD ......................................................................................1187
                      Jak naprawdę wygląda korzystanie z instrukcji SIMD ...............................................1188
                      Klasa wektorów trójwymiarowych przystosowana do instrukcji SIMD.....................1199
                 Kilka podstawowych trików optymalizacyjnych...............................................................1205
                      Trik 1. Pozbywanie się funkcji _ftol().........................................................................1205
                      Trik 2. Ustawianie słowa kontrolującego FPU............................................................1206
                      Trik 3. Szybkie zerowanie liczb zmiennoprzecinkowych ...........................................1207
                      Trik 4. Szybkie wyciąganie pierwiastków kwadratowych ..........................................1207
                      Trik 5. Uproszczone wyliczanie arcustangens ............................................................1207
Spis treści                   15



                     Trik 6: Zwiększanie wartości wskaźnika.....................................................................1208
                     Trik 7. Wyjmowanie instrukcji if z pętli .....................................................................1209
                     Trik 8. Rozgałęzianie potoków instrukcji....................................................................1209
                     Trik 9. Wyrównywanie danych ...................................................................................1210
                     Trik 10. Wywoływanie wszystkich krótkich funkcji w miejscu .................................1210
                 Literatura............................................................................................................................1210
                 Podsumowanie ...................................................................................................................1210

QFCVMK 
QFCVGM #        CYCTVQ è %41/W 
QFCVGM $        +PUVCNQYCPKG KTGEV: K MQT[UVCPKG  MQORKNCVQTC 8KUWCN %%

 
                 Instalowanie DirectX .........................................................................................................1215
                 Korzystanie z kompilatora Visual C/C++..........................................................................1216
                 Kilka praktycznych porad związanych z kompilacją.........................................................1216
QFCVGM %        6T[IQPQOGVTKC K YGMVQT[ 
                 Trygonometria ...................................................................................................................1219
                 Wektory .............................................................................................................................1222
                    Długość wektora ..........................................................................................................1223
                    Normalizacja................................................................................................................1223
                    Mno enie wektora przez skalar ...................................................................................1223
                    Dodawanie wektorów ..................................................................................................1224
                    Odejmowanie wektorów..............................................................................................1225
                    Iloczyn skalarny wektorów..........................................................................................1225
                    Iloczyn wektorowy wektorów .....................................................................................1227
                    Wektor zerowy ............................................................................................................1228
                    Wektory pozycji ..........................................................................................................1228
                    Wektory jako liniowe kombinacje wektorów jednostkowych ....................................1229
QFCVGM         -TÎVMKG MQORGPFKWO Lú[MC %

 
                 Czym język C++ ró ni się od C.........................................................................................1231
                 Minimum tego co trzeba wiedzieć o C++..........................................................................1233
                 Nowe typy, słowa kluczowe i konwencje..........................................................................1234
                     Komentarze..................................................................................................................1234
                     Stałe .............................................................................................................................1234
                     Zmienne referencyjne ..................................................................................................1234
                     Tworzenie zmiennych w dowolnym miejscu kodu .....................................................1235
                 Zarządzanie pamięcią ........................................................................................................1236
                 Strumienie wejścia i wyjścia..............................................................................................1236
                 Klasy ..................................................................................................................................1238
                     Całkiem nowy typ struktur ..........................................................................................1238
                     Przykład prostej klasy..................................................................................................1239
                     Publiczne a prywatne...................................................................................................1240
                     Funkcje składowe klasy (metody) ...............................................................................1240
                     Konstruktory i destruktory...........................................................................................1242
                     Pisanie konstruktora ....................................................................................................1243
                     Pisanie destruktora.......................................................................................................1244
                 Operator ustalania zakresu.................................................................................................1246
                     Pisanie funkcji składowych klasy poza zakresem klasy..............................................1246
                 Przecią anie operatorów i funkcji......................................................................................1247
                 Podstawy korzystania z szablonów....................................................................................1249
                 Wprowadzenie do obsługi wyjątków.................................................................................1250
                     Komponenty składające się na obsługę wyjątków ......................................................1251
                 Podsumowanie ...................................................................................................................1254
16     Triki najlepszych programistów gier 3D. Vademecum profesjonalisty



QFCVGM '   2T[FCVPG CFTGU[ KPVGTPGVQYG  
            Witryny poświęcone programowaniu gier i nowinkom programistycznym......................1255
            Witryny, z których mo na ściągać u yteczne materiały i programy .................................1256
            Silniki 2D i 3D ...................................................................................................................1256
            Ksią ki poświęcone programowaniu gier komputerowych...............................................1257
            Strony Microsoftu poświęcone interfejsowi DirectX ........................................................1257
            Grupy dyskusyjne Usenetu ................................................................................................1257
            Najnowsze wiadomości z bran y: Blues News .................................................................1258
            Magazyny komputerowe poświęcone projektowaniu gier ................................................1258
            Dodatkowe materiały do gry Quake ..................................................................................1258
            Darmowe modele i tekstury ...............................................................................................1258
            Twórcy witryn poświęconych grom komputerowym ........................................................1258
QFCVGM (   6CDNKEC PCMÎY #5%++  
            5MQTQYKF
Rozdział 10.
2T[EKPCPKG UEGP 
                                                        Nie bój się, to nie jest groźba pod Twoim adresem
                                                                                     — Marla, Fight Club

  Dość długo udawało się nam unikać tematu przycinania scen 3D, przyszedł jednak czas na rozwiązanie
  i tego problemu. Nie da się ju dłu ej omijać tematu przycinania. Dlatego w bie ącym rozdziale omó-
  wione zostaną podstawy teoretyczne oraz zaprezentowany będzie praktyczny szkielet modułu przycinania
  scen 3D; wskazane zostaną te powody, dla których konieczne jest realizowanie przycinania scen oraz
  działający przykład wykorzystania tej techniki. Głównymi wątkami rozdziału będą:
      wprowadzenie do przycinania scen 3D;
      podstawy teoretyczne algorytmów przycinania;
      implementacja przycinania sceny do ostrosłupa widzenia;
      zabawa z przycinaniem.


2T[EKPCPKG UEGP                      YRTQYCFGPKG
  Przycinanie jako jedna z technik przetwarzania sceny w grafice komputerowej wzmiankowane było w ni-
  niejszej ksią ce ju kilkukrotnie; stosowne omówienia znajdują się równie w drugim wydaniu ksią ki
  Tricks of the Windows Game Programming Gurus. Przycinanie to jedna z najwa niejszych technik grafiki
  3D, gdy źle przycinane sceny są nie tylko nieprawidłowo wyświetlane na ekranie, ale równie ich rzu-
  towanie w ostrosłupie widzenia mo e doprowadzić do błędów dzielenia przez zero i niepoprawnych od-
  wołań do pamięci. Mając to na uwadze przypomnimy sobie ró ne techniki przycinania i wska emy przy-
  czyny ich stosowania.

2T[EKPCPKG Y RTGUVTGPK QDKGMVW

  O przycinaniu w przestrzeni obiektu mówimy wtedy, gdy przycinaniu do wyznaczonego obszaru podlegają
  współrzędne geometryczne elementów sceny. Obszar przycinania mo e być dwu- lub trójwymiarowy —
  istotne jest to, e przycinanie zachodzi w matematycznej reprezentacji sceny i dotyczy matematycznych
  reprezentacji obiektów, trójkątów, elementów podstawowych i wszelkich innych części sceny. Zaletą
  przycinania w przestrzeni obiektu jest prostota: przy pomocy listy wierzchołków wielokątów tworzących
  scenę przycina się ich współrzędne do wyznaczonego dwu- lub trójwymiarowego obszaru rzutowania. Listę
  przyciętych trójkątów przekazuje się do następnego etapu potoku renderowania.

  Wady przycinania w przestrzeni obiektu tkwią, jak zwykle, w szczegółach implementacyjnych. W omawianych
  w tej ksią ce mechanizmach obrazowania jako elementy konstrukcyjne wykorzystywane są zawsze trójkąty.
  Tymczasem w wyniku przycinania, czy to do prostokąta rzutu dwuwymiarowego, czy do ostrosłupa wi-
  dzenia, do sceny wprowadzane są wielokąty z więcej ni trzema wierzchołkami (a więc w wyniku przyci-
  nania scena przestaje składać się ju wyłącznie z trójkątów). Tak więc dla ka dej płaszczyzny przycinania
756          Część III   Podstawy renderowania 3D



      nale y przewidzieć potrzebę wprowadzenia dodatkowych wierzchołków przetwarzanych trójkątów,
      przez co stają się one czworokątami bądź wielokątami o jeszcze większej liczbie kątów. To pierwsza
      trudność. Gdyby silnik graficzny optymalizowany był pod kątem przetwarzania wielokątów o dowolnej
      liczbie wierzchołków, nie byłoby problemu, ale dotychczas omówione optymalizacje przetwarzania 3D
      opierały się zawsze na zało eniu, e scena składa się wyłącznie z trójkątów. Dalej, przycinanie w dowolnym
      systemie przestrzeni obiektu oznacza konieczność przecinania prostych prostymi, prostych płaszczyznami
      i tak dalej. Z pozoru proste, operacje te okazują się trudne w wydajnej implementacji, wymagając rozwiązania
      wielu problemów.

      2T[EKPCPKG  Y RTGUVTGPK QDKGMVW

      Przycinanie 2D w przestrzeni obiektu nie jest nam całkiem obce, poniewa wielokrotnie prezentowaliśmy je
      dla grafiki 2D. Podstawowa koncepcja takiego przycinania zakłada, e dysponujemy gotowymi ju rzutami
      prostych i wielokątów, które nale y przyciąć do prostokątnego obszaru widzenia. Kod implementujący takie
      przycinanie prezentowany był ju zarówno w tym, jak i poprzednim wydaniu ksią ki. Przycinanie 2D nie
      mo e być dłu ej pomocne, poniewa podstawowym problemem jest to, e w przestrzeni trójwymiarowej
      rzutowaniu podlegają wielokąty, które mogą być potencjalnie tak rozległe, e nie tylko przenikają przez
      bliską płaszczyznę przycinania, ale równie przez płaszczyznę o współrzędnej z równej 0, stąd do rzutowania
      przekazywane są wierzchołki o ujemnych wartościach tej współrzędnej (jak na rysunku 10.1). Wyłania się
      więc potrzeba opracowania techniki bardziej agresywnego przycinania 3D w przestrzeni obiektu.




4[UWPGM  Rzutowanie wierzchołków o współrzędnej z mniejszej lub równej zeru prowadzi do błędów
Rozdział 10.   Przycinanie scen 3D       757



   2T[EKPCPKG  Y RTGUVTGPK QDKGMVW

   Je eli mechanizm obrazowania sceny ma sobie radzić z wielokątami o dowolnych rozmiarach i rozmiesz-
   czeniu, nie da się w prosty sposób uniknąć przycinania sceny do bliskiej płaszczyzny przycinania (patrz
   rysunek 10.2). Najbardziej prymitywnym sposobem uniknięcia przycinania jest usuwanie w całości ze
   sceny tych wielokątów, których wierzchołki wystają poza płaszczyznę przycinania, ale wymaga to kon-
   struowania sceny z wielokątów o ograniczonym rozmiarze (patrz rysunek 10.3). Przy tym fragmenty scen
   przylegające do płaszczyzn przycinania nie będą właściwie obrazowane.




4[UWPGM  Zbyt długie wielokąty muszą zostać przycięte




4[UWPGM  Niewielkie wielokąty mogą zostać w całości usunięte bądź zaliczone do sceny
758          Część III   Podstawy renderowania 3D



      Warunkiem koniecznym prawidłowego obrazowania sceny jest przycinanie wszystkich wielokątów sceny
      do bli szej płaszczyzny, przy czym uzyskane w wyniku przycięcia wielokąty mogą przestać być trójkątami.
      Trzeba się więc liczyć z koniecznością ponownego podziału powstałych wielokątów na trójkąty i tym
      samym przebudowania listy obrazowanych wielokątów. W najgorszym więc przypadku konieczne będzie
      przycięcie wszystkich wielokątów do bliskiej płaszczyzny przycinania, co sprowadza się do wyliczania
      punktów przecięcia prostych i płaszczyzn. W szczegółach problem okazuje się powa niejszy. Wiemy ju
      o konieczności ponownego podziału sceny na trójkąty; dodatkowo nale y jeszcze przyciąć współrzędne
      tekstur, przeliczyć dane potrzebne do cieniowania powierzchni i wyliczyć nowe wartości wektorów nor-
      malnych wierzchołków — widać, e trudności jest niemało, ale poradzimy sobie i z nimi.

      Z drugiej strony, niebawem oka e się, e nie ma potrzeby wykonywania operacji przycinania dla pozostałych
      płaszczyzn ostrosłupa widzenia. Spójrzmy na rysunek 10.4. Okazuje się, e przycinanie wielokątów do
      dalekiej płaszczyzny przycinania jest zwykłą stratą czasu. Jaki byłby zysk? Praktycznie aden. Co gorsza,
      przycinanie to znacznie zwiększyłoby czas przetwarzania sceny. Wystarczy więc (zamiast przycinać) odrzucać
      w całości te wielokąty, które znajdują się poza daleką płaszczyzną przycinania — niezale nie od ich od-
      ległości od tej płaszczyzny. Wielokąty, które w całości znajdują się poza tą płaszczyzną, zostaną raczej
      usunięte z wykorzystaniem sfer otaczających ni przycinania.




4[UWPGM  Nie wszystkie płaszczyzny ostrosłupa widzenia wymagają przycinania 3D

      Dalej, równie przycinanie na płaszczyznach tworzących górną, dolną, lewą i prawą ścianę ostrosłupa
      widzenia nie ma sensu. Przycinanie na ścianach ostrosłupa widzenia zajęłoby cenny czas, a słu yłoby tylko
      do tego, eby rzut sceny nie wykraczał poza obszar dwuwymiarowej płaszczyzny widoku sceny. O to
      mo na zaś zadbać na etapie rasteryzacji, w obszarze bufora ramki ekranu, co jest nieporównanie szybsze
      ni przycinanie w przestrzeni obiektu. Unikając przycinania na płaszczyznach ostrosłupa widzenia elimi-
      nujemy równie ze sceny i potoku renderowania potencjalne dodatkowe wielokąty, powstałe z podziału
      wielokątów na granicach obszaru przycinania.
Rozdział 10.    Przycinanie scen 3D              759



   Naturalnie, je eli Czytelnikowi zale y na elegancji i kompletności mechanizmu obrazowania, mo e po-
   kusić się o implementację przycinania dla wszystkich płaszczyzn; zostanie to zresztą pokazane w dalszej
   części rozdziału. Główny nacisk zostanie jednak poło ony na następujące etapy przycinania i usuwania
   wielokątów (patrz rysunek 10.5):

4[UWPGM 
Etapy w potoku
przycinania 3D




      Usunięcie wszystkich zbędnych obiektów.
      Usunięcie wielokątów zwróconych „tyłem do obserwatora”.
      Przycięcie wszystkich wielokątów do obszaru ostrosłupa widzenia. Pełnego przycinania wymaga
        jedynie bliska płaszczyzna przycinania w osi Z. Przycinanie na pozostałych pięciu płaszczyznach
        sprowadza się zaś do prostej kwalifikacji wielokąta do sceny w całości (je eli trójkąt znajduje się
        częściowo lub w całości w obszarze przycinania, zostaje zaliczony do sceny w całości; trójkąty
        pozostające w całości poza lewą, prawą, górną i dolną płaszczyzną ostrosłupa widzenia mo na
        w całości usunąć ze sceny).
      Przekazanie wszystkich wielokątów do następnych etapów potoku renderowania; wszelkie trójkąty
        wystające poza obszar płaszczyzny rzutu mo na przyciąć na etapie rasteryzacji.

   Taki system przycinania jest łatwy w implementacji, działa znakomicie, i — co najwa niejsze — jest
   bardzo szybki.

2T[EKPCPKG Y QDUCTG QDTCW UEGP[

   Nale ałoby jeszcze sprecyzować, co nale y rozumieć pod pojęciem przycinania w obszarze rzutu ekranu.
   Sytuacja wejściowa prezentowana jest na rysunku 10.6: wielokąt jest gotowy do odrysowania, ale jego
   fragment wystaje poza jedną z prostych wyznaczających obszar obrazu sceny. Nie jest to problem, o ile
   przycinanie ma nastąpić w pionie. Wystarczy rozpocząć pętlę odrysowywania wielokąta od wierzchołka
   uzyskanego przez obliczenie punktu przecięcia trójkąta z obszarem obrazu. Wyliczenie takie to zaledwie
   jeden dodatkowy wiersz kodu programu. W przypadku przecięcia z lewą bądź prawą krawędzią obrazu
   procedura odrysowywania jest nieco inna: przycinane są kolejne linie tworzone w pętli odrysowywania.
   Jest to szybsze ni przycinanie ka dego wystającego trójkąta do wszystkich czterech płaszczyzn ostrosłu-
   pa widzenia. To ostatnie oznacza bowiem dodanie do sceny potencjalnie wielu nowych wielokątów, a co
   za tym idzie, oznacza konieczność wyliczania nowych współrzędnych teksturowania, przeliczania wekto-
   rów normalnych wielokątów i wierzchołków i tak dalej. Tymczasem a nadto obcią ające obliczeniowo
   jest ju samo przycinanie do bliskiej płaszczyzny przycinania.
760          Część III   Podstawy renderowania 3D



4[UWPGM 
Przycinanie
w obszarze obrazu
sceny, podczas
rysowywania
wielokątów




      Z drugiej strony, nie mo na dopuścić, aby przycinanie w obszarze bufora ramki doprowadziło do utraty jakich-
      kolwiek informacji 3D; będą one jeszcze potrzebne, między innymi przy okazji konstruowania bufora Z.
      Operacje w obszarze bufora ramki wymagają ostro ności: gdy dojdzie do interpolacji wartości współ-
      rzędnych z dla krawędzi wielokątów, konieczne będzie zachowanie przynajmniej współrzędnych z wierz-
      chołków. Chodzi o to, e podczas ostatecznej rasteryzacji nie mo na będzie ju realizować przycinania
      wyłącznie na podstawie wartości współrzędnych 2D. Dojdziemy do tego w stosownym czasie.


1OÎYKGPKG CNIQT[VOÎY RT[EKPCPKC
      Przed wkroczeniem w obszar teorii algorytmów przycinania chciałbym uprzedzić, e „powa ne” nazwy
      co niektórych algorytmów niekiedy rozśmieszają, a to dlatego, e ka dy z nich mo na wymyślić samemu
      — wszystkie są po prostu formalizacją tego, co w domu robi ka dy, kto zajmuje się choć trochę algoryt-
      mami graficznymi. Nazewnictwo algorytmów jest zresztą nieodłącznym problemem grafiki komputero-
      wej: co i raz ktoś wymyśla „nowy” algorytm i publikuje go; odtąd zaczyna on funkcjonować pod pewną
      nazwą, niezale nie od innych nazw tego samego algorytmu publikowanego gdzie indziej. Nie zawsze
      zresztą nowa nazwa starego algorytmu jest dziełem samego autora publikacji — często czytelnicy zaczynają
      odwoływać się do „nowego” algorytmu pod nową nazwą.

      Przycinanie to koncepcja na tyle prosta, e śmieszne byłoby sądzić, e została „odkryta” przez jedną kon-
      kretną osobę. Ka dy algorytm przycinania jest pewnym wcieleniem zdroworozsądkowego podejścia do
      przetwarzania grafiki i opiera się na wyliczaniu punktów przecięcia wierzchołków. Algorytmy takie
      „produkuje” się zwykle pod presją pojawiających się zadań — niejednokrotnie wywa a się wtedy otwarte
      ju drzwi. Do czego zmierzam? Otó nieco dalej wymienione zostaną z nazwy pewne powszechnie przy-
      jęte algorytmy przycinania, jednak nie powinniście na ich podstawie wyrabiać sobie poglądu, e są one
      jedynymi mo liwymi wcieleniami przycinania. Jak Wam zapewne wiadomo, programista niejednokrotnie
      spędza całe godziny na rozwiązaniu problemu, po czym dowiaduje się, e jego rozwiązanie jest bardzo
      podobne do ju istniejących algorytmów. W przypadku algorytmów przycinania byłoby prościej, gdyby
      ich nazwy były bardziej opisowe. Istniejące nazwy brzmią przecie jak nazwy kancelarii prawniczych!
Rozdział 10.   Przycinanie scen 3D          761



   Wydaje się, e aby algorytm otrzymał nazwę, powinien cechować się pewnym wyrafinowaniem, powo-
   dującym, e opisywana przezeń technika nie jest bynajmniej oczywista dla osób średnio tylko zaawanso-
   wanych w danej dziedzinie. Zgodnie z takim rozumowaniem uzasadnione jest uhonorowanie wynalazcy
   algorytmu drzewa BSP (ang. binary space partitioning) przez nadanie mu jego imienia — podział trój-
   wymiarowej przestrzeni BSP nie jest bowiem algorytmem trywialnym. Kiedy jednak chodzi o przycina-
   nie wielokąta do innego wielokąta, opracowanie algorytmu wymaga godziny (mo e dwóch) zastanowie-
   nia, spędzonego na kombinowaniu metod przycinania odcinków, klasyfikacji wierzchołków, kodowania
   bitowego czy parametrycznych reprezentacji prostych. I tyle!

                Mam zamiar, rzecz jasna, zachęcić Was do eksperymentów. Co prawda, dziewięćdziesiąt
                dziewięć procent rozwiązywanych w ten sposób problemów doczekało się już rozwiązania,
                nie oznacza o jednak, że rozwiązania te zostały gdziekolwiek opublikowane.

   Dosyć narzekania. Do dzieła! Przystąpimy teraz do omówienia — z teoretycznego punktu widzenia —
   najpopularniejszych algorytmów przycinania, po czym zajmiemy się implementacją takiego algorytmu na
   potrzeby naszego silnika graficznego. Prezentowany algorytm, jako e powstał pod presją konkretnego
   problemu, będzie hybrydą wielu pomysłów. Na początek nieco informacji podstawowych.

2T[EKPCPKG           RQFUVCY[

   Przycinanie wielokątów sprowadza się do przycinania odcinków, co z kolei sprowadza się do określania,
   czy pewne punkty zawierają się w danym obszarze dwuwymiarowym bądź w trójwymiarowej bryle. Ilu-
   stracją problemu w jego postaci ogólnej jest rysunek 10.7. Otó dany jest zbiór odcinków, tworzących
   wchodzące w skład sceny wielokąty, które mają zostać później poddane rzutowaniu. Nale y określić, czy
   elementy te mieszczą się w pewnych zadanych granicach. Da się to sprowadzić do określenia, czy w gra-
   nicach tych mieszczą się pojedyncze punkty charakterystyczne elementów. Innymi słowy, dane trójkąty
   determinowane są trzema wierzchołkami, łączonymi trzema odcinkami (krawędziami). Choć to właśnie
   krawędzie nadają trójkątowi zarys, naprawdę wa ne są jedynie wierzchołki. Stąd, na najwy szym pozio-
   mie ogólności, problem sprowadza się do sprawdzenia, czy punkt o współrzędnych (x, y) bądź (x, y, z)
   znajduje się w zadanym obszarze (bryle), a więc do testu zawierania się punktu.

4[UWPGM 
Test zawierania się
na płaszczyźnie
dwuwymiarowej
762             Część III     Podstawy renderowania 3D



      6GUV CYKGTCPKC UKú RWPMVW Y QDUCTG 

      Dla danego punktu p0(x, y) i prostokątnego obszaru wyznaczanego prostymi xmin, xmax, ymin, ymax
      (patrz rysunek 10.7), punkt p0 zawiera się w zadanym obszarze, je eli spełnia następujące nierówności:
          ZOKP  Z  ZOCZ

      i
          [OKP  [  [OCZ


      6GUV[ CYKGTCPKC UKú RWPMVW Y DT[NG 

      Przypadek 1. Zawieranie się punktu w bryle prostopadłościennej.

      Dla danego punktu p0(x, y, z) i prostopadłościennego obszaru wyznaczonego płaszczyznami xmin, ymin,
      zmin, xmax, ymax, zmax (patrz rysunek 10.8), punkt p0 zawiera się w zadanym obszarze, je eli spełnia
      następujące nierówności:




4[UWPGM  Testowanie zawierania się punktu w bryle 3D

          ZOKP  Z  ZOCZ

      i
          [OKP  [  [OCZ

      i
          OKP    OCZ

      Pojawia się tu wątpliwość, czy warto zawracać sobie głowę przycinaniem do bryły prostopadłościennej,
      je eli z góry wiadomo, e ostrosłup widzenia taką bryłą nie jest? To prawda, ale wystarczy przypomnieć
      sobie omówienie rzutowania i dyskutowany przy tej okazji efekt „prostowania” ostrosłupa widzenia wła-
      śnie do postaci bryły prostopadłościennej. W takim przypadku przycinanie sprowadza się do trywialnych
      porównań współrzędnych wierzchołków wielokątów sceny ze współrzędnymi wierzchołków ścian bryły
      zawierania. Nikt te nie mówił, e przycinanie realizowane jest wyłącznie do ostrosłupa widzenia —
      przecie promienie lasera wystrzeliwane w grze warto przyciąć równie do jakiejś skończonej bryły w rozle-
      głym świecie gry kosmicznej, aby nie przeliczać ich pozycji w nieskończoność, gdy dawno opuściły pe-
      netrowany układ planetarny.
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty
Triki najlepszych programistów gier 3D. Vademecum profesjonalisty

More Related Content

What's hot

Java. Tworzenie gier
Java. Tworzenie gierJava. Tworzenie gier
Java. Tworzenie gier
Wydawnictwo Helion
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistym
Wydawnictwo Helion
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Wydawnictwo Helion
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
Wydawnictwo Helion
 
CorelDraw X3 PL. Kurs
CorelDraw X3 PL. KursCorelDraw X3 PL. Kurs
CorelDraw X3 PL. Kurs
Wydawnictwo Helion
 
Flash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowaneFlash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowane
Wydawnictwo Helion
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
Wydawnictwo Helion
 
3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania
Wydawnictwo Helion
 
C++ bez obaw
C++ bez obawC++ bez obaw
C++ bez obaw
Wydawnictwo Helion
 
Flash MX 2004. Tworzenie gier
Flash MX 2004. Tworzenie gierFlash MX 2004. Tworzenie gier
Flash MX 2004. Tworzenie gier
Wydawnictwo Helion
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wydawnictwo Helion
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
Wydawnictwo Helion
 
OpenGL. Ćwiczenia
OpenGL. ĆwiczeniaOpenGL. Ćwiczenia
OpenGL. Ćwiczenia
Wydawnictwo Helion
 
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznikAdobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Wydawnictwo Helion
 
Photoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. BibliaPhotoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. Biblia
Wydawnictwo Helion
 
Blender 2.3. Oficjalny podręcznik
Blender 2.3. Oficjalny podręcznikBlender 2.3. Oficjalny podręcznik
Blender 2.3. Oficjalny podręcznik
Wydawnictwo Helion
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
Wydawnictwo Helion
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
Wydawnictwo Helion
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
Wydawnictwo Helion
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
Wydawnictwo Helion
 

What's hot (20)

Java. Tworzenie gier
Java. Tworzenie gierJava. Tworzenie gier
Java. Tworzenie gier
 
Język Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistymJęzyk Cg. Programowanie grafiki w czasie rzeczywistym
Język Cg. Programowanie grafiki w czasie rzeczywistym
 
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatceFlash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
Flash CS3 Professional PL. Techniki zaawansowane. Klatka po klatce
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
 
CorelDraw X3 PL. Kurs
CorelDraw X3 PL. KursCorelDraw X3 PL. Kurs
CorelDraw X3 PL. Kurs
 
Flash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowaneFlash MX. Ćwiczenia zaawansowane
Flash MX. Ćwiczenia zaawansowane
 
C++. Sztuka programowania
C++. Sztuka programowaniaC++. Sztuka programowania
C++. Sztuka programowania
 
3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania3ds max 5. Projekty i rozwiązania
3ds max 5. Projekty i rozwiązania
 
C++ bez obaw
C++ bez obawC++ bez obaw
C++ bez obaw
 
Flash MX 2004. Tworzenie gier
Flash MX 2004. Tworzenie gierFlash MX 2004. Tworzenie gier
Flash MX 2004. Tworzenie gier
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
 
DirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistymDirectX. Rendering w czasie rzeczywistym
DirectX. Rendering w czasie rzeczywistym
 
OpenGL. Ćwiczenia
OpenGL. ĆwiczeniaOpenGL. Ćwiczenia
OpenGL. Ćwiczenia
 
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznikAdobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
Adobe Illustrator CS3/CS3 PL. Oficjalny podręcznik
 
Photoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. BibliaPhotoshop CS3/CS3 PL. Biblia
Photoshop CS3/CS3 PL. Biblia
 
Blender 2.3. Oficjalny podręcznik
Blender 2.3. Oficjalny podręcznikBlender 2.3. Oficjalny podręcznik
Blender 2.3. Oficjalny podręcznik
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
 

Viewers also liked

W obronie wolności
W obronie wolnościW obronie wolności
W obronie wolności
Wydawnictwo Helion
 
ABC Word 2003 PL
ABC Word 2003 PLABC Word 2003 PL
ABC Word 2003 PL
Wydawnictwo Helion
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
Wydawnictwo Helion
 
J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2
Wydawnictwo Helion
 
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowyAutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
Wydawnictwo Helion
 
ABC komputera. Wydanie IV
ABC komputera. Wydanie IVABC komputera. Wydanie IV
ABC komputera. Wydanie IV
Wydawnictwo Helion
 
Rozbudowa i naprawa sieci. Wydanie II
Rozbudowa i naprawa sieci. Wydanie IIRozbudowa i naprawa sieci. Wydanie II
Rozbudowa i naprawa sieci. Wydanie II
Wydawnictwo Helion
 
PartitionMagic. Ćwiczenia
PartitionMagic. ĆwiczeniaPartitionMagic. Ćwiczenia
PartitionMagic. Ćwiczenia
Wydawnictwo Helion
 
Podstawy fotomontażu i tworzenia kolaży
Podstawy fotomontażu i tworzenia kolażyPodstawy fotomontażu i tworzenia kolaży
Podstawy fotomontażu i tworzenia kolaży
Wydawnictwo Helion
 
ABC nagrywania płyt CD. Wydanie II
ABC nagrywania płyt CD. Wydanie IIABC nagrywania płyt CD. Wydanie II
ABC nagrywania płyt CD. Wydanie II
Wydawnictwo Helion
 
Web Design. Projektowanie atrakcyjnych stron WWW
Web Design. Projektowanie atrakcyjnych stron WWWWeb Design. Projektowanie atrakcyjnych stron WWW
Web Design. Projektowanie atrakcyjnych stron WWW
Wydawnictwo Helion
 
Zarządzanie i marketing. Spektakularne sukcesy i porażki
Zarządzanie i marketing. Spektakularne sukcesy i porażkiZarządzanie i marketing. Spektakularne sukcesy i porażki
Zarządzanie i marketing. Spektakularne sukcesy i porażki
Wydawnictwo Helion
 
Leksykon hackingu
Leksykon hackinguLeksykon hackingu
Leksykon hackingu
Wydawnictwo Helion
 

Viewers also liked (13)

W obronie wolności
W obronie wolnościW obronie wolności
W obronie wolności
 
ABC Word 2003 PL
ABC Word 2003 PLABC Word 2003 PL
ABC Word 2003 PL
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 
J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2
 
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowyAutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
AutoCAD 2002 i 2002 PL. Leksykon kieszonkowy
 
ABC komputera. Wydanie IV
ABC komputera. Wydanie IVABC komputera. Wydanie IV
ABC komputera. Wydanie IV
 
Rozbudowa i naprawa sieci. Wydanie II
Rozbudowa i naprawa sieci. Wydanie IIRozbudowa i naprawa sieci. Wydanie II
Rozbudowa i naprawa sieci. Wydanie II
 
PartitionMagic. Ćwiczenia
PartitionMagic. ĆwiczeniaPartitionMagic. Ćwiczenia
PartitionMagic. Ćwiczenia
 
Podstawy fotomontażu i tworzenia kolaży
Podstawy fotomontażu i tworzenia kolażyPodstawy fotomontażu i tworzenia kolaży
Podstawy fotomontażu i tworzenia kolaży
 
ABC nagrywania płyt CD. Wydanie II
ABC nagrywania płyt CD. Wydanie IIABC nagrywania płyt CD. Wydanie II
ABC nagrywania płyt CD. Wydanie II
 
Web Design. Projektowanie atrakcyjnych stron WWW
Web Design. Projektowanie atrakcyjnych stron WWWWeb Design. Projektowanie atrakcyjnych stron WWW
Web Design. Projektowanie atrakcyjnych stron WWW
 
Zarządzanie i marketing. Spektakularne sukcesy i porażki
Zarządzanie i marketing. Spektakularne sukcesy i porażkiZarządzanie i marketing. Spektakularne sukcesy i porażki
Zarządzanie i marketing. Spektakularne sukcesy i porażki
 
Leksykon hackingu
Leksykon hackinguLeksykon hackingu
Leksykon hackingu
 

Similar to Triki najlepszych programistów gier 3D. Vademecum profesjonalisty

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Wydawnictwo Helion
 
J2ME. Praktyczne projekty
J2ME. Praktyczne projektyJ2ME. Praktyczne projekty
J2ME. Praktyczne projekty
Wydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
Wydawnictwo Helion
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
Wydawnictwo Helion
 
ABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie IIABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie II
Wydawnictwo Helion
 
JavaScript i DHTML. Receptury
JavaScript i DHTML. RecepturyJavaScript i DHTML. Receptury
JavaScript i DHTML. Receptury
Wydawnictwo Helion
 
ABC komputera. Wydanie V
ABC komputera. Wydanie VABC komputera. Wydanie V
ABC komputera. Wydanie V
Wydawnictwo Helion
 
Darmowe programy do projektowania 3D
Darmowe programy do projektowania 3DDarmowe programy do projektowania 3D
Darmowe programy do projektowania 3D
3DKreator
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
Wydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
Wydawnictwo Helion
 
Win32ASM. Asembler w Windows
Win32ASM. Asembler w WindowsWin32ASM. Asembler w Windows
Win32ASM. Asembler w Windows
Wydawnictwo Helion
 
EdgeCAM. Komputerowe wspomaganie wytwarzania
EdgeCAM. Komputerowe wspomaganie wytwarzaniaEdgeCAM. Komputerowe wspomaganie wytwarzania
EdgeCAM. Komputerowe wspomaganie wytwarzania
Wydawnictwo Helion
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
Wydawnictwo Helion
 
Blender. Podstawy modelowania
Blender. Podstawy modelowaniaBlender. Podstawy modelowania
Blender. Podstawy modelowania
Wydawnictwo Helion
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
Wydawnictwo Helion
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
Wydawnictwo Helion
 
Windows XP PL. Ilustrowany przewodnik
Windows XP PL. Ilustrowany przewodnikWindows XP PL. Ilustrowany przewodnik
Windows XP PL. Ilustrowany przewodnik
Wydawnictwo Helion
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
Wydawnictwo Helion
 
Solid Edge. Komputerowe wspomaganie projektowania
Solid Edge. Komputerowe wspomaganie projektowaniaSolid Edge. Komputerowe wspomaganie projektowania
Solid Edge. Komputerowe wspomaganie projektowania
Wydawnictwo Helion
 
C# i .NET
C# i .NETC# i .NET

Similar to Triki najlepszych programistów gier 3D. Vademecum profesjonalisty (20)

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
J2ME. Praktyczne projekty
J2ME. Praktyczne projektyJ2ME. Praktyczne projekty
J2ME. Praktyczne projekty
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
ABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie IIABC grafiki komputerowej. Wydanie II
ABC grafiki komputerowej. Wydanie II
 
JavaScript i DHTML. Receptury
JavaScript i DHTML. RecepturyJavaScript i DHTML. Receptury
JavaScript i DHTML. Receptury
 
ABC komputera. Wydanie V
ABC komputera. Wydanie VABC komputera. Wydanie V
ABC komputera. Wydanie V
 
Darmowe programy do projektowania 3D
Darmowe programy do projektowania 3DDarmowe programy do projektowania 3D
Darmowe programy do projektowania 3D
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1CorelDRAW 11. Vademecum profesjonalisty. Tom 1
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
 
Win32ASM. Asembler w Windows
Win32ASM. Asembler w WindowsWin32ASM. Asembler w Windows
Win32ASM. Asembler w Windows
 
EdgeCAM. Komputerowe wspomaganie wytwarzania
EdgeCAM. Komputerowe wspomaganie wytwarzaniaEdgeCAM. Komputerowe wspomaganie wytwarzania
EdgeCAM. Komputerowe wspomaganie wytwarzania
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
Blender. Podstawy modelowania
Blender. Podstawy modelowaniaBlender. Podstawy modelowania
Blender. Podstawy modelowania
 
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2CorelDRAW 11. Vademecum profesjonalisty. Tom 2
CorelDRAW 11. Vademecum profesjonalisty. Tom 2
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
 
Windows XP PL. Ilustrowany przewodnik
Windows XP PL. Ilustrowany przewodnikWindows XP PL. Ilustrowany przewodnik
Windows XP PL. Ilustrowany przewodnik
 
ABC grafiki komputerowej
ABC grafiki komputerowejABC grafiki komputerowej
ABC grafiki komputerowej
 
Solid Edge. Komputerowe wspomaganie projektowania
Solid Edge. Komputerowe wspomaganie projektowaniaSolid Edge. Komputerowe wspomaganie projektowania
Solid Edge. Komputerowe wspomaganie projektowania
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Triki najlepszych programistów gier 3D. Vademecum profesjonalisty

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ Triki najlepszych SPIS TRE CI programistów gier 3D. KATALOG KSI¥¯EK Vademecum profesjonalisty Autor: Andre LaMothe KATALOG ONLINE T³umaczenie: Adam Bochenek (wstêp, rozdz. 1 –3), Jaros³aw Dobrzañski (rozdz. 6 – 9), S³awomir ZAMÓW DRUKOWANY KATALOG Dzieniszewski (rozdz. 14 – 16, dod. A – F) ISBN: 83-7361-267-X Tytu³ orygina³u: Tricks of the 3D Game Programming Gurus TWÓJ KOSZYK Format: B5, stron: 1312 DODAJ DO KOSZYKA Swoje triki zdradz¹ Ci prawdziwi guru ze wiata twórców gier Tworzenie gier 3D wymaga opanowania nie tylko jêzyka programowania, ale tak¿e wielu innych dziedzin wiedzy -- analizy matematycznej, rachunku macierzowego CENNIK I INFORMACJE i wektorowego oraz geometrii. Oczywi cie ka¿da z tych nauk zosta³a ju¿ opisana w dziesi¹tkach tomów. Ksi¹¿ka, któr¹ trzymasz w rêce, zawiera wszystkie informacje ZAMÓW INFORMACJE niezbêdne do stworzenia gry 3D dzia³aj¹cej w rodowisku Windows, zebrane w jednym O NOWO CIACH tomie. Korzystaj¹c z niej, nie bêdziesz ju¿ musia³ przerzucaæ tysiêcy stron w poszukiwaniu potrzebnego Ci wzoru. ZAMÓW CENNIK Autor ksi¹¿ki, wykorzystuj¹c ponad dwudziestopiêcioletnie do wiadczenie w programowaniu, przedstawi Ci: CZYTELNIA • algorytmy matematyczne wykorzystywane w grafice 3D, • zasady programowania w Windows i DirectX, FRAGMENTY KSI¥¯EK ONLINE • algorytmy wy wietlania grafiki 2D i 3D, • techniki animacji i renderingu 3D, • mapowanie tekstur, • techniki symulacji o wietlenia i wiele innych informacji. Korzystaj¹c z tej ksi¹¿ki, opracujesz doskona³y, oparty wy³¹cznie na warstwie oprogramowania silnik 3D dla gry, wykorzystasz w swoich grach modele i postaci stworzone w programach 3D, stworzysz realistyczn¹ sceneriê gry 3D i zoptymalizujesz kod ród³owy programu pod k¹tem szybko ci jego wykonywania. O autorze: Andre LaMothe to autor uznanych przez rynek ksi¹¿ek o programowaniu gier i grafiki trójwymiarowej. Ci¹g jego sukcesów wydawniczych zapocz¹tkowa³o pierwsze wydanie Wydawnictwo Helion tej ksi¹¿ki (ustanowi³o ono swego czasu standardy programowania gier dla systemu ul. Chopina 6 DOS). Andre LaMothe programuje od ponad 25 lat i oprócz niew¹tpliwej praktyki 44-100 Gliwice posiada stosowne wykszta³cenie z zakresu matematyki, informatyki i elektrotechniki. tel. (32)230-98-63 Znany jest równie¿ jako za³o¿yciel firm Xtreme Games LCC, Nurve Networks i XGDC. e-mail: helion@helion.pl
  • 2. 5RKU VTG EK 1 #WVQTG 2TGFOQYC 9UVúR %ú è + 9RTQYCFGPKG FQ RTQITCOQYCPKC IKGT 4QFKC 9UVúR FQ RTQITCOQYCPKC IKGT Wprowadzenie .......................................................................................................................27 Elementy gier 2D/3D .............................................................................................................29 Ogólne wskazówki dotyczące programowania gier ..............................................................33 Narzędzia ...............................................................................................................................36 Edytor poziomów 3D.......................................................................................................39 Przygotowanie kompilatora.............................................................................................40 Przykładowa gra 3D: Raiders 3D ..........................................................................................43 Pętla obsługi zdarzeń .......................................................................................................62 Logika gry 3D..................................................................................................................62 Rzutowanie 3D ................................................................................................................64 Gwiezdne tło....................................................................................................................66 Działo laserowe i wykrywanie kolizji .............................................................................66 Eksplozja .........................................................................................................................66 Zasady gry .......................................................................................................................67 Podsumowanie .......................................................................................................................67 4QFKC -TÎVMK MWTU RTQITCOQYCPKC Y 9KPFQYU K KTGEV: Model programowania Win32 ...............................................................................................69 Programowanie w Windows — absolutne minimum ............................................................70 Wszystko zaczyna się od WinMain() ..............................................................................70 Wzorcowa aplikacja Windows ..............................................................................................75 Klasa okna .......................................................................................................................76 Rejestracja klasy okna .....................................................................................................80 Tworzenie okna ...............................................................................................................80 Obsługa zdarzeń ..............................................................................................................82 Pętla obsługi komunikatów .............................................................................................87 Pętla obsługi komunikatów pracująca w czasie rzeczywistym .......................................90 DirectX i COM w pigułce......................................................................................................91 HEL i HAL ......................................................................................................................93 Komponenty DirectX ......................................................................................................94 Wprowadzenie do COM ........................................................................................................95 Co to jest obiekt COM? ...................................................................................................96 Tworzenie i u ywanie interfejsów COM biblioteki DirectX ..........................................98 Dostęp do interfejsów......................................................................................................98 Podsumowanie .....................................................................................................................100
  • 3. 6 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty 4QFKC #DUVTCME[LP[ MQORWVGT Zało enia interfejsu abstrakcyjnego komputera ..................................................................101 Budujemy abstrakcyjny komputer .......................................................................................103 System video, bufor ramki.............................................................................................103 Praca z kolorami ............................................................................................................106 Kopiowanie bufora ........................................................................................................108 Kompletny system graficzny abstrakcyjnego komputera..............................................110 Dźwięk, muzyka, urządzenia wejścia............................................................................110 Konsola do gier T3DLIB .....................................................................................................111 Podstawowa konsola do gier .........................................................................................111 Biblioteka T3DLIB ..............................................................................................................116 Architektura modułu graficznego..................................................................................117 Podstawowe definicje ....................................................................................................117 Makra.............................................................................................................................119 Typy danych, struktury..................................................................................................119 Funkcje ..........................................................................................................................122 Globalna dominacja.......................................................................................................125 Interfejs DirectDraw ......................................................................................................126 Funkcje operujące na figurach 2D.................................................................................130 Funkcje matematyczne i obsługa błędów......................................................................136 Mapy bitowe ..................................................................................................................138 Obsługa palety w trybie 8-bitowym ..............................................................................142 Funkcje pomocnicze ......................................................................................................145 Obiekty BOB .................................................................................................................146 T3DLIB2 — moduł obsługi urządzeń wejścia ....................................................................154 T3DLIB3 — biblioteka obsługi dźwięku i muzyki .............................................................159 Definicje ........................................................................................................................160 Typy...............................................................................................................................160 Zmienne globalne ..........................................................................................................161 DirectSound API............................................................................................................161 DirectMusic API............................................................................................................166 Ostateczna postać konsoli T3D............................................................................................168 Przypisanie funkcji graficznych abstrakcyjnemu modelowi .........................................168 Konsola T3DLIB ...........................................................................................................171 Przykładowe aplikacje .........................................................................................................179 Aplikacje okienkowe .....................................................................................................179 Aplikacje pełnoekranowe ..............................................................................................180 Dźwięk i muzyka ...........................................................................................................181 Klawiatura, myszka, joystick.........................................................................................181 Podsumowanie .....................................................................................................................184 %ú è ++ 1DNKEGPKC K VTCPUHQTOCELG Y VTGEJ Y[OKCTCEJ 4QFKC 6T[IQPQOGVTKC YGMVQT[ OCEKGTG K MYCVGTPKQP[ EC C VC OCVGOCV[MC Notacje matematyczne .........................................................................................................187 Dwuwymiarowe układy współrzędnych..............................................................................188 Dwuwymiarowy układ współrzędnych kartezjańskich .................................................189 Dwuwymiarowy układ współrzędnych biegunowych...................................................190 Trójwymiarowe układy współrzędnych...............................................................................193 Trójwymiarowe współrzędne kartezjańskie ..................................................................193 Trójwymiarowe współrzędne cylindryczne.........................................................................196 Konwersja trójwymiarowych współrzędnych kartezjańskich do współrzędnych cylindrycznych..............................................................................196
  • 4. Spis treści 7 Trójwymiarowe współrzędne sferyczne ..............................................................................197 Podstawy trygonometrii.......................................................................................................198 Trójkąt prostokątny........................................................................................................199 Odwrotne funkcje trygonometryczne ............................................................................200 Zale ności trygonometryczne........................................................................................201 Wektory ...............................................................................................................................202 Długość wektora ............................................................................................................203 Normalizacja..................................................................................................................204 Mno enie wektora przez wartości skalarne...................................................................204 Dodawanie wektorów ....................................................................................................205 Odejmowanie wektorów................................................................................................206 Iloczyn skalarny wektorów............................................................................................206 Iloczyn wektorowy ........................................................................................................209 Wektor zerowy ..............................................................................................................211 Wektory poło enia i wektory przemieszczenia .............................................................211 Wektory jako kombinacje liniowe składowych.............................................................211 Macierze i algebra liniowa...................................................................................................212 Macierz jednostkowa.....................................................................................................214 Dodawanie macierzy .....................................................................................................214 Transpozycja macierzy ..................................................................................................215 Mno enie macierzy........................................................................................................215 Reguły mno enia macierzy ...........................................................................................217 Wyznaczanie macierzy odwrotnej i rozwiązywanie układów równań ................................217 Reguła Cramera .............................................................................................................219 Przekształcenia geometryczne z wykorzystaniem macierzy .........................................221 Współrzędne jednorodne ...............................................................................................222 Przekształcenia macierzowe ..........................................................................................223 Podstawowe obiekty geometryczne.....................................................................................230 Punkty............................................................................................................................230 Proste .............................................................................................................................230 Proste w przestrzeni trójwymiarowej ............................................................................232 Płaszczyzny ...................................................................................................................234 Równania parametryczne.....................................................................................................238 Proste parametryczne na płaszczyźnie i w przestrzeni trójwymiarowej .......................238 Parametryczne definicje odcinków, wykorzystujące zwykły wektor kierunkowy v.....239 Parametryczne definicje odcinków, wykorzystujące jednostkowy wektor kierunkowy |v| = 1 ...........................................240 Parametryczne proste w przestrzeni trójwymiarowej....................................................241 Kwaterniony — wprowadzenie ...........................................................................................246 Teoria liczb zespolonych ...............................................................................................247 Rozszerzenie liczb zespolonych ....................................................................................252 Zastosowania kwaternionów .........................................................................................257 Wstęp do analizy matematycznej ........................................................................................261 Pojęcie nieskończoności ................................................................................................261 Granice...........................................................................................................................263 Sumy i szeregi liczbowe skończone ..............................................................................264 Szeregi liczbowe nieskończone .....................................................................................266 Pochodne .......................................................................................................................267 Całki...............................................................................................................................274 Podsumowanie .....................................................................................................................279 4QFKC +ORNGOGPVCELC OQFW W OCVGOCV[EPGIQ Moduł matematyczny — przegląd.......................................................................................282 Struktura plików modułu matematycznego...................................................................282 Konwencja nazewnicza .................................................................................................282
  • 5. 8 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty Obsługa błędów .............................................................................................................283 Słowo na temat języka C++...........................................................................................284 Struktury i typy danych........................................................................................................284 Wektory i punkty ...........................................................................................................284 Równania parametryczne prostych................................................................................286 Płaszczyzny w przestrzeni trójwymiarowej ..................................................................287 Macierze ........................................................................................................................287 Kwaterniony ..................................................................................................................290 Obsługa współrzędnych niekartezjańskich....................................................................291 Dwuwymiarowy układ współrzędnych biegunowych...................................................292 Trójwymiarowy układ współrzędnych cylindrycznych ................................................293 Trójwymiarowy układ współrzędnych sferycznych......................................................293 Liczby stałoprzecinkowe ...............................................................................................294 Stałe matematyczne .............................................................................................................295 Makrodefinicje i funkcje rozwijane w miejscu wywołania .................................................297 Funkcje u ytkowe i funkcje konwersji..........................................................................301 Funkcje manipulujące punktami i wektorami ...............................................................301 Macierze ........................................................................................................................302 Kwaterniony ..................................................................................................................304 Obliczenia stałoprzecinkowe.........................................................................................304 Prototypy..............................................................................................................................305 Zmienne globalne ................................................................................................................308 Interfejs programowy modułu matematycznego .................................................................308 Funkcje trygonometryczne ............................................................................................309 Funkcje obsługi ró nych układów współrzędnych........................................................310 Funkcje obsługi wektorów.............................................................................................313 Funkcje operujące na macierzach..................................................................................321 Funkcje operujące parametryczną reprezentacją prostych na płaszczyźnie i w przestrzeni trójwymiarowej ........................................................333 Funkcje obsługi płaszczyzn trójwymiarowych..............................................................337 Funkcje obsługi kwaternionów......................................................................................341 Funkcje obliczeń stałoprzecinkowych...........................................................................350 Funkcje rozwiązujące równania macierzowe ................................................................355 Elementarz arytmetyki zmiennoprzecinkowej z wykorzystaniem koprocesora..................357 Architektura jednostki zmiennoprzecinkowej ...............................................................358 Stos jednostki zmiennoprzecinkowej ............................................................................359 Zestaw instrukcji jednostki FPU....................................................................................361 Klasyczny tryb adresowania operandów .......................................................................364 Tryb adresowania operandów z odwołaniem do pamięci .............................................364 Tryb adresowania operandów z odwołaniem do rejestru ..............................................365 Adresowanie operandów ze zdjęciem operandu ze stosu..............................................365 Przykłady zastosowania instrukcji jednostki FPU.........................................................366 Instrukcje FLD...............................................................................................................366 Instrukcje FST ...............................................................................................................367 Instrukcje FADD ...........................................................................................................368 Instrukcje FSUB ............................................................................................................371 Instrukcje FMUL ...........................................................................................................372 Instrukcje FDIV.............................................................................................................373 Stosowanie modułu matematycznego — uwagi ..................................................................374 Nowy szablon aplikacji .................................................................................................375 Słowo o optymalizacji modułu ............................................................................................375 Podsumowanie .....................................................................................................................376
  • 6. Spis treści 9 4QFKC 9RTQYCFGPKG FQ ITCHKMK Filozofia silnika 3D .............................................................................................................377 Struktura silnika gry 3D.......................................................................................................378 Silnik 3D........................................................................................................................378 Silnik gry .......................................................................................................................379 System sterowania grą i gry sieciowej ..........................................................................379 System animacji.............................................................................................................379 Wykrywanie kolizji i system nawigacji.........................................................................384 Moduł fizyki ..................................................................................................................384 System sztucznej inteligencji.........................................................................................386 Baza modeli 3D i grafiki ...............................................................................................387 Układy współrzędnych trójwymiarowych ...........................................................................388 Współrzędne modelu (lokalne)......................................................................................389 Współrzędne świata gry.................................................................................................392 Współrzędne kamery .....................................................................................................396 Ostateczna reprezentacja świata 3D za pomocą współrzędnych kamery......................404 Usuwanie ukrytych obiektów (powierzchni) i przycinanie...........................................405 Współrzędne perspektywy.............................................................................................411 Zakończenie potoku — współrzędne ekranowe............................................................422 Podstawowe struktury danych 3D .......................................................................................430 Reprezentacje danych opisujących wielokąty w grafice 3D .........................................431 Definiowanie wielokątów..............................................................................................433 Definiowanie obiektów..................................................................................................439 Reprezentowanie światów .............................................................................................443 Narzędzia 3D .......................................................................................................................443 Animacja i dane o ruchu................................................................................................445 Ładowanie danych ze źródeł zewnętrznych ........................................................................446 Pliki PLG .......................................................................................................................446 Pliki NFF .......................................................................................................................449 Pliki 3D Studio ..............................................................................................................452 Pliki COB firmy Caligari...............................................................................................459 Pliki .X Microsoft DirectX ............................................................................................461 Formaty plików 3D — podsumowanie .........................................................................461 Proste przekształcenia i animacja ........................................................................................462 Przesunięcie w przestrzeni.............................................................................................462 Obrót w przestrzeni .......................................................................................................463 Zmiana kształtu..............................................................................................................465 Podsumowanie potoku 3D ...................................................................................................466 Typy silników 3D ................................................................................................................467 Silniki przestrzeni kosmicznej.......................................................................................468 Silniki terenu..................................................................................................................468 Silniki pomieszczeń zamkniętych .................................................................................470 Ray casting i silniki wokselowe ....................................................................................471 Silniki hybrydowe..........................................................................................................472 Integracja całości w ostateczną postać silnika .....................................................................472 Podsumowanie .....................................................................................................................473 4QFKC 4GPFGTQYCPKG YKCVÎY UMKGNGVQY[EJ Y Ogólna architektura silnika szkieletowego ..........................................................................475 Struktury danych i potok 3D .........................................................................................476 Główna lista wielokątów ...............................................................................................479 Nowe moduły programowe ...........................................................................................482 Piszemy program ładujący pliki 3D.....................................................................................482 Program ładujący pliki PLG (PLX)...............................................................................485
  • 7. 10 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty Budowanie potoku 3D .........................................................................................................491 Ogólne funkcje przekształcające ...................................................................................491 Przekształcenie współrzędnych lokalnych na współrzędne świata 3D .........................497 Eulerowski model kamery .............................................................................................500 Model kamery UVN ......................................................................................................503 Przekształcenie współrzędnych świata na współrzędne kamery...................................515 Usuwanie obiektów .......................................................................................................519 Usuwanie ścian zwróconych tyłem ...............................................................................523 Przekształcenie współrzędnych kamery na współrzędne perspektywy.........................526 Przekształcenie współrzędnych perspektywy na współrzędne ekranowe .....................530 Połączone przekształcenie do współrzędnych perspektywy i współrzędnych ekranowych......................................................................................535 Renderowanie świata 3D .....................................................................................................538 Rzut oka na potok 3D ....................................................................................................538 Programy demonstracyjne 3D .............................................................................................542 Pojedynczy trójkąt 3D — DEMOII7_1.CPP|EXE ........................................................542 Szkielet sześcianu 3D — DEMOII7_2.CPP|EXE .........................................................545 Szkielet sześcianu 3D z usuwaniem ścian zwróconych tyłem — DEMOII7_3.CPP|EXE...........................................................................................548 Czołg 3D — DEMOII7_4.CPP|EXE.............................................................................550 Czołgi 3D i latająca kamera — DEMOII7_5.CPP|EXE ...............................................553 Wycieczka po świecie gry à la Battle Zone — DEMOII7_6.CPP|EXE........................554 Podsumowanie .....................................................................................................................559 %ú è +++ 2QFUVCY[ TGPFGTQYCPKC 4QFKC /QFGNQYCPKG DT[ K RTQUVG Q YKGVNGPKG Proste modele oświetlenia w grafice komputerowej ...........................................................564 Modele kolorów i materiały ..........................................................................................566 Typy świateł ..................................................................................................................574 Oświetlanie i rasteryzacja trójkątów....................................................................................582 Przygotowania do implementacji oświetlenia ...............................................................586 Definiowanie materiałów ..............................................................................................587 Definiowanie świateł .....................................................................................................591 Cieniowanie w praktyce.......................................................................................................596 Cieniowanie w trybie 16-bitowym ................................................................................596 Cieniowanie w trybie 8-bitowym ..................................................................................597 Sprawny model RGB w trybach 8-bitowych.................................................................597 Model z uproszczonym natę eniem dla trybów 8-bitowych .........................................601 Cieniowanie jednorodne ................................................................................................605 Cieniowanie płaskie.......................................................................................................607 Cieniowanie płaskie w trybie 8-bitowym......................................................................622 Wstęp do cieniowania Gourauda...................................................................................624 Wstęp do cieniowania Phonga.......................................................................................626 Sortowanie względem głębokości i algorytm malarza ........................................................627 Praca z nowymi formatami plików ......................................................................................632 Klasa parsera..................................................................................................................632 Interpretacja funkcji pomocniczych ..............................................................................635 Format ASCII programu 3D Studio Max (.ASC)..........................................................638 Format ASCII programu trueSpace (.COB) ..................................................................641 Przegląd formatu binarnego .MD2 z gry Quake II........................................................650 Przegląd narzędzi do modelowania 3D ...............................................................................651 Podsumowanie .....................................................................................................................654
  • 8. Spis treści 11 4QFKC +PVGTRQNCE[LPG VGEJPKMK EKGPKQYCPKC K CHKPKEPG OCRQYCPKG VGMUVWT Nowe funkcje silnika T3D ...................................................................................................655 Ulepszanie struktur danych i budowy silnika T3D..............................................................657 Nowe definicje...............................................................................................................657 Nowe struktury matematyczne ......................................................................................660 Makra pomocnicze ........................................................................................................661 Dodatkowe elementy umo liwiające reprezentację danych siatki 3D ..........................662 Aktualizacja struktur obiektów i listy renderowania.....................................................668 Przegląd funkcji i prototypów .......................................................................................672 Nowe wersje procedur ładujących obiekty ..........................................................................680 Aktualizacja starego dobrego czytnika .PLG (.PLX) ....................................................680 Aktualizacja czytnika formatu .ASC z 3D Studio Max.................................................691 Aktualizacja czytnika .COB firmy Caligari ..................................................................692 Powtórka z rasteryzacji wielokątów ....................................................................................697 Rasteryzacja trójkąta......................................................................................................697 Konwencja wypełniania ................................................................................................702 Przycinanie ....................................................................................................................704 Nowe funkcje kreślące trójkąty .....................................................................................706 Zabiegi optymalizacyjne................................................................................................710 Implementacja cieniowania Gourauda.................................................................................712 Cieniowanie Gourauda bez oświetlenia ........................................................................713 Uzupełnianie procedury cieniowania Gourauda o oświetlanie wierzchołków..............723 Podstawy teorii próbkowania...............................................................................................732 Próbkowanie w jednym wymiarze ................................................................................733 Interpolacja dwuliniowa ................................................................................................735 Interpolacja u i v ............................................................................................................737 Implementacja afinicznego mapowania tekstur ............................................................739 Uwzględnienie tekstur w module oświetlenia i rasteryzacji................................................742 Dodawanie oświetlenia do funkcji renderującej tekstury w trybie 16-bitowym ...........742 Podsumowanie strategii optymalizacyjnych dla trybów 8- i 16-bitowych..........................748 Tabele wyszukiwania ....................................................................................................748 Spójność wierzchołków siatki .......................................................................................749 Buforowanie ..................................................................................................................749 Instrukcje SIMD ............................................................................................................749 Programy demonstracyjne ...................................................................................................750 Raiders 3D II .................................................................................................................751 Podsumowanie .....................................................................................................................754 4QFKC 2T[EKPCPKG UEGP Przycinanie scen 3D — wprowadzenie ...............................................................................755 Przycinanie w przestrzeni obiektu.................................................................................755 Przycinanie w obszarze obrazu sceny ...........................................................................759 Omówienie algorytmów przycinania...................................................................................760 Przycinanie — podstawy ...............................................................................................761 Algorytm Cohena-Sutherlanda ......................................................................................766 Algorytm Cyrusa-Becka (Lianga-Barskiego)................................................................768 Algorytm Weilera-Athertona.........................................................................................771 Przycinanie — dodatkowe źródła informacji ................................................................774 Przycinanie do ostrosłupa widzenia — przykład implementacji.........................................775 Potok przekształceń geometrycznych i nowe struktury danych....................................776 Dodawanie przycinania do silnika graficznego.............................................................777 Zabawa w terenie .................................................................................................................799 Funkcja generowania terenu..........................................................................................800 Generowanie mapy wysokości ......................................................................................809 Rajd łazikiem terenowym..............................................................................................810 Podsumowanie .....................................................................................................................814
  • 9. 12 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty 4QFKC $WHQTQYCPKG QFNGI Q EK C YKFQEPQ è RQYKGTEJPK Bufory odległości i identyfikowanie widocznych powierzchni — wprowadzenie .............815 Bufor Z.................................................................................................................................818 Trudności implementacji bufora Z ................................................................................820 Przykład buforowania odległości ..................................................................................820 Obliczanie wartości Z piksela z równania płaszczyzny ................................................822 Interpolacja współrzędnej Z ..........................................................................................824 Problemy buforowania Z i buforowanie odwrotności Z ...............................................826 Przykładowa interpolacja Z i odwrotności Z.................................................................827 Tworzenie systemu z buforem głębokości...........................................................................830 Dodawanie obsługi bufora Z do funkcji rasteryzacji.....................................................833 Optymalizacje bufora odległości .........................................................................................845 Oszczędzanie pamięci....................................................................................................846 Rzadsze czyszczenie bufora ..........................................................................................846 Buforowanie mieszane ..................................................................................................848 Bufory odległości — problemy ...........................................................................................849 Programy demonstrujące działanie buforów Z ....................................................................849 Program 1.: Obrazowanie zawartości bufora Z .............................................................849 Program 2.: Wodny rajd ................................................................................................851 Podsumowanie .....................................................................................................................857 %ú è +8 CCYCPUQYCPG VGEJPKMK TGPFGTQYCPKC 4QFKC CCYCPUQYCPG OGVQF[ VGMUVWTQYCPKC Teksturowanie — podejście drugie .....................................................................................861 Nowe struktury w pliku nagłówkowym ........................................................................862 Podstawa funkcji rasteryzacji ..............................................................................................869 Przyjęcie formatu stałoprzecinkowego..........................................................................870 Nowe funkcje rasteryzacji bez buforowania Z ..............................................................870 Nowe funkcje rasteryzacji z buforowaniem Z...............................................................873 Teksturowanie z cieniowaniem Gourauda...........................................................................875 Przezroczystość i łączenie alfa ............................................................................................882 Łączenie alfa z wykorzystaniem tablic przeglądowych ................................................883 Niezale ne definiowanie łączenia alfa dla poszczególnych obiektów ..........................895 Łączenie alfa w module generowania terenu ................................................................901 Teksturowanie z korektą perspektywiczną i buforowanie odwrotności Z...........................904 Matematyczne podstawy teksturowania z korektą perspektywiczną ............................905 Dodawanie do rasteryzatorów buforowania odwrotności Z..........................................913 Implementacja teksturowania poprawnego perspektywicznie ......................................921 Implementacja teksturowania częściowo poprawnego perspektywicznie.....................925 Aproksymacja kwadratowa w teksturowaniu perspektywicznym.................................931 Optymalizacja teksturowania — teksturowanie hybrydowe .........................................936 Dwuliniowe filtrowanie tekstur ...........................................................................................938 Filtrowanie trzyliniowe tekstur i mipmapowanie ................................................................943 Wprowadzenie do analizy Fouriera i efektu aliasingu ..................................................944 Tworzenie szeregu tekstur mipmapowania ...................................................................949 Wybór poziomu teksturowania mip ..............................................................................958 Filtrowanie trzyliniowe..................................................................................................964 Wyświetlanie i teksturowanie wieloprzebiegowe................................................................965 Zaawansowane teksturowanie w jednym wywołaniu..........................................................966 Nowy kontekst renderowania ........................................................................................967 Wypełnianie struktury kontekstu renderowania ............................................................969 Funkcja zbiorcza rasteryzacji ........................................................................................971 Podsumowanie .....................................................................................................................979
  • 10. Spis treści 13 4QFKC 2QFKC RTGUVTGPP[ K CNIQT[VO[ QMTG NCPKC YKFQEPQ EK Nowy moduł silnika graficznego .........................................................................................981 Podział przestrzenny i określanie widoczności powierzchni — wprowadzenie .................982 Binarny podział przestrzeni (BSP) ......................................................................................986 Binarny podział przestrzenny płaszczyznami równoległymi do osi układu współrzędnych......................................................................................988 Binarny podział przestrzenny płaszczyznami arbitralnymi...........................................988 Binarny podział przestrzenny płaszczyznami wyznaczanymi przez płaszczyzny wielokątów....................................................................................989 Wyświetlanie (odwiedzanie) węzłów drzewa BSP .......................................................993 Struktury danych i funkcje obsługujące drzewa BSP....................................................995 Tworzenie drzewa BSP .................................................................................................997 Strategie podziału ........................................................................................................1001 Przeglądanie i wyświetlanie węzłów drzewa BSP ......................................................1010 Wpasowanie drzew BSP do potoku renderowania......................................................1019 Edytor poziomu wykorzystujący drzewa BSP ............................................................1021 Ograniczenia drzew BSP .............................................................................................1032 Minimalizacja nadmiarowości odrysowywania z wykorzystaniem drzew BSP .........1033 Wykorzystanie drzew BSP do redukowania sceny .....................................................1035 Wykorzystanie drzew BSP do wykrywania kolizji .....................................................1045 Integracja drzew BSP ze standardowymi funkcjami rasteryzacji ...............................1045 Zbiory powierzchni potencjalnie widocznych ...................................................................1052 Zastosowania zbiorów PVS.........................................................................................1053 Mo liwe sposoby kodowania zbiorów potencjalnej widoczności...............................1055 Wyznaczanie zbiorów PVS .........................................................................................1057 Portale ................................................................................................................................1059 Hierarchie brył otaczających i drzewa oktalne ..................................................................1063 Sposób u ycia drzewa hierarchii BHV........................................................................1065 Wydajność w czasie rzeczywistym .............................................................................1065 Strategie budowy hierarchii BHV ...............................................................................1067 Implementacja hierarchii BHV....................................................................................1069 Drzewa oktalne ............................................................................................................1076 Eliminowanie powierzchni zasłoniętych ...........................................................................1078 Bryły zasłaniające........................................................................................................1079 Wybór obiektów zasłaniających..................................................................................1080 Hybrydowa metoda wyboru obiektów zasłaniających ................................................1081 Podsumowanie ...................................................................................................................1081 4QFKC %KGPKG Q YKGVNGPKG K UGMTGV[ KF Nowy moduł silnika gry ....................................................................................................1083 Wprowadzenie i plan gry ...................................................................................................1083 Uproszczone zasady fizyki cieni........................................................................................1084 Droga fotonów i wyliczanie intensywności światła ....................................................1085 Symulowanie cieni za pomocą rzutowanych obrazów i billboardów................................1088 Implementowanie rasteryzatorów z obsługą przezroczystości....................................1090 Nowa biblioteka...........................................................................................................1092 Proste cienie.................................................................................................................1094 Skalowanie cieni..........................................................................................................1096 Śledzenie poło enia źródła światła..............................................................................1100 Końcowe uwagi na temat tworzenia symulowanych cieni..........................................1105 Tworzenie cieni poprzez rzutowanie na płaszczyznę siatki obiektu .................................1105 Wzory przekształceń wektorowych dla potrzeb rzutowania .......................................1106 Optymalizowanie cieni rzutowanych na płaszczyznę .................................................1110
  • 11. 14 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty Wprowadzenie do mapowania oświetlenia i przechowywania powierzchni w pamięci podręcznej .....................................................................................................1110 Przechowywanie powierzchni w pamięci podręcznej .................................................1113 Generowanie map oświetlenia.....................................................................................1114 Implementowanie mapera oświetlenia ........................................................................1115 Mapowanie ciemności .................................................................................................1118 Efekty specjalne z u yciem map oświetlenia ..............................................................1120 Optymalizowanie kodu mapowania oświetlenia .........................................................1120 Łącząc wszystko w jedną całość........................................................................................1121 Podsumowanie ...................................................................................................................1121 %ú è 8 CCYCPUQYCPG RTQDNGO[ CPKOCELK OQFGNQYCPKG LCYKUM HK[EP[EJ K QRV[OCNKCELC 4QFKC #PKOQYCPKG RQUVCEK RTQITCOQYCPKG TWEJW K Y[MT[YCPKG MQNKLK Nowy moduł silnika gry ....................................................................................................1125 Wprowadzenie do animacji trójwymiarowej .....................................................................1126 Format .MD2 stosowany w grze Quake II.........................................................................1126 Nagłówek pliku .MD2 .................................................................................................1129 Ładowanie plików .MD2 gry Quake II .......................................................................1138 Animowanie plików .MD2 ..........................................................................................1147 Proste zasady animacji bez modeli bohaterów ..................................................................1158 Rotacja w ruchu i ruch w wyniku translacji ................................................................1158 Zło one ruchy parametryczne i ruch po krzywej ........................................................1161 Wykorzystywanie skryptów do programowania ruchu ...............................................1162 Wykrywanie kolizji w przestrzeni trójwymiarowej...........................................................1164 Ograniczające sfery i walce.........................................................................................1165 Wykorzystywanie struktur danych do przyśpieszania wykrywania kolizji.................1166 Poruszanie się po powierzchni terenu .........................................................................1167 Podsumowanie ...................................................................................................................1168 4QFKC 6GEJPKMK QRV[OCNKCELK MQFW Wprowadzenie do technik optymalizacyjnych ..................................................................1169 Profilowanie kodu za pomocą kompilatora Microsoft Visual C++ i programu VTune Intela ................................................................................................1170 Profilowanie przy pomocy kompilatora Visual C++...................................................1171 Analizowanie danych profilowania .............................................................................1173 Optymalizowanie kodu za pomocą programu VTune.................................................1174 Korzystanie z kompilatora C++ firmy Intel.......................................................................1182 Ściąganie kompilatora optymalizacyjnego Intela........................................................1182 Korzystanie z kompilatora...........................................................................................1183 Korzystanie z opcji optymalizacyjnych kompilatora ..................................................1184 Ręczne wybieranie ró nych kompilatorów dla ró nych plików źródłowych..............1185 Strategie optymalizacyjne............................................................................................1185 Przykład programowania instrukcji SIMD w mechanizmie SSE ......................................1185 Podstawy architektury SIMD ......................................................................................1187 Jak naprawdę wygląda korzystanie z instrukcji SIMD ...............................................1188 Klasa wektorów trójwymiarowych przystosowana do instrukcji SIMD.....................1199 Kilka podstawowych trików optymalizacyjnych...............................................................1205 Trik 1. Pozbywanie się funkcji _ftol().........................................................................1205 Trik 2. Ustawianie słowa kontrolującego FPU............................................................1206 Trik 3. Szybkie zerowanie liczb zmiennoprzecinkowych ...........................................1207 Trik 4. Szybkie wyciąganie pierwiastków kwadratowych ..........................................1207 Trik 5. Uproszczone wyliczanie arcustangens ............................................................1207
  • 12. Spis treści 15 Trik 6: Zwiększanie wartości wskaźnika.....................................................................1208 Trik 7. Wyjmowanie instrukcji if z pętli .....................................................................1209 Trik 8. Rozgałęzianie potoków instrukcji....................................................................1209 Trik 9. Wyrównywanie danych ...................................................................................1210 Trik 10. Wywoływanie wszystkich krótkich funkcji w miejscu .................................1210 Literatura............................................................................................................................1210 Podsumowanie ...................................................................................................................1210 QFCVMK QFCVGM # CYCTVQ è %41/W QFCVGM $ +PUVCNQYCPKG KTGEV: K MQT[UVCPKG MQORKNCVQTC 8KUWCN %% Instalowanie DirectX .........................................................................................................1215 Korzystanie z kompilatora Visual C/C++..........................................................................1216 Kilka praktycznych porad związanych z kompilacją.........................................................1216 QFCVGM % 6T[IQPQOGVTKC K YGMVQT[ Trygonometria ...................................................................................................................1219 Wektory .............................................................................................................................1222 Długość wektora ..........................................................................................................1223 Normalizacja................................................................................................................1223 Mno enie wektora przez skalar ...................................................................................1223 Dodawanie wektorów ..................................................................................................1224 Odejmowanie wektorów..............................................................................................1225 Iloczyn skalarny wektorów..........................................................................................1225 Iloczyn wektorowy wektorów .....................................................................................1227 Wektor zerowy ............................................................................................................1228 Wektory pozycji ..........................................................................................................1228 Wektory jako liniowe kombinacje wektorów jednostkowych ....................................1229 QFCVGM -TÎVMKG MQORGPFKWO Lú[MC % Czym język C++ ró ni się od C.........................................................................................1231 Minimum tego co trzeba wiedzieć o C++..........................................................................1233 Nowe typy, słowa kluczowe i konwencje..........................................................................1234 Komentarze..................................................................................................................1234 Stałe .............................................................................................................................1234 Zmienne referencyjne ..................................................................................................1234 Tworzenie zmiennych w dowolnym miejscu kodu .....................................................1235 Zarządzanie pamięcią ........................................................................................................1236 Strumienie wejścia i wyjścia..............................................................................................1236 Klasy ..................................................................................................................................1238 Całkiem nowy typ struktur ..........................................................................................1238 Przykład prostej klasy..................................................................................................1239 Publiczne a prywatne...................................................................................................1240 Funkcje składowe klasy (metody) ...............................................................................1240 Konstruktory i destruktory...........................................................................................1242 Pisanie konstruktora ....................................................................................................1243 Pisanie destruktora.......................................................................................................1244 Operator ustalania zakresu.................................................................................................1246 Pisanie funkcji składowych klasy poza zakresem klasy..............................................1246 Przecią anie operatorów i funkcji......................................................................................1247 Podstawy korzystania z szablonów....................................................................................1249 Wprowadzenie do obsługi wyjątków.................................................................................1250 Komponenty składające się na obsługę wyjątków ......................................................1251 Podsumowanie ...................................................................................................................1254
  • 13. 16 Triki najlepszych programistów gier 3D. Vademecum profesjonalisty QFCVGM ' 2T[FCVPG CFTGU[ KPVGTPGVQYG Witryny poświęcone programowaniu gier i nowinkom programistycznym......................1255 Witryny, z których mo na ściągać u yteczne materiały i programy .................................1256 Silniki 2D i 3D ...................................................................................................................1256 Ksią ki poświęcone programowaniu gier komputerowych...............................................1257 Strony Microsoftu poświęcone interfejsowi DirectX ........................................................1257 Grupy dyskusyjne Usenetu ................................................................................................1257 Najnowsze wiadomości z bran y: Blues News .................................................................1258 Magazyny komputerowe poświęcone projektowaniu gier ................................................1258 Dodatkowe materiały do gry Quake ..................................................................................1258 Darmowe modele i tekstury ...............................................................................................1258 Twórcy witryn poświęconych grom komputerowym ........................................................1258 QFCVGM ( 6CDNKEC PCMÎY #5%++ 5MQTQYKF
  • 14. Rozdział 10. 2T[EKPCPKG UEGP Nie bój się, to nie jest groźba pod Twoim adresem — Marla, Fight Club Dość długo udawało się nam unikać tematu przycinania scen 3D, przyszedł jednak czas na rozwiązanie i tego problemu. Nie da się ju dłu ej omijać tematu przycinania. Dlatego w bie ącym rozdziale omó- wione zostaną podstawy teoretyczne oraz zaprezentowany będzie praktyczny szkielet modułu przycinania scen 3D; wskazane zostaną te powody, dla których konieczne jest realizowanie przycinania scen oraz działający przykład wykorzystania tej techniki. Głównymi wątkami rozdziału będą: wprowadzenie do przycinania scen 3D; podstawy teoretyczne algorytmów przycinania; implementacja przycinania sceny do ostrosłupa widzenia; zabawa z przycinaniem. 2T[EKPCPKG UEGP YRTQYCFGPKG Przycinanie jako jedna z technik przetwarzania sceny w grafice komputerowej wzmiankowane było w ni- niejszej ksią ce ju kilkukrotnie; stosowne omówienia znajdują się równie w drugim wydaniu ksią ki Tricks of the Windows Game Programming Gurus. Przycinanie to jedna z najwa niejszych technik grafiki 3D, gdy źle przycinane sceny są nie tylko nieprawidłowo wyświetlane na ekranie, ale równie ich rzu- towanie w ostrosłupie widzenia mo e doprowadzić do błędów dzielenia przez zero i niepoprawnych od- wołań do pamięci. Mając to na uwadze przypomnimy sobie ró ne techniki przycinania i wska emy przy- czyny ich stosowania. 2T[EKPCPKG Y RTGUVTGPK QDKGMVW O przycinaniu w przestrzeni obiektu mówimy wtedy, gdy przycinaniu do wyznaczonego obszaru podlegają współrzędne geometryczne elementów sceny. Obszar przycinania mo e być dwu- lub trójwymiarowy — istotne jest to, e przycinanie zachodzi w matematycznej reprezentacji sceny i dotyczy matematycznych reprezentacji obiektów, trójkątów, elementów podstawowych i wszelkich innych części sceny. Zaletą przycinania w przestrzeni obiektu jest prostota: przy pomocy listy wierzchołków wielokątów tworzących scenę przycina się ich współrzędne do wyznaczonego dwu- lub trójwymiarowego obszaru rzutowania. Listę przyciętych trójkątów przekazuje się do następnego etapu potoku renderowania. Wady przycinania w przestrzeni obiektu tkwią, jak zwykle, w szczegółach implementacyjnych. W omawianych w tej ksią ce mechanizmach obrazowania jako elementy konstrukcyjne wykorzystywane są zawsze trójkąty. Tymczasem w wyniku przycinania, czy to do prostokąta rzutu dwuwymiarowego, czy do ostrosłupa wi- dzenia, do sceny wprowadzane są wielokąty z więcej ni trzema wierzchołkami (a więc w wyniku przyci- nania scena przestaje składać się ju wyłącznie z trójkątów). Tak więc dla ka dej płaszczyzny przycinania
  • 15. 756 Część III Podstawy renderowania 3D nale y przewidzieć potrzebę wprowadzenia dodatkowych wierzchołków przetwarzanych trójkątów, przez co stają się one czworokątami bądź wielokątami o jeszcze większej liczbie kątów. To pierwsza trudność. Gdyby silnik graficzny optymalizowany był pod kątem przetwarzania wielokątów o dowolnej liczbie wierzchołków, nie byłoby problemu, ale dotychczas omówione optymalizacje przetwarzania 3D opierały się zawsze na zało eniu, e scena składa się wyłącznie z trójkątów. Dalej, przycinanie w dowolnym systemie przestrzeni obiektu oznacza konieczność przecinania prostych prostymi, prostych płaszczyznami i tak dalej. Z pozoru proste, operacje te okazują się trudne w wydajnej implementacji, wymagając rozwiązania wielu problemów. 2T[EKPCPKG Y RTGUVTGPK QDKGMVW Przycinanie 2D w przestrzeni obiektu nie jest nam całkiem obce, poniewa wielokrotnie prezentowaliśmy je dla grafiki 2D. Podstawowa koncepcja takiego przycinania zakłada, e dysponujemy gotowymi ju rzutami prostych i wielokątów, które nale y przyciąć do prostokątnego obszaru widzenia. Kod implementujący takie przycinanie prezentowany był ju zarówno w tym, jak i poprzednim wydaniu ksią ki. Przycinanie 2D nie mo e być dłu ej pomocne, poniewa podstawowym problemem jest to, e w przestrzeni trójwymiarowej rzutowaniu podlegają wielokąty, które mogą być potencjalnie tak rozległe, e nie tylko przenikają przez bliską płaszczyznę przycinania, ale równie przez płaszczyznę o współrzędnej z równej 0, stąd do rzutowania przekazywane są wierzchołki o ujemnych wartościach tej współrzędnej (jak na rysunku 10.1). Wyłania się więc potrzeba opracowania techniki bardziej agresywnego przycinania 3D w przestrzeni obiektu. 4[UWPGM Rzutowanie wierzchołków o współrzędnej z mniejszej lub równej zeru prowadzi do błędów
  • 16. Rozdział 10. Przycinanie scen 3D 757 2T[EKPCPKG Y RTGUVTGPK QDKGMVW Je eli mechanizm obrazowania sceny ma sobie radzić z wielokątami o dowolnych rozmiarach i rozmiesz- czeniu, nie da się w prosty sposób uniknąć przycinania sceny do bliskiej płaszczyzny przycinania (patrz rysunek 10.2). Najbardziej prymitywnym sposobem uniknięcia przycinania jest usuwanie w całości ze sceny tych wielokątów, których wierzchołki wystają poza płaszczyznę przycinania, ale wymaga to kon- struowania sceny z wielokątów o ograniczonym rozmiarze (patrz rysunek 10.3). Przy tym fragmenty scen przylegające do płaszczyzn przycinania nie będą właściwie obrazowane. 4[UWPGM Zbyt długie wielokąty muszą zostać przycięte 4[UWPGM Niewielkie wielokąty mogą zostać w całości usunięte bądź zaliczone do sceny
  • 17. 758 Część III Podstawy renderowania 3D Warunkiem koniecznym prawidłowego obrazowania sceny jest przycinanie wszystkich wielokątów sceny do bli szej płaszczyzny, przy czym uzyskane w wyniku przycięcia wielokąty mogą przestać być trójkątami. Trzeba się więc liczyć z koniecznością ponownego podziału powstałych wielokątów na trójkąty i tym samym przebudowania listy obrazowanych wielokątów. W najgorszym więc przypadku konieczne będzie przycięcie wszystkich wielokątów do bliskiej płaszczyzny przycinania, co sprowadza się do wyliczania punktów przecięcia prostych i płaszczyzn. W szczegółach problem okazuje się powa niejszy. Wiemy ju o konieczności ponownego podziału sceny na trójkąty; dodatkowo nale y jeszcze przyciąć współrzędne tekstur, przeliczyć dane potrzebne do cieniowania powierzchni i wyliczyć nowe wartości wektorów nor- malnych wierzchołków — widać, e trudności jest niemało, ale poradzimy sobie i z nimi. Z drugiej strony, niebawem oka e się, e nie ma potrzeby wykonywania operacji przycinania dla pozostałych płaszczyzn ostrosłupa widzenia. Spójrzmy na rysunek 10.4. Okazuje się, e przycinanie wielokątów do dalekiej płaszczyzny przycinania jest zwykłą stratą czasu. Jaki byłby zysk? Praktycznie aden. Co gorsza, przycinanie to znacznie zwiększyłoby czas przetwarzania sceny. Wystarczy więc (zamiast przycinać) odrzucać w całości te wielokąty, które znajdują się poza daleką płaszczyzną przycinania — niezale nie od ich od- ległości od tej płaszczyzny. Wielokąty, które w całości znajdują się poza tą płaszczyzną, zostaną raczej usunięte z wykorzystaniem sfer otaczających ni przycinania. 4[UWPGM Nie wszystkie płaszczyzny ostrosłupa widzenia wymagają przycinania 3D Dalej, równie przycinanie na płaszczyznach tworzących górną, dolną, lewą i prawą ścianę ostrosłupa widzenia nie ma sensu. Przycinanie na ścianach ostrosłupa widzenia zajęłoby cenny czas, a słu yłoby tylko do tego, eby rzut sceny nie wykraczał poza obszar dwuwymiarowej płaszczyzny widoku sceny. O to mo na zaś zadbać na etapie rasteryzacji, w obszarze bufora ramki ekranu, co jest nieporównanie szybsze ni przycinanie w przestrzeni obiektu. Unikając przycinania na płaszczyznach ostrosłupa widzenia elimi- nujemy równie ze sceny i potoku renderowania potencjalne dodatkowe wielokąty, powstałe z podziału wielokątów na granicach obszaru przycinania.
  • 18. Rozdział 10. Przycinanie scen 3D 759 Naturalnie, je eli Czytelnikowi zale y na elegancji i kompletności mechanizmu obrazowania, mo e po- kusić się o implementację przycinania dla wszystkich płaszczyzn; zostanie to zresztą pokazane w dalszej części rozdziału. Główny nacisk zostanie jednak poło ony na następujące etapy przycinania i usuwania wielokątów (patrz rysunek 10.5): 4[UWPGM Etapy w potoku przycinania 3D Usunięcie wszystkich zbędnych obiektów. Usunięcie wielokątów zwróconych „tyłem do obserwatora”. Przycięcie wszystkich wielokątów do obszaru ostrosłupa widzenia. Pełnego przycinania wymaga jedynie bliska płaszczyzna przycinania w osi Z. Przycinanie na pozostałych pięciu płaszczyznach sprowadza się zaś do prostej kwalifikacji wielokąta do sceny w całości (je eli trójkąt znajduje się częściowo lub w całości w obszarze przycinania, zostaje zaliczony do sceny w całości; trójkąty pozostające w całości poza lewą, prawą, górną i dolną płaszczyzną ostrosłupa widzenia mo na w całości usunąć ze sceny). Przekazanie wszystkich wielokątów do następnych etapów potoku renderowania; wszelkie trójkąty wystające poza obszar płaszczyzny rzutu mo na przyciąć na etapie rasteryzacji. Taki system przycinania jest łatwy w implementacji, działa znakomicie, i — co najwa niejsze — jest bardzo szybki. 2T[EKPCPKG Y QDUCTG QDTCW UEGP[ Nale ałoby jeszcze sprecyzować, co nale y rozumieć pod pojęciem przycinania w obszarze rzutu ekranu. Sytuacja wejściowa prezentowana jest na rysunku 10.6: wielokąt jest gotowy do odrysowania, ale jego fragment wystaje poza jedną z prostych wyznaczających obszar obrazu sceny. Nie jest to problem, o ile przycinanie ma nastąpić w pionie. Wystarczy rozpocząć pętlę odrysowywania wielokąta od wierzchołka uzyskanego przez obliczenie punktu przecięcia trójkąta z obszarem obrazu. Wyliczenie takie to zaledwie jeden dodatkowy wiersz kodu programu. W przypadku przecięcia z lewą bądź prawą krawędzią obrazu procedura odrysowywania jest nieco inna: przycinane są kolejne linie tworzone w pętli odrysowywania. Jest to szybsze ni przycinanie ka dego wystającego trójkąta do wszystkich czterech płaszczyzn ostrosłu- pa widzenia. To ostatnie oznacza bowiem dodanie do sceny potencjalnie wielu nowych wielokątów, a co za tym idzie, oznacza konieczność wyliczania nowych współrzędnych teksturowania, przeliczania wekto- rów normalnych wielokątów i wierzchołków i tak dalej. Tymczasem a nadto obcią ające obliczeniowo jest ju samo przycinanie do bliskiej płaszczyzny przycinania.
  • 19. 760 Część III Podstawy renderowania 3D 4[UWPGM Przycinanie w obszarze obrazu sceny, podczas rysowywania wielokątów Z drugiej strony, nie mo na dopuścić, aby przycinanie w obszarze bufora ramki doprowadziło do utraty jakich- kolwiek informacji 3D; będą one jeszcze potrzebne, między innymi przy okazji konstruowania bufora Z. Operacje w obszarze bufora ramki wymagają ostro ności: gdy dojdzie do interpolacji wartości współ- rzędnych z dla krawędzi wielokątów, konieczne będzie zachowanie przynajmniej współrzędnych z wierz- chołków. Chodzi o to, e podczas ostatecznej rasteryzacji nie mo na będzie ju realizować przycinania wyłącznie na podstawie wartości współrzędnych 2D. Dojdziemy do tego w stosownym czasie. 1OÎYKGPKG CNIQT[VOÎY RT[EKPCPKC Przed wkroczeniem w obszar teorii algorytmów przycinania chciałbym uprzedzić, e „powa ne” nazwy co niektórych algorytmów niekiedy rozśmieszają, a to dlatego, e ka dy z nich mo na wymyślić samemu — wszystkie są po prostu formalizacją tego, co w domu robi ka dy, kto zajmuje się choć trochę algoryt- mami graficznymi. Nazewnictwo algorytmów jest zresztą nieodłącznym problemem grafiki komputero- wej: co i raz ktoś wymyśla „nowy” algorytm i publikuje go; odtąd zaczyna on funkcjonować pod pewną nazwą, niezale nie od innych nazw tego samego algorytmu publikowanego gdzie indziej. Nie zawsze zresztą nowa nazwa starego algorytmu jest dziełem samego autora publikacji — często czytelnicy zaczynają odwoływać się do „nowego” algorytmu pod nową nazwą. Przycinanie to koncepcja na tyle prosta, e śmieszne byłoby sądzić, e została „odkryta” przez jedną kon- kretną osobę. Ka dy algorytm przycinania jest pewnym wcieleniem zdroworozsądkowego podejścia do przetwarzania grafiki i opiera się na wyliczaniu punktów przecięcia wierzchołków. Algorytmy takie „produkuje” się zwykle pod presją pojawiających się zadań — niejednokrotnie wywa a się wtedy otwarte ju drzwi. Do czego zmierzam? Otó nieco dalej wymienione zostaną z nazwy pewne powszechnie przy- jęte algorytmy przycinania, jednak nie powinniście na ich podstawie wyrabiać sobie poglądu, e są one jedynymi mo liwymi wcieleniami przycinania. Jak Wam zapewne wiadomo, programista niejednokrotnie spędza całe godziny na rozwiązaniu problemu, po czym dowiaduje się, e jego rozwiązanie jest bardzo podobne do ju istniejących algorytmów. W przypadku algorytmów przycinania byłoby prościej, gdyby ich nazwy były bardziej opisowe. Istniejące nazwy brzmią przecie jak nazwy kancelarii prawniczych!
  • 20. Rozdział 10. Przycinanie scen 3D 761 Wydaje się, e aby algorytm otrzymał nazwę, powinien cechować się pewnym wyrafinowaniem, powo- dującym, e opisywana przezeń technika nie jest bynajmniej oczywista dla osób średnio tylko zaawanso- wanych w danej dziedzinie. Zgodnie z takim rozumowaniem uzasadnione jest uhonorowanie wynalazcy algorytmu drzewa BSP (ang. binary space partitioning) przez nadanie mu jego imienia — podział trój- wymiarowej przestrzeni BSP nie jest bowiem algorytmem trywialnym. Kiedy jednak chodzi o przycina- nie wielokąta do innego wielokąta, opracowanie algorytmu wymaga godziny (mo e dwóch) zastanowie- nia, spędzonego na kombinowaniu metod przycinania odcinków, klasyfikacji wierzchołków, kodowania bitowego czy parametrycznych reprezentacji prostych. I tyle! Mam zamiar, rzecz jasna, zachęcić Was do eksperymentów. Co prawda, dziewięćdziesiąt dziewięć procent rozwiązywanych w ten sposób problemów doczekało się już rozwiązania, nie oznacza o jednak, że rozwiązania te zostały gdziekolwiek opublikowane. Dosyć narzekania. Do dzieła! Przystąpimy teraz do omówienia — z teoretycznego punktu widzenia — najpopularniejszych algorytmów przycinania, po czym zajmiemy się implementacją takiego algorytmu na potrzeby naszego silnika graficznego. Prezentowany algorytm, jako e powstał pod presją konkretnego problemu, będzie hybrydą wielu pomysłów. Na początek nieco informacji podstawowych. 2T[EKPCPKG RQFUVCY[ Przycinanie wielokątów sprowadza się do przycinania odcinków, co z kolei sprowadza się do określania, czy pewne punkty zawierają się w danym obszarze dwuwymiarowym bądź w trójwymiarowej bryle. Ilu- stracją problemu w jego postaci ogólnej jest rysunek 10.7. Otó dany jest zbiór odcinków, tworzących wchodzące w skład sceny wielokąty, które mają zostać później poddane rzutowaniu. Nale y określić, czy elementy te mieszczą się w pewnych zadanych granicach. Da się to sprowadzić do określenia, czy w gra- nicach tych mieszczą się pojedyncze punkty charakterystyczne elementów. Innymi słowy, dane trójkąty determinowane są trzema wierzchołkami, łączonymi trzema odcinkami (krawędziami). Choć to właśnie krawędzie nadają trójkątowi zarys, naprawdę wa ne są jedynie wierzchołki. Stąd, na najwy szym pozio- mie ogólności, problem sprowadza się do sprawdzenia, czy punkt o współrzędnych (x, y) bądź (x, y, z) znajduje się w zadanym obszarze (bryle), a więc do testu zawierania się punktu. 4[UWPGM Test zawierania się na płaszczyźnie dwuwymiarowej
  • 21. 762 Część III Podstawy renderowania 3D 6GUV CYKGTCPKC UKú RWPMVW Y QDUCTG Dla danego punktu p0(x, y) i prostokątnego obszaru wyznaczanego prostymi xmin, xmax, ymin, ymax (patrz rysunek 10.7), punkt p0 zawiera się w zadanym obszarze, je eli spełnia następujące nierówności: ZOKP Z ZOCZ i [OKP [ [OCZ 6GUV[ CYKGTCPKC UKú RWPMVW Y DT[NG Przypadek 1. Zawieranie się punktu w bryle prostopadłościennej. Dla danego punktu p0(x, y, z) i prostopadłościennego obszaru wyznaczonego płaszczyznami xmin, ymin, zmin, xmax, ymax, zmax (patrz rysunek 10.8), punkt p0 zawiera się w zadanym obszarze, je eli spełnia następujące nierówności: 4[UWPGM Testowanie zawierania się punktu w bryle 3D ZOKP Z ZOCZ i [OKP [ [OCZ i OKP OCZ Pojawia się tu wątpliwość, czy warto zawracać sobie głowę przycinaniem do bryły prostopadłościennej, je eli z góry wiadomo, e ostrosłup widzenia taką bryłą nie jest? To prawda, ale wystarczy przypomnieć sobie omówienie rzutowania i dyskutowany przy tej okazji efekt „prostowania” ostrosłupa widzenia wła- śnie do postaci bryły prostopadłościennej. W takim przypadku przycinanie sprowadza się do trywialnych porównań współrzędnych wierzchołków wielokątów sceny ze współrzędnymi wierzchołków ścian bryły zawierania. Nikt te nie mówił, e przycinanie realizowane jest wyłącznie do ostrosłupa widzenia — przecie promienie lasera wystrzeliwane w grze warto przyciąć równie do jakiejś skończonej bryły w rozle- głym świecie gry kosmicznej, aby nie przeliczać ich pozycji w nieskończoność, gdy dawno opuściły pe- netrowany układ planetarny.