You are on page 1of 40

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

OpenGL.
Programowanie gier
Autorzy: Kevin Hawkins, Dave Astle
Tumaczenie: Jaromir Senczyk
ISBN: 83-7361-035-9
Tytu oryginau: OpenGL Game Programming
Format: B5, stron: 630

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Coraz szybsze procesory, coraz wydajniejsze karty graficzne wszystko to powoduje,


e programici gier komputerowych potrafi kreowa wasne, wirtualne i trjwymiarowe
wiaty, przycigajce gracza bogactwem szczegw i drobiazgowym odwzorowaniem
rzeczywistoci (lub wyobrani twrcy). Tworzenie tak zaawansowanych
i skomplikowanych gier nie byoby moliwe bez bibliotek graficznych, takich jak
OpenGL, pozwalajcych na wywietlanie trjwymiarowych obiektw przez karty
graficzne rnych producentw. OpenGL w ogromnym stopniu przyspiesza prac
programisty.
Ksika omawia uycie OpenGL do tworzenia dynamicznych, trjwymiarowych wiatw
gier oraz efektw specjalnych. Przedstawia podstawy tworzenia aplikacji w systemie
Windows, teori grafiki trjwymiarowej, ale gwny nacisk kadzie na prezentacj
funkcjonalnoci OpenGL. Jednak autor nie poprzesta na opisie. Sama biblioteka nie
wystarcza do stworzenia gry. Opisane zostay take niezbdne programicie elementy
biblioteki DirectX pozwalajce na wzbogacenie gry o dwik i wygodne sterowanie.
Ksika przedstawia:

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Podstawy programowania w Windows, funkcje WGL


Podstawy teorii grafiki trjwymiarowej
Maszyn stanw OpenGL i podstawowe elementy grafiki
Przeksztacenia ukadu wsprzdnych i macierze OpenGL
Kolory i efekty zwizane z owietleniem
Mapy bitowe i tekstury w OpenGL
Listy wywietlania i tablice wierzchokw
Bufory OpenGL
Krzywe, powierzchnie i powierzchnie drugiego stopnia
Sposoby tworzenia efektw specjalnych
Interfejs DirectInput
Wykorzystanie DirectX Audio
Trjwymiarowe modele postaci

Spis treci
List od wydawcy serii.............................................................................15
O Autorach............................................................................................17
Przedmowa............................................................................................19
Wprowadzenie .......................................................................................21

Cz I

Wprowadzenie do OpenGL i DirectX ......................................23

Rozdzia 1. OpenGL i DirectX ...................................................................................25


Dlaczego tworzymy gry? ............................................................................................... 25
wiat gier ..................................................................................................................... 26
Elementy gry ................................................................................................................ 26
Narzdzia ..................................................................................................................... 28
OpenGL ....................................................................................................................... 30
Historia OpenGL..................................................................................................... 30
Architektura OpenGL .............................................................................................. 31
Biblioteka GLU....................................................................................................... 31
Pakiet bibliotek GLUT............................................................................................. 32
Programy................................................................................................................ 33
DirectX ........................................................................................................................ 33
Historia DirectX ...................................................................................................... 34
Architektura DirectX ............................................................................................... 35
DirectX Graphics ............................................................................................... 36
DirectX Audio ................................................................................................... 36
DirectInput........................................................................................................ 36
DirectPlay ......................................................................................................... 36
DirectShow ....................................................................................................... 36
DirectSetup ....................................................................................................... 37
Porwnanie OpenGL i DirectX....................................................................................... 37
Podsumowanie.............................................................................................................. 37

Rozdzia 2. Korzystanie z OpenGL w systemie Windows............................................39


Wprowadzenie do programowania w systemie Windows .................................................. 39
Podstawowa aplikacja systemu Windows................................................................... 41
Funkcja WinMain() ................................................................................................. 42
Procedura okienkowa............................................................................................... 42
Obsuga komunikatw........................................................................................ 43
Klasy okien............................................................................................................. 44
Okrelenie atrybutw klasy okna......................................................................... 45
adowanie ikon i kursora myszy ......................................................................... 46

OpenGL. Programowanie gier

Rejestracja klasy ..................................................................................................... 48


Tworzenia okna ...................................................................................................... 48
Ptla przetwarzania komunikatw ............................................................................. 50
Kompletna aplikacja systemu Windows..................................................................... 52
Wprowadzenie do funkcji WGL ..................................................................................... 55
Kontekst tworzenia grafiki ....................................................................................... 56
Korzystanie z funkcji WGL...................................................................................... 56
Funkcja wglCreateContext() ............................................................................... 56
Funkcja wglDeleteContext() ............................................................................... 56
Funkcja wglMakeCurrent() ................................................................................. 57
Formaty pikseli ............................................................................................................. 58
Pole nSize............................................................................................................... 58
Pole dwFlags .......................................................................................................... 59
Pole iPixelType....................................................................................................... 59
Pole cColorBits ....................................................................................................... 59
Aplikacja OpenGL w systemie Windows......................................................................... 60
Penoekranowe aplikacje OpenGL .................................................................................. 67
Podsumowanie.............................................................................................................. 69

Rozdzia 3. Przegld teorii grafiki trjwymiarowej .....................................................71


Skalary, punkty i wektory .............................................................................................. 71
Dugo wektora ..................................................................................................... 72
Normalizacja wektora .............................................................................................. 72
Dodawanie wektorw .............................................................................................. 73
Mnoenie wektora przez skalar................................................................................. 73
Iloczyn skalarny wektorw....................................................................................... 73
Iloczyn wektorowy .................................................................................................. 74
Macierze ...................................................................................................................... 75
Macierz jednostkowa ............................................................................................... 75
Macierz zerowa....................................................................................................... 75
Dodawanie i odejmowanie macierzy ......................................................................... 76
Mnoenie macierzy.................................................................................................. 76
Implementacja dziaa na macierzach........................................................................ 78
Przeksztacenia ............................................................................................................. 79
Przesunicie............................................................................................................ 80
Obrt ..................................................................................................................... 80
Skalowanie ............................................................................................................. 82
Rzutowanie................................................................................................................... 82
Rzutowanie izometryczne......................................................................................... 83
Rzutowanie perspektywiczne.................................................................................... 84
Obcinanie ..................................................................................................................... 86
wiato......................................................................................................................... 86
wiato otoczenia .................................................................................................... 87
wiato rozproszone ................................................................................................ 87
wiato odbijane...................................................................................................... 88
Odwzorowania tekstur ................................................................................................... 88
Podsumowanie.............................................................................................................. 89

Cz II

Korzystanie z OpenGL............................................................91

Rozdzia 4. Maszyna stanw OpenGL i podstawowe elementy grafiki.........................93


Funkcje stanu ............................................................................................................... 93
Podstawowe elementy grafiki ......................................................................................... 99
Tworzenie punktw w trjwymiarowej przestrzeni ................................................... 100
Zmiana rozmiaru punktw ................................................................................ 101
Antialiasing..................................................................................................... 101

Spis treci

Odcinki ................................................................................................................ 102


Zmiana szerokoci odcinka ............................................................................... 103
Antialiasing odcinkw...................................................................................... 103
Wzr linii odcinka ........................................................................................... 103
Wielokty ............................................................................................................. 104
Ukrywanie powierzchni wieloktw .................................................................. 105
Ukrywanie krawdzi wieloktw....................................................................... 106
Antialiasing wieloktw ................................................................................... 106
Wzr wypenienia wieloktw .......................................................................... 107
Trjkty.......................................................................................................... 107
Czworokty..................................................................................................... 108
Dowolne wielokty .......................................................................................... 109
Przykad wykorzystania podstawowych elementw grafiki........................................ 109
Podsumowanie............................................................................................................ 110

Rozdzia 5. Przeksztacenia ukadu wsprzdnych i macierze OpenGL.....................111


Przeksztacenia ukadu wsprzdnych .......................................................................... 111
Wsprzdne kamery i obserwatora......................................................................... 113
Przeksztacenia widoku .......................................................................................... 114
Wykorzystanie funkcji gluLookAt() .................................................................. 114
Wykorzystanie funkcji glRotate*() i glTranslate*() ............................................. 115
Wasne procedury przeksztace widoku ............................................................ 116
Przeksztacenia modelowania ................................................................................. 117
Rzutowanie........................................................................................................... 118
Przeksztacenie okienkowe ..................................................................................... 118
OpenGL i macierze ..................................................................................................... 119
Macierz modelowania ............................................................................................ 119
Przesunicie.......................................................................................................... 120
Obrt ................................................................................................................... 120
Skalowanie ........................................................................................................... 122
Stos macierzy........................................................................................................ 123
Model robota ........................................................................................................ 124
Rzutowanie................................................................................................................. 132
Rzutowanie ortograficzne....................................................................................... 133
Rzutowanie perspektywiczne.................................................................................. 134
Okno widoku ........................................................................................................ 135
Przykad rzutowania .............................................................................................. 136
Wykorzystanie wasnych macierzy przeksztace ........................................................... 138
adowanie elementw macierzy ............................................................................. 138
Mnoenie macierzy................................................................................................ 139
Przykad zastosowania macierzy definiowanych....................................................... 139
Podsumowanie............................................................................................................ 140

Rozdzia 6. Kolory, czenie kolorw i owietlenie ..................................................141


Czym s kolory? ......................................................................................................... 141
Kolory w OpenGL ...................................................................................................... 142
Gbia koloru ........................................................................................................ 143
Szecian kolorw................................................................................................... 143
Model RGBA w OpenGL ...................................................................................... 143
Model indeksowany w OpenGL.............................................................................. 144
Cieniowanie................................................................................................................ 145
Owietlenie................................................................................................................. 147
Owietlenie w OpenGL i w realnym wiecie ............................................................ 147
Materiay .............................................................................................................. 148

OpenGL. Programowanie gier


Normalne.............................................................................................................. 148
Obliczanie normalnych..................................................................................... 149
Uycie normalnych .......................................................................................... 151
Normalne jednostkowe..................................................................................... 152
Korzystanie z owietlenia w OpenGL...................................................................... 153
Tworzenie rde wiata .................................................................................. 158
Pooenie rda wiata ................................................................................... 159
Tumienie........................................................................................................ 160
Strumie wiata .............................................................................................. 160
Definiowanie materiaw.................................................................................. 163
Modele owietlenia .......................................................................................... 164
Efekty odbicia ................................................................................................. 166
Ruchome rda wiata.................................................................................... 167
czenie kolorw ........................................................................................................ 173
Przezroczysto .................................................................................................... 174
Podsumowanie............................................................................................................ 179

Rozdzia 7. Mapy bitowe i obrazy w OpenGL...........................................................181


Mapy bitowe w OpenGL ............................................................................................. 181
Umieszczanie map bitowych .................................................................................. 182
Rysowanie mapy bitowej ....................................................................................... 183
Przykad zastosowania mapy bitowej ...................................................................... 183
Wykorzystanie obrazw graficznych............................................................................. 185
Rysowanie obrazw graficznych............................................................................. 185
Odczytywanie obrazu z ekranu ............................................................................... 187
Kopiowanie danych ekranu .................................................................................... 187
Powikszanie, pomniejszanie i tworzenie odbi........................................................ 188
Upakowanie danych mapy pikseli ................................................................................. 188
Mapy bitowe systemu Windows ................................................................................... 188
Format plikw BMP .............................................................................................. 189
adowanie plikw BMP ........................................................................................ 190
Zapis obrazu w pliku BMP..................................................................................... 191
Pliki graficzne Targa ................................................................................................... 193
Format plikw Targa ............................................................................................. 193
adowanie zawartoci pliku Targa .......................................................................... 194
Zapis obrazw w plikach Targa .............................................................................. 196
Podsumowanie............................................................................................................ 197

Rozdzia 8. Odwzorowania tekstur .........................................................................199


Odwzorowania tekstur ................................................................................................. 199
Przykad zastosowania tekstury .............................................................................. 200
Mapy tekstur .............................................................................................................. 205
Tekstury dwuwymiarowe ....................................................................................... 205
Tekstury jednowymiarowe ..................................................................................... 206
Tekstury trjwymiarowe ........................................................................................ 206
Obiekty tekstur ........................................................................................................... 207
Tworzenie nazwy tekstury ..................................................................................... 207
Tworzenie i stosowanie obiektw tekstur................................................................. 207
Filtrowanie tekstur ...................................................................................................... 208
Funkcje tekstur ........................................................................................................... 209
Wsprzdne tekstury .................................................................................................. 209
Powtarzanie i rozciganie tekstur ............................................................................ 210
Mipmapy i poziomy szczegowoci ............................................................................. 212
Automatyczne tworzenie mipmap ........................................................................... 213

Spis treci

Animacja powiewajcej flagi........................................................................................ 213


Objanienia........................................................................................................... 214
Implementacja....................................................................................................... 214
Uksztatowanie terenu ................................................................................................. 223
Objanienia........................................................................................................... 223
Implementacja....................................................................................................... 227
Podsumowanie............................................................................................................ 235

Rozdzia 9. Zaawansowane odwzorowania tekstur..................................................237


Tekstury wielokrotne ................................................................................................... 237
Sprawdzanie dostpnoci tekstur wielokrotnych ....................................................... 238
Dostp do funkcji rozszerze.................................................................................. 239
Tworzenie jednostek tekstury ................................................................................. 240
Okrelanie wsprzdnych tekstury ......................................................................... 241
Przykad zastosowania tekstur wielokrotnych........................................................... 242
Odwzorowanie otoczenia ............................................................................................. 250
Torus na niebie...................................................................................................... 250
Macierze tekstur.......................................................................................................... 253
Mapy owietlenia ........................................................................................................ 255
Stosowanie map owietlenia ................................................................................... 255
Wieloprzebiegowe tekstury wielokrotne ........................................................................ 261
Podsumowanie............................................................................................................ 265

Rozdzia 10. Listy wywietlania i tablice wierzchokw.............................................267


Listy wywietlania....................................................................................................... 267
Tworzenie listy wywietlania.................................................................................. 268
Umieszczanie polece na licie wywietlania ........................................................... 268
Wykonywanie list wywietlania.............................................................................. 269
Uwagi dotyczce list wywietlania .......................................................................... 271
Usuwanie list wywietlania .................................................................................... 271
Listy wywietlania i tekstury .................................................................................. 272
Przykad: animacja robota z uyciem list wywietlania ............................................. 273
Tablice wierzchokw.................................................................................................. 274
Obsuga tablic wierzchokw w OpenGL................................................................. 275
Stosowanie tablic wierzchokw ............................................................................. 276
glDrawArrays() ............................................................................................... 278
glDrawElements()............................................................................................ 278
glDrawRangeElements()................................................................................... 279
glArrayElement()............................................................................................. 279
Tablice wierzchokw i tekstury wielokrotne ........................................................... 280
Blokowanie tablic wierzchokw ............................................................................ 280
Przykad: uksztatowanie terenu po raz drugi............................................................ 281
Podsumowanie............................................................................................................ 284

Rozdzia 11. Wywietlanie tekstw..........................................................................285


Czcionki rastrowe ....................................................................................................... 285
Czcionki konturowe .................................................................................................... 289
Czcionki pokryte tekstur ............................................................................................ 292
Podsumowanie............................................................................................................ 299

Rozdzia 12. Bufory OpenGL.....................................................................................301


Bufory OpenGL wprowadzenie................................................................................ 301
Konfiguracja formatu pikseli .................................................................................. 301
Oprnianie buforw ............................................................................................. 304
Bufor koloru ............................................................................................................... 305
Podwjne buforowanie .......................................................................................... 305
Buforowanie stereoskopowe................................................................................... 306

10

OpenGL. Programowanie gier


Bufor gbi ................................................................................................................. 306
Funkcje porwnania gbi ...................................................................................... 307
Zastosowania bufora gbi...................................................................................... 307
Bufor powielania......................................................................................................... 316
Przykad zastosowania bufora powielania ................................................................ 319
Bufor akumulacji......................................................................................................... 324
Podsumowanie............................................................................................................ 326

Rozdzia 13. Powierzchnie drugiego stopnia.............................................................327


Powierzchnie drugiego stopnia w OpenGL .................................................................... 327
Styl powierzchni.................................................................................................... 328
Wektory normalne................................................................................................. 328
Orientacja ............................................................................................................. 329
Wsprzdne tekstury ............................................................................................ 329
Usuwanie obiektw powierzchni............................................................................. 329
Dyski ......................................................................................................................... 329
Walce......................................................................................................................... 331
Kule........................................................................................................................... 332
Przykad uycia powierzchni drugiego stopnia ............................................................... 333
Podsumowanie............................................................................................................ 336

Rozdzia 14. Krzywe i powierzchnie..........................................................................337


Reprezentacja krzywych i powierzchni.......................................................................... 337
Rwnania parametryczne ....................................................................................... 338
Punkty kontrolne i pojcie cigoci ........................................................................ 338
Ewaluatory ................................................................................................................. 339
Siatka rwnoodlega .............................................................................................. 342
Powierzchnie .............................................................................................................. 343
Pokrywanie powierzchni teksturami ........................................................................ 346
Powierzchnie B-sklejane .............................................................................................. 350
Podsumowanie............................................................................................................ 354

Rozdzia 15. Efekty specjalne..................................................................................355


Plakatowanie .............................................................................................................. 355
Przykad: kaktusy na pustyni .................................................................................. 357
Zastosowania systemw czstek ................................................................................... 359
Czstki ................................................................................................................. 359
Pooenie ........................................................................................................ 360
Prdko......................................................................................................... 360
Czas ycia....................................................................................................... 360
Rozmiar .......................................................................................................... 361
Masa .............................................................................................................. 361
Reprezentacja.................................................................................................. 361
Kolor .............................................................................................................. 361
Przynaleno ................................................................................................. 362
Metody ........................................................................................................... 362
Systemy czstek.................................................................................................... 362
Lista czstek.................................................................................................... 362
Pooenie ........................................................................................................ 362
Czsto emisji ................................................................................................ 363
Oddziaywania................................................................................................. 363
Atrybuty czstek, zakresy ich wartoci i wartoci domylne................................. 363
Stan biecy .................................................................................................... 364
czenie kolorw............................................................................................. 364
Reprezentacja.................................................................................................. 364
Metody ........................................................................................................... 364

Spis treci

11

Meneder systemw czstek .................................................................................. 365


Implementacja....................................................................................................... 365
Tworzenie efektw za pomoc systemw czstek..................................................... 368
Przykad: nieyca ................................................................................................. 369
Mga .......................................................................................................................... 373
Mga w OpenGL ................................................................................................... 374
Mga objtociowa................................................................................................. 375
Odbicia ...................................................................................................................... 375
Odbicia wiata...................................................................................................... 376
Obsuga bufora gbi.............................................................................................. 376
Obsuga skoczonych paszczyzn za pomoc bufora powielania ................................ 377
Tworzenie nieregularnych odbi ............................................................................. 378
Odbicia na dowolnie zorientowanych paszczyznach ................................................ 378
Cienie ........................................................................................................................ 379
Cienie statyczne .................................................................................................... 379
Rzutowanie cieni ................................................................................................... 380
Macierz rzutowania cieni.................................................................................. 380
Problemy z buforem gbi................................................................................. 381
Ograniczanie obszaru cieni za pomoc bufora powielania.................................... 381
Obsuga wielu rde wiata i wielu zacienianych powierzchni ........................... 382
Problemy zwizane z rzutowaniem cieni ............................................................ 382
Bryy cieni w buforze powielania............................................................................ 383
Inne metody.......................................................................................................... 384
Przykad: odbicia i cienie ....................................................................................... 384
Podsumowanie............................................................................................................ 387

Cz III Tworzymy gr......................................................................389


Rozdzia 16. DirectX: DirectInput.............................................................................391
Dlaczego DirectInput? ................................................................................................. 391
Komunikaty systemu Windows............................................................................... 391
Interfejs programowy Win32 .................................................................................. 394
Win32 i obsuga klawiatury .............................................................................. 394
Win32 i obsuga manipulatorw ........................................................................ 396
DirectInput ........................................................................................................... 397
Inicjacja interfejsu DirectInput ..................................................................................... 397
Wartoci zwracane przez funkcje DirectInput .......................................................... 398
Korzystanie z DirectInput ............................................................................................ 399
Dodawanie urzdze.............................................................................................. 399
Tworzenie urzdze......................................................................................... 400
Tworzenie wyliczenia urzdze......................................................................... 400
Sprawdzanie moliwoci urzdzenia.................................................................. 404
Wyliczenia obiektw........................................................................................ 405
Okrelanie formatu danych urzdzenia............................................................... 405
Okrelanie poziomu wsppracy........................................................................ 407
Modyfikacja waciwoci urzdzenia ................................................................. 407
Zajmowanie urzdzenia .................................................................................... 408
Pobieranie danych wejciowych.............................................................................. 408
Bezporedni dostp do danych .......................................................................... 408
Buforowanie danych ........................................................................................ 409
Odpytywanie urzdze.................................................................................. 409
Koczenie pracy z urzdzeniem.............................................................................. 409
Odwzorowania akcji .................................................................................................... 410
Tworzenie podsystemu wejcia .................................................................................... 410
Przykad zastosowania systemu wejcia ........................................................................ 418
Podsumowanie............................................................................................................ 420

12

OpenGL. Programowanie gier

Rozdzia 17. Zastosowania DirectX Audio................................................................421


Dwik....................................................................................................................... 421
Dwik i komputery .............................................................................................. 423
Cyfrowy zapis dwiku .................................................................................... 423
Synteza dwiku.............................................................................................. 424
Czym jest DirectX Audio? ........................................................................................... 425
Charakterystyka DirectX Audio .............................................................................. 426
Obiekty adujce .............................................................................................. 426
Segmenty i stany segmentw ............................................................................ 426
Wykonanie...................................................................................................... 427
Komunikaty .................................................................................................... 427
Kanay wykonania ........................................................................................... 427
Syntezator DSL ............................................................................................... 427
Instrumenty i adowanie dwikw.................................................................... 427
cieki dwiku i bufory .................................................................................. 428
Przepyw danych dwiku...................................................................................... 428
adowanie i odtwarzanie dwiku w DirectMusic .......................................................... 429
Inicjacja COM ...................................................................................................... 430
Tworzenie i inicjacja obiektu wykonania ................................................................. 430
Tworzenie obiektu adujcego ................................................................................ 431
Zaadowanie segmentu........................................................................................... 431
adowanie instrumentw ....................................................................................... 432
Odtwarzanie segmentu ........................................................................................... 432
Zatrzymanie odtwarzania segmentu......................................................................... 433
Kontrola odtwarzania segmentu .............................................................................. 434
Okrelanie liczby odtworze segmentu .................................................................... 434
Koczenie odtwarzania dwiku ............................................................................. 435
Prosty przykad ........................................................................................................... 435
Zastosowania cieek dwiku ..................................................................................... 445
Domylna cieka dwiku..................................................................................... 446
Standardowe cieki dwiku ................................................................................. 446
Odtwarzanie za pomoc cieki dwiku ................................................................. 447
Pobieranie obiektw nalecych do cieek dwiku ................................................ 449
Dwik przestrzenny ................................................................................................... 450
Wsprzdne przestrzeni dwiku ........................................................................... 450
Percepcja pooenia rda dwiku ........................................................................ 450
Bufor efektu przestrzennego w DirectSound ............................................................ 451
Parametry przestrzennego rda dwiku................................................................ 451
Odlego minimalna i maksymalna................................................................... 453
Tryb dziaania.................................................................................................. 453
Pooenie i prdko ........................................................................................ 454
Stoki dwiku ................................................................................................ 454
Odbiorca efektu dwiku przestrzennego ................................................................. 455
Przykad zastosowania efektu przestrzennego .......................................................... 456
Podsumowanie............................................................................................................ 468

Rozdzia 18. Modele trjwymiarowe.........................................................................469


Formaty plikw modeli trjwymiarowych ..................................................................... 469
Format MD2............................................................................................................... 470
Implementacja formatu MD2.................................................................................. 472
adowanie modelu MD2........................................................................................ 476
Wywietlanie modelu MD2 .................................................................................... 480
Pokrywanie modelu tekstur................................................................................... 482
Animacja modelu .................................................................................................. 483

Spis treci

13

Klasa CMD2Model................................................................................................ 488


Sterowanie animacj modelu .................................................................................. 498
adowanie plikw PCX............................................................................................... 501
Podsumowanie............................................................................................................ 503

Rozdzia 19. Modelowanie fizycznych waciwoci wiata.........................................505


Powtrka z fizyki ........................................................................................................ 505
Czas..................................................................................................................... 505
Odlego, przemieszczenie i pooenie ................................................................... 506
Prdko .............................................................................................................. 508
Przyspieszenie....................................................................................................... 509
Sia ...................................................................................................................... 510
Pierwsza zasada dynamiki ................................................................................ 511
Druga zasada dynamiki .................................................................................... 511
Trzecia zasada dynamiki................................................................................... 511
Pd ...................................................................................................................... 511
Zasada zachowania pdu .................................................................................. 512
Tarcie................................................................................................................... 513
Tarcie na paszczynie...................................................................................... 513
Tarcie na rwni pochyej .................................................................................. 514
Modelowanie wiata rzeczywistego .............................................................................. 516
Rozkad problemu ................................................................................................. 516
Czas..................................................................................................................... 517
Wektor ................................................................................................................. 521
Paszczyzna .......................................................................................................... 526
Obiekt .................................................................................................................. 529
Zderzenia obiektw ............................................................................................... 531
Sfery ogranicze .............................................................................................. 532
Prostopadociany ogranicze ........................................................................... 533
Zderzenia paszczyzn ....................................................................................... 535
Obsuga zderzenia............................................................................................ 538
Przykad: hokej ..................................................................................................... 538
wiat hokeja.................................................................................................... 539
Lodowisko ...................................................................................................... 539
Krek i zderzenia ........................................................................................... 544
Gracz.............................................................................................................. 550
Kompletowanie programu................................................................................. 553
Podsumowanie............................................................................................................ 559

Rozdzia 20. Tworzenie szkieletu gry........................................................................561


Architektura szkieletu SimpEngine ............................................................................... 561
Zarzdzanie danymi za pomoc obiektw klasy CNode ............................................ 562
Zarzdzanie obiektami: klasa CObject..................................................................... 566
Trzon szkieletu SimpEngine......................................................................................... 570
System wejcia...................................................................................................... 572
Klasa CEngine ...................................................................................................... 573
Cykl gry ............................................................................................................... 574
Obsuga wejcia .................................................................................................... 575
Klasa CSimpEngine............................................................................................... 576
Kamera ...................................................................................................................... 577
wiat gry.................................................................................................................... 580
Obsuga modeli ........................................................................................................... 580
System dwiku .......................................................................................................... 581
System czstek ........................................................................................................... 583
Podsumowanie............................................................................................................ 583

14

OpenGL. Programowanie gier

Rozdzia 21. Piszemy gr: Czas zabijania ..............................................................585


Wstpny projekt.......................................................................................................... 585
wiat gry.................................................................................................................... 586
Przeciwnicy ................................................................................................................ 588
Sztuczna inteligencja przeciwnika........................................................................... 589
Ogro..................................................................................................................... 590
Sod ...................................................................................................................... 592
Rakiety i eksplozje ...................................................................................................... 592
Interfejs uytkownika gry............................................................................................. 594
Korzystanie z gry ........................................................................................................ 594
Kompilacja gry ........................................................................................................... 595
Podsumowanie............................................................................................................ 596

Dodatki ...............................................................................................597
Dodatek A Zasoby sieci Internet...........................................................................599
Programowanie gier..................................................................................................... 599
GameDev.net........................................................................................................ 599
Wyszukiwarka informacji zwizanych z programowaniem gier ................................. 600
flipCode ............................................................................................................... 600
Gamasutra ............................................................................................................ 600
OpenGL ..................................................................................................................... 600
NeHe Productions ................................................................................................. 600
OpenGL.org.......................................................................................................... 601
Inne strony powicone OpenGL ............................................................................ 601
DirectX ...................................................................................................................... 601
DirectX Developer Center ...................................................................................... 601
Lista mailingowa DirectX ...................................................................................... 601
Inne zasoby ................................................................................................................ 602
ParticleSystems.com.............................................................................................. 602
Real-Time Rendering............................................................................................. 602
Informacja techniczna dla programistw.................................................................. 602
Artykuy dotyczce efektu mgy.............................................................................. 602

Dodatek B Dysk CD ..............................................................................................603


Struktura plikw na dysku CD...................................................................................... 603
Wymagania sprztowe................................................................................................. 603
Instalacja .................................................................................................................... 604
Typowe problemy i ich rozwizywanie ......................................................................... 604

Skorowidz............................................................................................605

Rozdzia 9.

Zaawansowane
odwzorowania tekstur
W rodziale tym przedstawione zostan zaawansowane techniki tworzenia tekstur, ktre
pozwol kolejny raz na zwikszenie realizmu tworzonej grafiki. Omwione zostan nastpujce zagadnienia:


tekstury wielokrotne;

mapy otoczenia;

macierz tekstur;

mapy owietlenia;

wieloprzebiegowe tworzenie tekstur wielokrotnych.

Zastosowanie kadego z wymienionych efektw powoduje, e grafika trjwymiarowa


nabiera jeszcze doskonalszego wygldu.

Tekstury wielokrotne
Dotychczas wykorzystywana bya pojedyncza tekstura dla kadego wielokta. OpenGL
umoliwia jednak pokrycie wielokta sekwencj tekstur, czyli tworzenie tekstur wielokrotnych. Moliwo ta stanowi obecnie jedynie rozszerzenie specyfikacji OpenGL. Rozszerzenia interfejsu programowego OpenGL zatwierdzane s przez rad ARB (Architectural Review Board) nadzorujc rozwj specyfikacji OpenGL. Tekstury wielokrotne
stanowi opcjonalne rozszerzenie OpenGL i nie s dostpne w kadej implementacji.
Tekstury wielokrotne tworzone s za pomoc sekwencji jednostek tekstury. Jednostki
tekstury omwione zostan szczegowo w dalszej czci rozdziau. Obecnie wystarczy
jedynie informacja dotyczca tego, e kada jednostka tekstury reprezentuje pojedyncz
tekstur, a take to, e podczas tworzenia tekstury wielokrotnej kada jednostka tekstury
przekazuje wynik jej zastosowania kolejnej jednostce tekstury a do utworzenia kocowej
tekstury wielokrotnej. Rysunek 9.1 ilustruje proces tworzenia tekstur wielokrotnych.

238

Cz II  Korzystanie z OpenGL

Rysunek 9.1.
Tekstura wielokrotna
powstaje na skutek
naoenia na wielokt
wicej ni jednej
tekstury za pomoc
jednostek tekstur

W procesie tworzenia tekstury wielokrotnej mona wyrni cztery gwne etapy.


1. Sprawdzenie, czy implementacja OpenGL udostpnia moliwo tworzenia

tekstur wielokrotnych.
2. Uzyskanie wskanika funkcji rozszerzenia.
3. Tworzenie jednostki tekstury.
4. Okrelenie wsprzdnych tekstury.

Teraz naley przyjrze si bliej kademu z wymienionych etapw.

Sprawdzanie dostpnoci tekstur wielokrotnych


Przed rozpoczciem stosowania tekstur wielokrotnych trzeba najpierw sprawdzi, czy
udostpnia je uywana implementacja OpenGL. Tekstury wielokrotne s rozszerzeniem
specyfikacji OpenGL zaaprobowanym przez rad ARB. List takich rozszerze udostpnianych przez konkretn implementacj mona uzyska wywoujc funkcj 

 z parametrem  . Lista ta posiada posta acucha znakw, w ktrym nazwy kolejnych rozszerze rozdzielone s znakami spacji. Jeli w acuchu tym
znaleziona zostanie nazwa   , to oznacza to dostpno tekstur wielokrotnych.
W celu sprawdzenia dostpnoci konkretnego rozszerzenia OpenGL mona skorzysta
z dostpnej w bibliotece GLU funkcji 
!
o nastpujcym prototypie:

       


Funkcja ta zwraca warto , jeli nazwa rozszerzenia  znajduje si w acuchu

lub warto "#  w przeciwnym razie.
acuch zwrcony przez funkcj 
 mona take przeszuka indywidualnie.
Oto przykad implementacji odpowiedniej funkcji:

Rozdzia 9.  Zaawansowane odwzorowania tekstur

239

       



   ! "" #$ 
 % &'  
  ( )
 ! (  *  ""  % &'  
"" +, ## -  .
, ' &'  
#   /  !

"" 0 0 +&- 0
 % +0
 ( + 1 1
"" +#%   #% 0 +% #. %#,
!    ((  22 3+    (( )

   
4
""  0  +% # %# +% #3 #$  00 %#
 *(  * 5
4
  !
4

Funkcja ta zwraca warto , jeli acuch  zawiera acuch # przy zaoeniu, e  skada si z podacuchw oddzielonych znakami spacji. Aby sprawdzi,
czy dana implementacja umoliwia stosowanie tekstur wielokrotnych, mona skorzysta
ostatecznie z poniszego fragmentu kodu:
   ""  ,+ %%%'
"" + , ,+ %%%'
 (  

6789 9
! 16:;<63  1 

""   # . ,+
4

Po sprawdzeniu dostpnoci tekstur wielokrotnych kolejnym krokiem bdzie uzyskanie


wskanikw funkcji rozszerze.

Dostp do funkcji rozszerze


Aby korzysta z rozszerze OpenGL na platformie Microsoft Windows musimy uzyska dostp do funkcji rozszerze. Funkcja $%!&& zwraca wskanik danej
funkcji rozszerzenia. Dla tekstur wielokrotnych dostpnych jest sze funkcji rozszerze:
 


(gdzie K =1..4) funkcje te okrelaj wsprzdne

tekstur wielokrotnych;
   

wybiera biec jednostk tekstury;

 
  

wybiera jednostk tekstury, na ktrej


wykonywane bd operacje.

240

Cz II  Korzystanie z OpenGL

Poniszy fragment kodu suy do uzyskania dostpu do wymienionych funkcji rozszerze:


=>9?@887 ;AB>:;<=;
? 8 B!:;< ( 9@
=>9: 8C878@;:;<=;
:D8 :;< ( 9@
=>9 98: 8C878@;:;<=;
 :D8 :;< ( 9@

? 8 B!:;< ( =>9?@887 ;AB>:;<=; 


#
=:1
? 8 B!:;<1

:D8 :;< ( =>9: 8C878@;:;<=; 


#
=:1
:D8 :;<1

 :D8 :;< ( =>9 98: 8C878@;:;<=; 


#
=:1
 :D8 :;<1

Po wykonaniu tego kodu mona tworzy tekstury wielokrotne za pomoc funkcji '
 !!&(" i  ) .

Tworzenie jednostek tekstury


Tworzenie tekstur wielokrotnych odbywa si poprzez nakadanie wielu jednostek tekstury. Jednostka tekstury skada si z obrazu tekstury, parametrw filtrowania, stosu
macierzy tekstury, a ponadto posiada zdolno automatycznego tworzenia wsprzdnych tekstury.
Aby skonfigurowa parametry jednostki tekstury, trzeba najpierw wybra biec jednostk tekstury za pomoc funkcji  ) zdefiniowanej w nastpujcy
sposb:
D
:D8 :;< 3 


Po wykonaniu tej funkcji wszystkie wywoania funkcji #* , %##* ,



)* , 
* i 
& dotyczy bd jednostki tekstury okrelonej przez parametr 
. Parametr 
 moe posiada warto  + ,
gdzie jest liczb cakowit z przedziau od 0 do wartoci o jeden mniejszej od dopuszczalnej liczby jednostek tekstur. Na przykad  +, oznacza pierwsz z dostpnych jednostek tekstur. Liczb jednostek tekstur dopuszczaln dla danej implementacji OpenGL uzyska mona wykonujc poniszy fragment kodu:
 38@ "" 33 % 0  


D6?:76878@;6@986:;< 238@

Jeli w wyniku wywoania funkcji 


) uzyskana zostanie warto 1, oznacza to bdzie, e dana implementacja nie umoliwia tworzenia tekstur wielokrotnych.
Jednostki tekstur mona konfigurowa za porednictwem obiektw tekstur. Informacja,
ktr zawiera obiekt tekstury, jest automatycznie przechowywana z jednostk tekstury.
Aby korzysta z jednostek tekstur, wystarczy wic podobnie jak w przypadku zwykych tekstur utworzy obiekt tekstury, a nastpnie aktywowa jednostk tekstury za
pomoc funkcji  ) . Nastpnie naley zwiza obiekty tekstur z odpowiadajcymi im jednostkami tekstur. Ilustruje to nastpujcy fragment kodu:
""   
  0EBF
GGG

8 B  0 "" #% #   

Rozdzia 9.  Zaawansowane odwzorowania tekstur

241

"" #% +#%.  ,

<8 6878@;6BA  0E)F

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

8D6878@;69C 6878@;69C6? A 6;=: 

 < BA?+3+6878@;6BA 6;< IJ IJ 6;< 6@99A6<K8  


GGG
"" #% 
.  ,

<8 6878@;6BA  0E5F

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

8D6878@;69C 6878@;69C6? A 6;=: 

 < BA?+3+6878@;6BA 6;< IJ IJ 6;< 6@99A6<K8 8#


GGG
"" #% 0   % +3. L#  

:D8 :;<6878@;)6:;<

6878@;6BA

<8 6878@;6BA 38MNA

8D6878@;69C 6878@;69C6? A 6;=: 

:D8 :;<6878@;56:;<

6878@;6BA

<8 6878@;6BA  8MNA

8D6878@;69C 6878@;69C6? A 6? A@:8


GGG

Powyszy fragment kodu tworzy najpierw dwa obiekty tekstur, a nastpnie kreuje za ich
pomoc dwie jednostki tekstur uywane do tworzenia tekstur wielokrotnych.

Okrelanie wsprzdnych tekstury


Teraz, gdy wiadomo ju, w jaki sposb tworzy jednostki tekstur, naley zapozna si ze
sposobem ich uycia. Jako e pojedynczy wielokt bdzie wicej ni jedn tekstur,
trzeba zdefiniowa dla niego take wicej ni jeden zestaw wsprzdnych tekstury. Dla
kadej jednostki tekstury naley wic dysponowa osobnym zbiorem wsprzdnych
tekstury i zastosowa je dla kadego wierzchoka z osobna. Aby okreli wsprzdne
tekstury dwuwymiarowej mona zastosowa funkcj ' !!&(" zdefiniowan w nastpujcy sposb:
D
? 8 B!:;< 3 
 ! 

Inne wersje tej funkcji umoliwiaj okrelenie wsprzdnych tekstu jedno-, trj- oraz
czterowymiarowych take za pomoc wartoci innych typw ni "!#. Na przykad
funkcja ' !!&-& pozwala okreli wsprzdne tekstury trjwymiarowej za pomoc wartoci typu &!.. Korzystajc z tych funkcji naley poda najpierw
jednostk tekstury, a nastpnie jej wsprzdne. Oto przykad:

? 8 B!:;<6878@;)6:;< )G)! )G)!

Powysze wywoanie funkcji nadaje biecemu wierzchokowi wsprzdne (,/,, ,/,)


pierwszej jednostki tekstur. Podobnie jak w przypadku funkcji !!&(" trzeba

242

Cz II  Korzystanie z OpenGL

okreli najpierw wsprzdne wszystkich uywanych jednostek tekstur, a dopiero potem zdefiniowa wierzchoek. Ilustruje to poniszy fragment kodu:

<
6O@:A
"" #  #% &

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!MQG)! MQG)! MQG)!
"" +#  #% &

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!QG)! MQG)! MQG)!
"" +#
L #% &

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!QG)! QG)! MQG)!
"" #
L #% &

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!MQG)! QG)! MQG)!



Fragment ten rysuje kwadrat pokryty dwiema teksturami. Dla kadego wierzchoka definiuje wsprzdne obu tekstur.
Naley pamita, e przy stosowaniu tekstur wielokrotnych funkcja !!&(" pozwala na zdefiniowanie wsprzdnych tekstury tylko dla pierwszej jednostki tekstury.
W takim przypadku wywoanie funkcji !!&(" jest wic rwnowane wywoaniu ' !!&("  +,01/// .

Przykad zastosowania tekstur wielokrotnych


Teraz analizie zostanie poddany kompletny przykad programu, ktry pokrywa szecian
dwiema teksturami pokazanymi na rysunku 9.2.
Rysunek 9.2.
Dwie tekstury,
ktrymi pokryty
zostanie szecian

A oto pierwszy fragment kodu programu:


"""""" A!0
R! <8?:=6A )JAJB "" ! !3 <?=
R! = PG5J5SQ
""""""  
R  /##G N "" # + 
&L## H#
R  /G N
R  /G N
R  /3 G N

Rozdzia 9.  Zaawansowane odwzorowania tekstur

243

R  /
"
G N "" # + 
&L## +
R  /
"
 G N "" + 
&L##  @
R  1
G 1 "" + 
&L## %%%' +
"""""" 8+
+!  

 #  "" %TU  
 
 "" #TU  

  A ""   

    ""   
4  6
"""""" V3

WA
6WA  ""
  %.%
 !  ( ! ""   (  +&#
"" ! (  #
 =EBQIF ""  +%T,U #%
! 
 ( )G)! "" . 
!  ( )G)! "" .  3 # 
"""""" V3 3%  3
 3 7 3 K "" #+L&%, 3%
! 37 3K 3V "" #+L&%, 3
! 7 K V "" +  ## 3
"""""" V3  
 6 38
 6  8
"""""" V3 %#.% %  3 #3
=>9?@887 ;AB>:;<=;
? 8 B!:;< ( 9@
=>9: 8C878@;:;<=;
:D8 :;< ( 9@
=>9 98: 8C878@;:;<=;
 :D8 :;< ( 9@
 38 @ ( ) "" + %% % 0  

Plik nagwkowy glext.h naley docza wtedy, gdy korzysta si z jakichkolwiek rozszerze OpenGL zatwierdzonych przez ARB. Plik ten zawiera definicje wszystkich rozszerze. Jego kopia umieszczona zostaa take na dysku CD.
Powyszy fragment kodu prezentuje take sposb wykorzystania struktur do przechowywania informacji o teksturze i jej danych. Typ  umoliwia zapamitanie
obiektu tekstury, jej szerokoci i wysokoci oraz danych. Upraszcza to proces adowania
i stosowania tekstur w OpenGL.
Omawiany program bdzie umoliwia sterowanie kamer OpenGL w podobny sposb
do programu prezentujcego rzeb terenu, ktry przedstawiony zosta w rozdziale 8.
Gdy mysz bdzie porusza si poziomo, szecian bdzie obracany wok osi y. Natomiast przy wykonywaniu pionowych ruchw mysz, mona spowodowa oddalanie si
bd przyblianie kamery do szecianu.
Pierwsz z funkcji, ktr definiuje program, jest omwiona ju wczeniej funkcja 
 .
Zwraca ona warto , jeli acuch # zostanie odnaleziony wewntrz acucha , ktry zawiera wiele nazw oddzielonych znakami spacji.

244

Cz II  Korzystanie z OpenGL
       

   !"" #$ 
 % &'  
  ( )
 ! (  * ""  % &'  
"" +, ## -  .
, ' &'  
#   /  !

"" 0 0 +&- 0
 % +0
 ( + 1 1
"" +#% %  #% 0 +% #. %#,
!    ((  22 3+    (( )

   
4
""  0  +% # %# +% #3 #$  00 %#
 *(  * 5
4
  !
4

W celu umoliwienia korzystania z tekstur wielokrotnych program definiuje funkcj 



'  , ktra sprawdza, czy dostpne jest rozszerzenie o nazwie   ,
a ponadto pozyskuje wskaniki funkcji rozszerze. Funkcja 
'  zwraca warto "# , jeli tworzenie tekstur wielokrotnych nie jest dostpne.
 ? 8

  ""  ,+ %%%'
 (  

6789 9
!  (( 9@
  !
! 16:;<63  1 

"" %# + %%. %, 0  


D6?:76878@;6@986:;< 238 @
"" +  ! 0 %%%'

? 8 B!:;< ( =>9?@887 ;AB>:;<=; 
#
=:1
? 8 B!:;<1

:D8 :;< ( =>9: 8C878@;:;<=; 
#
=:1
:D8 :;<1

 :D8 :;< ( =>9 98: 8C878@;:;<=; 
#
=:1
 :D8 :;<1
   
4

  !
4

Rozdzia 9.  Zaawansowane odwzorowania tekstur

245

Kolejna funkcja, !#&2  , aduje pojedyncz tekstur i umieszcza jej opis


w strukturze typu  i zwraca wskanik tej struktury. Parametrem funkcji !#&
2  jest nazwa pliku. W celu zaadowania jego zawartoci wywouje ona
funkcj !#& #32  i umieszcza informacje o zaadowanym obrazie w strukturze
typu . Funkcja !#&2  tworzy take obiekt tekstury.
 6 8 >  !3

<8?:=9> W:A; !
 6  8 
"" +%% +3,U   % +  6
 8  (  63%! 6
!  8  (( 9@
  9@
"" & 0 %    +#% ++# # 0 +0
 8 MN ( <3+>!3 2!
!  8 MN (( 9@

! 8 
  9@
4
"" 3%% !30  %T  #T  
 8 MN# ( !GH 
 8 MN 
 ( !GW

"" #%   

8 5 2 8 MNA
   8 
4

Jako e opanowana ju zostaa umiejtno adowania tekstury, mona zapozna si z kolejn funkcj, ktra moe zaadowa wszystkie tekstury uywane w programie i skonfigurowa je tak, by moliwe byo ich wykorzystanie do tworzenia tekstur wielokrotnych.
Funkcja !#& aduje wszystkie tekstury, okrela ich parametry, tworzy mipmapy i wie obiekty tekstur z jednostkami tekstur.
 :8 

"" & 0 +#%.  ,
38 ( 8 >13G3+1
! 38 (( 9@
  !
"" & 0 
.  ,
 8 ( 8 >1 G3+1
!  8 (( 9@
  !
"" #% 3+3+ % !#3 #3  +#%0  

<8 6878@;6BA 38MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

246

Cz II  Korzystanie z OpenGL

8D6878@;69C 6878@;69C6? A 6;=: 

 < BA?+3+6878@;6BA 6;< 38MN#  38MN 

6;< 6@99A6<K8 38MN
"" #% 3+3+ % !#3 #3  
0  

<8 6878@;6BA  8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

8D6878@;69C 6878@;69C6? A 6? A@:8

 < BA?+3+6878@;6BA 6;<  8MN#   8MN 

6;< 6@99A6<K8  8MN
"" # +#%. 0,  

:D8 :;<6878@;)6:;<

6878@;6BA

<8 6878@;6BA 38MNA "" #.- 0, % +#%.  .
"" # 
. 0,  

:D8 :;<6878@;56:;<

6878@;6BA

<8 6878@;6BA  8MNA "" #.- 0, % 
.  .
   
4

Funkcja 
 # 4 inicjuje dane programu:
D %


  )G)! )G)! )G)! )G)! "" & # %3 %

 ?6? 8W "" #
&

6A=8W688 ""  #  +#% 

6 @6>:  ""  %'  #%  #.L#

>>6 H "" #%  +0. +%. #% &L#
"" +%#      #%L# %


6878@;6BA "" #&.%   # #3#
? 8
:8 
4

Szecian narysowa mona za pomoc rozbudowanej wersji funkcji 5#$. znanej


z poprzednich przykadw. Bdzie ona korzysta z funkcji ' !!&(" w miejsce funkcji !!&(" w celu zdefiniowania wsprzdnych jednostek tekstur dla
kadego wierzchoka szecianu:
D A# ! = ! = ! %=


=  ?

8!= = %=

<
6O@:A

93P!)G)! 5G)! )G)! ""
L T

Rozdzia 9.  Zaawansowane odwzorowania tekstur



? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!)GQ! )GQ! )GQ!

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!)GQ! )GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!M)GQ! )GQ! )GQ!



<
6O@:A

93P!)G)! )G)! 5G)! "" +% T

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!)GQ! )GQ! )GQ!

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!M)GQ! )GQ! )GQ!

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!M)GQ! M)GQ! )GQ!

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!)GQ! M)GQ! )GQ!



<
6O@:A

93P!5G)! )G)! )G)! "" +# T

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!)GQ! )GQ! )GQ!

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!)GQ! M)GQ! )GQ!

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!)GQ! )GQ! M)GQ!



<
6O@:A

93P!M5G)! )G)! )G)! "" # T

247

248

Cz II  Korzystanie z OpenGL

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!M)GQ! )GQ! )GQ!

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!M)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!M)GQ! M)GQ! )GQ!



<
6O@:A

93P!)G)! M5G)! )G)! ""  T

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!M)GQ! M)GQ! )GQ!

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!M)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!)GQ! M)GQ! )GQ!



<
6O@:A

93P!)G)! )G)! M5G)! ""  T

? 8 B!:;<6878@;)6:;< )G)! )G)!

? 8 B!:;<6878@;56:;< )G)! )G)!

CP!)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< 5G)! )G)!

? 8 B!:;<6878@;56:;< 5G)! )G)!

CP!M)GQ! M)GQ! M)GQ!

? 8 B!:;<6878@;)6:;< 5G)! 5G)!

? 8 B!:;<6878@;56:;< 5G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

? 8 B!:;<6878@;)6:;< )G)! 5G)!

? 8 B!:;<6878@;56:;< )G)! 5G)!

CP!)GQ! )GQ! M)GQ!



=+?
4

Rozdzia 9.  Zaawansowane odwzorowania tekstur

249

Wikszo kodu funkcji 


& znana jest z poprzednich przykadw. Okrela ona pooenie kamery i rysuje szecian.
D ;

 ( !=
MS)G)!"5X)G)!
"" #%% +&- 3
37 ( 7 * 3 K
3V ( V * 3 K
3K ( K * 3 K " BG)!
"" ## 0 3, # +  )))
7 ( )G)!
K ( )G)!
V ( )G)!
"" +L-  !  
&,

 6  ;6<@>>;6<8 Y 6A=8W6<@>>;6<8


"" 3%% 3,

 :37 3K 3V 7 K V )G) 5G) )G)
""  0 %T  %3L# 5Q5Q5Q

!5QG)! 5QG)! 5QG)!
""  0 %T  T # +  )))
A# )G)! )G)! )G)!
#+< !!
6WA  "" +%&.%  !
4

Po umieszczeniu omwionych funkcji w szkielecie standardowej aplikacji systemu Windows uzyskany zostanie program, ktrego dziaanie ilustruje rysunek 9.3.
Rysunek 9.3.
Przykad
zastosowania
tekstury wielokrotnej

250

Cz II  Korzystanie z OpenGL

Tekstury wielokrotne mog by rdem doskonaych efektw i dlatego z pewnoci


warto z nimi poeksperymentowa troch wicej. Pora jednak na omwienie kolejnego
doskonaego narzdzia tworzenia zaawansowanych efektw graficznych: odwzorowania
otoczenia.

Odwzorowanie otoczenia
Odwzorowanie otoczenia polega na stworzeniu obiektu, ktrego powierzchnia wydaje
si odbiciem jego otoczenia. Na przykad doskonale wypolerowana srebrna kula odbija
bdzie na swojej powierzchni elementy otaczajcego j wiata. Wanie taki efekt mona
uzyska stosujc odwzorowanie otoczenia. W tym celu nie trzeba jednak wcale tworzy
obrazu odbicia otoczenia na powierzchni efektu. W OpenGL wystarczy jedynie utworzy tekstur reprezentujc otoczenie obiektu, a OpenGL automatycznie wygeneruje
odpowiednie wsprzdne tekstury. Zmiana pooenia obiektu wymaga wyznaczenia
nowych wsprzdnych tekstury, by mona byo uzyska efekt odbicia zmieniajcego si
razem z poruszajcym si obiektem.
Najlepszy efekt zastosowania odwzorowania otoczenia uzyska mona uywajc tekstur
utworzonych za pomoc rybiego oka. Zastosowanie takich tekstur nie jest absolutnie
konieczne, ale znacznie zwiksza realizm odwzorowania otoczenia. Wsprzdne tekstury mona te oblicza indywidualnie, jednak zmniejsza to zwykle efektywno tworzenia grafiki.
Aby skorzysta w OpenGL z moliwoci odwzorowania otoczenia, niezbdny jest poniszy fragment kodu:

8!6 6878@;696? A 6=W;6?:=

8!68 6878@;696? A 6=W;6?:=

6878@;696

6878@;6968
"" ,+ #  , %   0 

I to wszystko! Teraz naley przeanalizowa przykad zastosowania moliwoci odwzorowania otoczenia.

Torus na niebie
Omwiony teraz zostanie przykad zastosowania moliwoci odwzorowania otoczenia
w programie, ktry rysowa bdzie torus pokryty tekstur otoczenia. Rysunek 9.4 przedstawia kocowy efekt dziaania programu.
Tekstur otoczenia utworzy mona na podstawie tekstury nieba, do ktrej zastosowany
zostanie efekt rybiego oka za pomoc dowolnego edytora obrazw dysponujcego tak
moliwoci. Rysunek 9.5 przedstawia otrzyman tekstur otoczenia.

Rozdzia 9.  Zaawansowane odwzorowania tekstur

251

Rysunek 9.4.
Torus pokryty
tekstur otoczenia

Rysunek 9.5.
Tekstura otoczenia
uzyskana
na podstawie
tekstury nieba

Teraz naley przyjrze si kodowi programu. Poniej przedstawione zostay jego fragmenty zwizane z tworzeniem tekstur i rysowaniem grafiki:
+!  

 #  "" %TU  
 
 "" #TU  

  A ""   

    ""   
4  6
GGG
! 
 ( )G)! "" .   
 6 D8 ""   %
 6 8 ""   
GGG
 :8 

"" & 0 %   %
D8 ( 8 >1M+ G3+1
! D8 (( 9@
  !
8 ( 8 >1G3+1
! 8 (( 9@
  !

252

Cz II  Korzystanie z OpenGL
"" #% 3+3+ % !#3 #3    %

<8 6878@;6BA D8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

 < BA?+3+6878@;6BA 6;< D8MN#  D8MN 

6;< 6@99A6<K8 D8MN
"" #% 3+3+ % !#3 #3    

<8 6878@;6BA 8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

 < BA?+3+6878@;6BA 6;< 8MN#  8MN 

6;< 6@99A6<K8 8MN
   
4
GGG
D ;

"" %#,% . 
! 
 N PI)G)!

 ( )G)!

 ( 
 * )GB!
"" +L-  !  
&,

 6  ;6<@>>;6<8 Y 6A=8W6<@>>;6<8



<8 6878@;6BA 8MNA

<
6O@:A

8 B!)G)! )G)!

CP!MB))G)! MB))G)! M5B)G)!

8 B!5G)! )G)!

CP!B))G)! MB))G)! M5B)G)!

8 B!5G)! 5G)!

CP!B))G)! B))G)! M5B)G)!

8 B!)G)! 5G)!

CP!MB))G)! B))G)! M5B)G)!


""  #   
 #%
,3 #%  & #+L&%,

8!)G)! )G)! M5))G)!

;!
 5G)! )G)! )G)!

;!
 )G)! 5G)! )G)!

;!
 )G)! )G)! 5G)!
"" !
 0 #%# %

8!6 6878@;696? A 6=W;6?:=

8!68 6878@;696? A 6=W;6?:=

6878@;696

6878@;6968

Rozdzia 9.  Zaawansowane odwzorowania tekstur

253

"" #  , %



<8 6878@;6BA D8MNA
""  0    +3 ##,%3 L#3 5) 0
""  +3 %#,%3 B) 0
 8 5)G)! B)G)!

>  
#+< !!
6WA "" +%&.%  !
4

Jak atwo zauway, stosowanie odwzorowania otoczenia w OpenGL jest niezwykle


proste, o ile pozwoli si maszynie OpenGL automatycznie wyznacza wsprzdne tekstury. Wsprzdne te mona oblicza indywidualnie, aby uzyska inne efekty specjalne,
ale zagadnienie to nie bdzie tutaj omawiane.

Macierze tekstur
W rozdziale 5. omwione zostay sposoby wykonywania przeksztace wierzchokw,
takich jak przesunicie, obrt i skalowanie za pomoc macierzy modelowania. Przedstawiona zostaa take koncepcja stosu macierzy umoliwiajca hierarchiczne tworzenie
grafiki.
Takie same moliwoci w przypadku tekstur OpenGL udostpnia za pomoc macierzy
tekstur i stosu macierzy tekstur. Na przykad funkcj #
#" mona zastosowa
do przesunicia tekstury na odpowiedni powierzchni. Podobnie funkcj !#"
mona wykorzysta do obrotu ukadu wsprzdnych tekstury i uzyska w efekcie obrt
tekstury. Gra American McGees Alice firmy Electronic Arts and Rogue Entertainment jest najlepszym przykadem niezwykych efektw, jakie mona osign poprzez
manipulacje macierz tekstur.
Wykonywanie operacji na macierzach tekstur jest bardzo atwe. Stosuje si w tym celu
udostpniane przez OpenGL funkcje ''#  , % '#  , %!3'# 
oraz funkcje przeksztace. Najpierw jednak trzeba poinformowa maszyn OpenGL,
e wykonywane bd operacje na macierzy tekstur:

??6878@;

Od tego momentu na macierzy tekstur i stosie macierzy tekstur mona wykonywa dowolne operacje. Po ich zakoczeniu naley poleci maszynie OpenGL powrt do macierzy modelowania, aby zamiast tekstur przeksztaca obiekty.
Poniej zaprezentowany zosta fragment kodu ilustrujcy sposb wykonywania obrotu
tekstury:
"" +L-  !  
&,

 6  ;6<@>>;6<8 Y 6A=8W6<@>>;6<8


"" #  +0  3%  

??6878@;



254

Cz II  Korzystanie z OpenGL

;!
 )G)! )G)! 5G)! ""   ,
"" +%#  +0  3% 3#

??6? ACH

<8 6878@;6BA A "" #  ,


""  0 %#. +  .

<
6O@:A

8 B!)G)! )G)!

CP!MB)G)! MB)G)! MJ)G)!

8 B!5G)! )G)!

CP!B)G)! MB)G)! MJ)G)!

8 B!5G)! 5G)!

CP!B)G)! B)G)! MJ)G)!

8 B!)G)! 5G)!

CP!MB)G)! B)G)! MJ)G)!



Kod ten wybiera najpierw macierz tekstury jako biec macierz. Nastpnie aduje do
niej macierz jednostkow, zanim zastosuje do biecej macierzy funkcj obrotu !#
" . Na skutek jej uycia tekstura zostaje obrcona o pewien kt wzgldem osi z. Po
wykonaniu obrotu wybiera macierz modelowania jako biec macierz i rysuje czworokt pokryty obrcon tekstur. Proste, prawda?
Gdyby po czworokcie zostay narysowane kolejne obiekty, to take zostayby one pokryte obrcon tekstur. Rozwizanie tego problemu zaprezentowane zostao poniej:
"" +L-  !  
&,

 6  ;6<@>>;6<8 Y 6A=8W6<@>>;6<8


"" #  +0  3%  

??6878@;



;!
 )G)! )G)! 5G)! ""   ,
"" +%#  +0  3% 3#

??6? ACH

<8 6878@;6BA A "" #  ,


""  0 %#. +  .

<
6O@:A

8 B!)G)! )G)!

CP!MB)G)! MB)G)! MJ)G)!

8 B!5G)! )G)!

CP!B)G)! MB)G)! MJ)G)!

8 B!5G)! 5G)!

CP!B)G)! B)G)! MJ)G)!

8 B!)G)! 5G)!

CP!MB)G)! B)G)! MJ)G)!


""  0 3%    ,+ L#

??6878@;



??6? ACH
""  0 ,+ 
GGG

Rozdzia 9.  Zaawansowane odwzorowania tekstur

255

Wystarczy jedynie zaadowa macierz jednostkow do macierzy tekstur, aby wykonane


przeksztacenia tekstury nie miay wpywu na sposb rysowania tekstur na kolejnych
obiektach. Warto wyprbowa rne przeksztacenia tekstur i uzyska nowe, ciekawe
efekty, ktre mona bdzie zastosowa w grach.

Mapy owietlenia
Zadaniem map owietlenia jest symulacja statycznego owietlenia powierzchni. Mapa
owietlenia jest tekstur, ktra opisuje sposb owietlenia powierzchni. Mapy owietlenia znajduj coraz powszechniejsze zastosowanie dziki wprowadzeniu sprztowej obsugi tekstur wielokrotnych. Cho mapy owietlenia stosowane s gwnie w celu uzyskania efektu statycznego owietlenia, mona je wykorzysta take do tworzenia cieni.
Rysunek 9.6 przedstawia map owietlenia symulujc efekt strumienia wiat padajcego na powierzchni pod ktem prostym. Jeli pokryty ni zostanie wielokt, to uzyskany
zostanie efekt owietlenia strumieniem wiata prostopadym do jego powierzchni.
Rysunek 9.6.
Przykad mapy
owietlenia

Mapy owietlenia s teksturami wykorzystujcymi jedynie odcienie szaroci. Aby uzyska efekt owietlenia, map tak naley poczy z tekstur pokrywajc wielokt.

Stosowanie map owietlenia


Map owietlenia stosuje si na przykad do uzyskania efektu owietlenia szecianu pokrytego tekstur szachownicy. Trzeba naoy j na kad ze cian szecianu, by uzyska efekt pokazany na rysunku 9.7.
Rysunek 9.7.
Zastosowanie
mapy owietlenia

256

Cz II  Korzystanie z OpenGL

adujc map owietlenia z pliku naley zadba o to, by jej piksele opisane byy za pomoc odcieni szaroci. Poniej zamieszczona zostaa zmodyfikowana wersja funkcji !
#& #32  adujcej map owietlenia z 24-bitowego pliku BMP jako obraz w odcieniach szaroci:

   <3+  !3 <8?:=9> W:A; 3+!W

> != "" #$ +%0 +
<8?:=>W:A;3+>W "" 
&L# +

  3+3
 ""  %
3
 ( ) "" % +

  3+;< "" %3 %3 &#

   
3
 "" % #  %T

 "" % + #  %T
"" # + #  1 1
!= ( !+!3 11
! != (( 9@
  9@
"" #% 0 
&L# +
!23+>W %!<8?:=>W:A; 5 !=
"" +#% % 0  + !3 <?=
! 3+>WG!8+ Z( <8?:=6A

!!=
  9@
4
"" #% 0 
&L# %
!3+!W %!<8?:=9> W:A; 5 !=
"" # #$ +%0 +  +%.  %
!!= 3+>WG! !!< [68
"" +%% +3,U  !# %
3+3
 (  
  33+!WMN%3


"" +%% +3,U +%.  +% # %


"" #  %T
"" % % 30%. - %3 % ;<

3
 (  
  33+!WMN%3
 " P
"" +#% % & , +%%U +3,U
! Z3+3


!3+3

!!=
  9@
4
"" #% 0  %
!3+3
 5 3+!WMN%3
 !=

Rozdzia 9.  Zaawansowane odwzorowania tekstur

257

"" +#% %  %& #%


! 3+3
 (( 9@

!!=
  9@
4

 ( )
! 3
 ( ) 3
 / 3+!WMN%3
 3
*(P


3
E
F ( 3+3
E3
F

**
4
!3+3

"" %3 +  %# #$  ! %#0.
 #% %
!!=
 
3

4

Po zaadowaniu mapy owietlenia mona posugiwa si ni jak zwyk tekstur z jedn


rnic: format jej trzeba zawsze definiowa jako   +', a nie jako  . A oto
przykad:
"" 3+ T# 0 3+3+

 < BA?+3+6878@;6BA 6@?9:9  #  


 6@?9:9 
6@99A6<K8 
3+A
""   +0%  

83
BA 6878@;6BA ) 6@?9:9  #  
 ) 6@?9:9 
6@99A6<K8 
3+A

Aby zastosowa map owietlenia, naley posuy si mechanizmem tekstur wielokrotnych i wczy tryb nakadania tekstury  '5+ . Trzeba zatem przyjrze si najistotniejszym fragmentom kodu tego programu:
+!  

 #  "" %TU  
 
 "" #TU  

  A ""   

    ""   
4  6
""  
 6  8 "" 3+ T#
 6 
3+8 ""   % #
"" ! 0 #%   #
=>9?@887 ;AB>:;<=;
? 8 B!:;< ( 9@
=>9: 8C878@;:;<=;
:D8 :;< ( 9@
=>9 98: 8C878@;:;<=;
 :D8 :;< ( 9@
 38 @ ( )
 ? 8

  ""  ,+ %%%'

258

Cz II  Korzystanie z OpenGL
 (  

6789 9
!  (( 9@
  !
!  16:;<63  1

"" + + %%. %, 0  


D6?:76878@;6@986:;< 238 @
"" +  ! 0 #%   #

? 8 B!:;< ( =>9?@887 ;AB>:;<=; 
#
=:1
? 8 B!:;<1

:D8 :;< ( =>9: 8C878@;:;<=; 
#
=:1
:D8 :;<1

 :D8 :;< ( =>9 98: 8C878@;:;<=; 
#
=:1
 :D8 :;<1
   
4

  !
4

Funkcja 
'  sprawdza dostpno mechanizmu tworzenia tekstur wielokrotnych dla danej implementacji OpenGL. Tym razem wykorzystuje ona funkcj   ,
ktra zwraca warto + , jeli drugi z jej parametrw nie jest podacuchem pierwszego.
Kolejn z funkcji jest omwiona wczeniej funkcja adowania mapy owietlenia z pliku:

   <3+  !3 <8?:=9> W:A; 3+!W

> != "" #$ +%0 +
<8?:=>W:A;3+>W "" 
&L# +

  3+3
 ""  %
3
 ( ) "" % +

  3+;< "" %3 %3 &#

   
3
 "" % #  %T

 "" % + #  %T
"" # + #  1 1
!= ( !+!3 11
! != (( 9@
  9@
"" #% 0 
&L# +
!23+>W %!<8?:=>W:A; 5 !=
"" +#% % 0  + !3 <?=
! 3+>WG!8+ Z( <8?:=6A

!!=
  9@
4

Rozdzia 9.  Zaawansowane odwzorowania tekstur

259

"" #% 0 
&L# %
!3+!W %!<8?:=9> W:A; 5 !=
"" # #$ +%0 +  +%.  %
!!= 3+>WG! !!< [68
"" +%% +3,U  !# %
3+3
 (  
  33+!WMN%3


"" +%% +3,U +%.  +% # %


"" #  %T
"" % % 30%. - %3 % ;<

3
 (  
  33+!WMN%3
 " P
"" +#% % & , +%%U +3,U
! Z3+3


!3+3

!!=
  9@
4
"" #% 0  %
!3+3
 5 3+!WMN%3
 !=
"" +#% %  %& #%
! 3+3
 (( 9@

!!=
  9@
4

 ( )
! 3
 ( ) 3
 / 3+!WMN%3
 3
*(P


3
E
F ( 3+3
E3
F

**
4
!3+3

"" %3 +  %# #$  ! %#0.
 #% %
!!=
 
3

4

Nastpna funkcja, !#& #3 , przypomina funkcj !#&2  z poprzednich przykadw, ale korzysta z usug funkcji adowania mapy owietlenia !#&#6
 #3 :
 6 8 >  !3

<8?:=9> W:A; !
 6  8 

260

Cz II  Korzystanie z OpenGL
"" +%% +3,U   % +  6
 8  (  63%! 6
!  8  (( 9@
  9@
"" & 0 %    +#% ++# # 0 +0
 8 MN ( <3+!3 2!
!  8 MN (( 9@

! 8 
  9@
4
"" 3%% !30  %T  #T  
 8 MN# ( !GH 
 8 MN 
 ( !GW

"" #%   

8 5 2 8 MNA
   8 
4

Rwnie funkcja !#& , ktra prezentowana jest poniej, zostaa zmodyfikowana pod ktem uycia mapy owietlenia, dla ktrej w odrnieniu od zwykych
tekstur naley zastosowa wartoci   +' i  '5+ :
 :8 

"" & 0  , % #
 8 ( 8 >1 G3+1
!  8 (( 9@
  !
"" & 0 3+, T#

3+8 ( 
3+13+G3+1
! 
3+8 (( 9@
  !
"" #%  , % #

<8 6878@;6BA  8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

8D6878@;69C 6878@;69C6? A 6;=: 

 < BA?+3+6878@;6BA 6;<  8MN#   8MN 

6;< 6@99A6<K8  8MN
"" #% 3+, T#

<8 6878@;6BA 
3+8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8D6878@;69C 6878@;69C6? A 6? A@:8

 < BA?+3+6878@;6BA 6@?9:9  
3+8MN# 

3+8MN 
 6@?9:9  6@99A6<K8 
3+8MN

Rozdzia 9.  Zaawansowane odwzorowania tekstur

261

"" # +#%. 0,  



:D8 :;<6878@;)6:;<

6878@;6BA

<8 6878@;6BA  8MNA "" #.-  , % #
"" # 
. 0,  

:D8 :;<6878@;56:;<

6878@;6BA

<8 6878@;6BA 
3+8MNA "" #.- 3+, T#
   
4

Pozostaa cz kodu jest identyczna z pierwszym przykadem programu tworzenia tekstur wielokrotnych.

Wieloprzebiegowe tekstury wielokrotne


Brak obsugi mechanizmu tekstur wielokrotnych przez konkretn implementacj OpenGL
nie oznacza, e nie mona uzyska takich efektw innym sposobem. Rozwizanie polega
na symulacji tekstur wielokrotnych za pomoc doboru odpowiednich funkcji czenia
i tworzeniu kocowego efektu w wielu przebiegach rysowania grafiki. Metoda ta jest
zwykle wolniejsza od tekstur wielokrotnych, ktre coraz czciej obsugiwane s sprztowo, ale umoliwia uzyskanie podobnych efektw.
Wieloprzebiegowe tworzenie sceny polega na odpowiedniej zmianie zawartoci bufora
gbi i trybw czenia kolorw w kolejnych przebiegach. Aby uzyska taki efekt jak
w przypadku tekstur wielokrotnych, naley wykona poniszy fragment kodu:
"" +#% +%
#

<8 6878@;6BA 5


A#8  )G)! )G)! )G)!
"" 
 +%
#

6<9A "" #&.% &.% L#

A+ ?6>: "" #&.% %+   !


&,

A+ > 6O@:

<> 6V;  6; 6  ;

<8 6878@;6BA  8MNA


A#8  )G)! )G)! )G)!
"" +%# ++%  3% +

A+ ?68;@

A+ > 6

A6<9A

Poprzez zmian sposobu czenia kolorw uzyska mona efekt tekstury wielokrotnej.
Ponisze fragmenty kodu pokazuj, w jaki sposb mona uzyska w wielu przebiegach
taki sam efekt jak w przypadku pierwszego przykadu tekstur wielokrotnych:

262

Cz II  Korzystanie z OpenGL
 :8 

"" & 0 % +#%0  
38 ( 8 >13G3+1
! 38 (( 9@
  !
"" & 0 % 
0  
 8 ( 8 >1 G3+1
!  8 (( 9@
  !
"" #% +#%.  ,

<8 6878@;6BA 38MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8D6878@;69C 6878@;69C6? A 6;=: 

 < BA?+3+6878@;6BA 6;< 38MN#  38MN 

6;< 6@99A6<K8 38MN
"" #% 
.  ,

<8 6878@;6BA  8MNA

8=36878@;6BA 6878@;6?:6>8; 69:;

8=36878@;6BA 6878@;6?96>8; 69:;

8=36878@;6BA 6878@;6H;:=6 6;=:8

8=36878@;6BA 6878@;6H;:=68 6;=:8

8D6878@;69C 6878@;69C6? A 6? A@:8

 < BA?+3+6878@;6BA 6;<  8MN#   8MN 

6;< 6@99A6<K8  8MN
   
4
D A#8  ! = ! = ! %=


=  ?

8!= = %=

<
6O@:A

93P!)G)! 5G)! )G)! ""
L T

8 B!5G)! )G)!

CP!)GQ! )GQ! )GQ!

8 B!5G)! 5G)!

CP!)GQ! )GQ! M)GQ!

8 B!)G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

8 B!)G)! )G)!

CP!M)GQ! )GQ! )GQ!



<
6O@:A

93P!)G)! )G)! 5G)! "" +% T

8 B!5G)! 5G)!

CP!)GQ! )GQ! )GQ!

Rozdzia 9.  Zaawansowane odwzorowania tekstur



8 B!)G)! 5G)!

CP!M)GQ! )GQ! )GQ!

8 B!)G)! )G)!

CP!M)GQ! M)GQ! )GQ!

8 B!5G)! )G)!

CP!)GQ! M)GQ! )GQ!



<
6O@:A

93P!5G)! )G)! )G)! "" +# T

8 B!)G)! 5G)!

CP!)GQ! )GQ! )GQ!

8 B!)G)! )G)!

CP!)GQ! M)GQ! )GQ!

8 B!5G)! )G)!

CP!)GQ! M)GQ! M)GQ!

8 B!5G)! 5G)!

CP!)GQ! )GQ! M)GQ!



<
6O@:A

93P!M5G)! )G)! )G)! "" # T

8 B!5G)! 5G)!

CP!M)GQ! )GQ! )GQ!

8 B!)G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

8 B!)G)! )G)!

CP!M)GQ! M)GQ! M)GQ!

8 B!5G)! )G)!

CP!M)GQ! M)GQ! )GQ!



<
6O@:A

93P!)G)! M5G)! )G)! ""  T

8 B!5G)! )G)!

CP!M)GQ! M)GQ! )GQ!

8 B!5G)! 5G)!

CP!M)GQ! M)GQ! M)GQ!

8 B!)G)! 5G)!

CP!)GQ! M)GQ! M)GQ!

8 B!)G)! )G)!

CP!)GQ! M)GQ! )GQ!



<
6O@:A

93P!)G)! )G)! M5G)! ""  T

263

264

Cz II  Korzystanie z OpenGL

8 B!)G)! )G)!

CP!)GQ! M)GQ! M)GQ!

8 B!5G)! )G)!

CP!M)GQ! M)GQ! M)GQ!

8 B!5G)! 5G)!

CP!M)GQ! )GQ! M)GQ!

8 B!)G)! 5G)!

CP!)GQ! )GQ! M)GQ!



=+?
4
D ;

 ( !=
MS)G)!"5X)G)!
"" #%% +&- 3
37 ( 7 * 3 K
3V ( V * 3 K
3K ( K * 3 K " BG)!
"" ## 0 3, # +  )))
7 ( )G)!
K ( )G)!
V ( )G)!
"" +L-  !  
&,

 6  ;6<@>>;6<8 Y 6A=8W6<@>>;6<8


"" 3%% 3,

 :37 3K 3V 7 K V )G) 5G) )G)
""  0 %T  %3L# 5Q5Q5Q

!5QG)! 5QG)! 5QG)!
"" +#% +%
#

<8 6878@;6BA 38MNA
A#8  )G)! )G)! )G)!
"" 
 +%
#

6<9A "" #&.% &.% L#

A+ ?6>: "" #&.% %+   !
&,

A+ > 6O@:

<> 6V;  6; 6  ;

<8 6878@;6BA  8MNA
A#8  )G)! )G)! )G)!
"" +%# ++%  3% +

A+ ?68;@

A+ > 6

A6<9A

>  
#+< !!
6WA "" +%&.%  !
4

Rozdzia 9.  Zaawansowane odwzorowania tekstur

265

Efekt uzyskany w wyniku wieloprzebiegowego tworzenia tekstur nie bdzie si rni


od efektw uzyskanych za pomoc tekstur wielokrotnych. Zwykle jednak tworzony bdzie wolniej, poniewa mechanizm tekstur wielokrotnych korzysta z moliwoci ich
sprztowej obsugi. Jednak tworzenie tekstur wielokrotnych w wielu przebiegach pozwala na dodatkowe eksperymentowanie z rnymi efektami uzyskiwanymi przez zmian
funkcji czenia kolorw.

Podsumowanie
OpenGL umoliwia pokrycie powierzchni wielokta sekwencj tekstur tworzc tekstur
wielokrotn.
W procesie tworzenia tekstur wielokrotnych wyrni mona cztery etapy: sprawdzenie
dostpnoci tekstur wielokrotnych, uzyskanie wskanikw funkcji rozszerzenia, stworzenie jednostki tekstury i okrelenie wsprzdnych tekstur.
Odwzorowanie otoczenia pozwala rysowa obiekty odbijajce otaczajcy je wiat na podobiestwo wypolerowanej srebrnej kuli.
Stos macierzy tekstur umoliwia wykonywanie przesuni, obrotw i skalowa tekstur.
Przeksztacenia tekstur umoliwiaj uzyskanie ciekawych efektw.
Mapy owietlenia su do symulacji statycznego owietlenia obiektu za pomoc odpowiedniej tekstury reprezentujcej wiato padajce na dan powierzchni.

You might also like