Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00413 004855 14473151 na godz. na dobę w sumie
OpenGL. Księga eksperta. Wydanie V - książka
OpenGL. Księga eksperta. Wydanie V - książka
Autor: , , Liczba stron: 688
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2976-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> gry >> opengl - programowanie
Porównaj ceny (książka, ebook, audiobook).

Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje!

Po prawie dwudziestu latach na rynku biblioteka OpenGL jest dziś wiodącym API w dziedzinie programowania grafiki trójwymiarowej, gier 3D, wizualizacji, symulacji, modelowania naukowego, a nawet edytowania obrazów i filmów dwuwymiarowych. Swój sukces zawdzięcza nie tylko łatwości użycia, ale przede wszystkim kompatybilności z niemal wszystkimi platformami dostępnymi na rynku. Świetnie sprawdza się zarówno w komputerach PC z systemem Windows, jak i komputerach Mac, a także na stacjach uniksowych, w centrach rozrywki opartych o lokalizację, na najbardziej znanych konsolach do gier, w kieszonkowych grach elektronicznych, a nawet w oprzyrządowaniu lotniczym czy samochodowym. Nie bez znaczenia dla spopularyzowania tej biblioteki był także fakt, że można ją rozszerzać, dzięki czemu ma ona wszystkie zalety otwartego standardu, a dodatkowo można wzbogacać jej implementację o własne dodatki.

'OpenGL. Księga eksperta. Wydanie 5' to nowe, zaktualizowane (specyfikacja OpenGL 3.3) wydanie znanego podręcznika dla wszystkich programistów, bez względu na poziom ich zaawansowania. Książka ta stanowi wyczerpujący kurs tworzenia niesamowitych wizualizacji 3D, gier oraz wszelkiego rodzaju grafik. Dzięki niej nauczysz się pisać programy wykorzystujące bibliotekę OpenGL, konfigurować środowisko pracy do przetwarzania grafiki trójwymiarowej oraz tworzyć podstawowe obiekty, oświetlać je i cieniować. Następnie zgłębisz tajniki języka OpenGL Shading Language i zaczniesz sprawnie pisać własne programy, wprowadzać do nich rozmaite efekty wizualne oraz zwiększać ich wydajność. Poznasz wszystkie najnowsze techniki programowania przy użyciu biblioteki OpenGL, takie jak przekształcenia, nakładanie tekstur, cieniowanie, zaawansowane bufory czy zarządzanie geometrią. Przejdziesz także szczegółowy kurs programowania grafiki w urządzeniach iPhone, iPod touch oraz iPad!

W tym wyczerpującym podręczniku znajdziesz:

Kompletny przewodnik po najpopularniejszej na świecie bibliotece do programowania grafiki trójwymiarowej OpenGL 3.3!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

OpenGL. Księga eksperta. Wydanie V Autorzy: Richard S. Wright, Nicholas Haemel, Graham Sellers, Benjamin Lipchak Tłumaczenie: Łukasz Piwko ISBN: 978-83-246-2976-3 Tytuł oryginału: OpenGL SuperBible: Comprehensive Tutorial and Reference (5th Edition) Format: 172×245, stron: 688 Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje! • Jak sprawnie tworzyć podstawowe obiekty, oświetlać je i cieniować? • Jak napisać własne programy, korzystając z biblioteki OpenGL i języka GLSL? • Jak programować grafikę na urządzenia przenośne, takie jak iPhone, iPod czy iPad? Po prawie dwudziestu latach na rynku biblioteka OpenGL jest dziś wiodącym API w dziedzinie programowania grafiki trójwymiarowej, gier 3D, wizualizacji, symulacji, modelowania naukowego, a nawet edytowania obrazów i filmów dwuwymiarowych. Swój sukces zawdzięcza nie tylko łatwości użycia, ale przede wszystkim kompatybilności z niemal wszystkimi platformami dostępnymi na rynku. Świetnie sprawdza się zarówno w komputerach PC z systemem Windows, jak i komputerach Mac, a także na stacjach uniksowych, w centrach rozrywki opartych o lokalizację, na najbardziej znanych konsolach do gier, w kieszonkowych grach elektronicznych, a nawet w oprzyrządowaniu lotniczym czy samochodowym. Nie bez znaczenia dla spopularyzowania tej biblioteki był także fakt, że można ją rozszerzać, dzięki czemu ma ona wszystkie zalety otwartego standardu, a dodatkowo można wzbogacać jej implementację o własne dodatki. „OpenGL. Księga eksperta. Wydanie 5” to nowe, zaktualizowane (specyfikacja OpenGL 3.3) wydanie znanego podręcznika dla wszystkich programistów, bez względu na poziom ich zaawansowania. Książka ta stanowi wyczerpujący kurs tworzenia niesamowitych wizualizacji 3D, gier oraz wszelkiego rodzaju grafik. Dzięki niej nauczysz się pisać programy wykorzystujące bibliotekę OpenGL, konfigurować środowisko pracy do przetwarzania grafiki trójwymiarowej oraz tworzyć podstawowe obiekty, oświetlać je i cieniować. Następnie zgłębisz tajniki języka OpenGL Shading Language i zaczniesz sprawnie pisać własne programy, wprowadzać do nich rozmaite efekty wizualne oraz zwiększać ich wydajność. Poznasz wszystkie najnowsze techniki programowania przy użyciu biblioteki OpenGL, takie jak przekształcenia, nakładanie tekstur, cieniowanie, zaawansowane bufory czy zarządzanie geometrią. Przejdziesz także szczegółowy kurs programowania grafiki w urządzeniach iPhone, iPod touch oraz iPad! Kompletny przewodnik po najpopularniejszej na świecie bibliotece do programowania grafiki trójwymiarowej OpenGL 3.3! Idź do • Spis treści • Przykładowy rozdział • Skorowidz Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 Spis treści Podziękowania ............................................................................................ 17 O autorach .................................................................................................... 21 Wstęp do wydania piątego ......................................................................... 23 Wstęp do wydania czwartego .................................................................... 25 Wstęp do wydania trzeciego ...................................................................... 29 Wprowadzenie ............................................................................................. 31 Co nowego w tym wydaniu ........................................................................................................ 31 Struktura książki .......................................................................................................................... 32 Część I: Podstawy ................................................................................................................. 32 Część II: Techniki średnio zaawansowane i zaawansowane .......................................... 34 Część III: OpenGL na różnych platformach .................................................................... 34 Konwencje typograficzne ........................................................................................................... 35 Witryna internetowa ............................................................................................................ 35 Część I Podstawy ................................................................................. 37 Rozdział 1. Wprowadzenie do grafiki trójwymiarowej i biblioteki OpenGL ............. 39 Historia grafiki komputerowej w skrócie ................................................................................ 40 Elektryczność ........................................................................................................................ 40 Wejście w trzeci wymiar ...................................................................................................... 41 Podstawowe efekty trójwymiarowe i najważniejsze pojęcia ................................................. 44 Przekształcanie i rzutowanie ............................................................................................... 44 Rasteryzacja ........................................................................................................................... 45 Cieniowanie ........................................................................................................................... 45 Teksturowanie ....................................................................................................................... 46 Mieszanie kolorów ............................................................................................................... 47 Łączenie punktów ................................................................................................................. 47 Typowe zastosowania grafiki trójwymiarowej ........................................................................ 47 Trzy wymiary w czasie rzeczywistym ................................................................................ 47 Trzy wymiary bez czasu rzeczywistego ............................................................................. 48 Programy do cieniowania ................................................................................................... 50 Podstawowe zasady programowania grafiki trójwymiarowej .............................................. 52 To nie jest zestaw narzędzi .................................................................................................. 52 Układy współrzędnych ........................................................................................................ 52 Rzutowanie z trzech w dwa wymiary ................................................................................ 56 Podsumowanie ............................................................................................................................. 58 Spis treści Rozdział 2. Rozpoczynanie pracy .................................................................................. 61 Czym jest OpenGL ...................................................................................................................... 62 Ewolucja standardu .............................................................................................................. 63 Mechanizm rozszerzeń ............................................................................................................... 64 Czyje to rozszerzenie ............................................................................................................ 66 Korzystanie z biblioteki OpenGL .............................................................................................. 71 Narzędzia pomocnicze ......................................................................................................... 72 Biblioteka GLUT ................................................................................................................... 72 Biblioteka GLEW .................................................................................................................. 73 Biblioteka GLTools ............................................................................................................... 73 Szczegóły interfejsu ..................................................................................................................... 74 Typy danych .......................................................................................................................... 74 Błędy OpenGL ............................................................................................................................. 76 Sprawdzanie wersji ...................................................................................................................... 77 Pobieranie wskazówek z funkcji glHint ................................................................................... 77 Maszyna stanów OpenGL .......................................................................................................... 78 Konfigurowanie środowiska programistycznego w systemie Windows ...................... 79 Dodawanie ścieżek ............................................................................................................... 79 Tworzenie projektu .............................................................................................................. 81 Dodawanie własnych plików .............................................................................................. 82 Konfigurowanie środowiska programistycznego w systemie Mac OS X ............................ 84 Niestandardowe ustawienia kompilacji ............................................................................ 85 Tworzenie nowego projektu ............................................................................................... 85 Szkielety, nagłówki i biblioteki ........................................................................................... 87 Nasz pierwszy trójkąt ........................................................................................................... 90 Układ współrzędnych .......................................................................................................... 95 Konfigurowanie ustawień ................................................................................................... 98 Zabieramy się do pracy ...................................................................................................... 100 Ożywianie sceny ........................................................................................................................ 101 Klawisze specjalne .............................................................................................................. 101 Odświeżanie ekranu ........................................................................................................... 103 Prosta animacja .......................................................................................................................... 103 Podsumowanie ........................................................................................................................... 104 Rozdział 3. Podstawy renderowania ........................................................................... 105 Rysowanie punktów w trzech wymiarach ............................................................................. 106 Podstawowy potok graficzny ................................................................................................... 106 Klient-serwer ....................................................................................................................... 107 Programy do cieniowania ................................................................................................. 108 Konfigurowanie układu współrzędnych ................................................................................ 110 Rzutowanie ortogonalne ................................................................................................... 111 Rzutowanie perspektywiczne ............................................................................................ 112 Standardowe programy do cieniowania ................................................................................ 112 Atrybuty ............................................................................................................................... 113 Zmienne typu uniform ...................................................................................................... 113 Łączenie punktów ...................................................................................................................... 115 Punkty i linie ....................................................................................................................... 116 8 Spis treści Rysowanie trójkątów w trzech wymiarach ..................................................................... 120 Nawinięcie ........................................................................................................................... 121 Prosty kontener porcji danych ................................................................................................ 124 Niechciana geometria ........................................................................................................ 126 Przesuwanie wielokątów .................................................................................................... 131 Wycinanie nożycami .......................................................................................................... 134 Mieszanie kolorów .................................................................................................................... 135 Łączenie kolorów ................................................................................................................ 136 Zmiana równania mieszania ............................................................................................. 139 Wygładzanie ........................................................................................................................ 140 Podsumowanie ........................................................................................................................... 145 Rozdział 4. Podstawy przekształceń geometrycznych. Najważniejsze informacje o wektorach i macierzach ............................ 147 Czy to jest ten straszny rozdział z matematyką? ................................................................... 148 Szybki kurs matematyki ........................................................................................................... 149 Wektory, czyli w którym kierunku .................................................................................. 149 Macierz ................................................................................................................................. 152 Przekształcenia ........................................................................................................................... 154 Współrzędne oka ................................................................................................................ 154 Przekształcenia punktu widzenia ..................................................................................... 155 Przekształcenia modelowania ........................................................................................... 156 Dwoistość model-widok .................................................................................................... 157 Przekształcenia rzutowania ............................................................................................... 158 Przekształcenia widoku ..................................................................................................... 159 Macierz model-widok ............................................................................................................... 160 Konstruowanie macierzy ................................................................................................... 160 Łączenie przekształceń ....................................................................................................... 164 Stosowanie macierzy model-widok ................................................................................. 165 Więcej obiektów ........................................................................................................................ 167 Klasa zestawów trójkątów ................................................................................................. 167 Macierz rzutowania ................................................................................................................... 171 Rzutowanie prostopadłe .................................................................................................... 171 Rzutowanie perspektywiczne ............................................................................................ 172 Macierz rzutowania model-widok ................................................................................... 174 Potok przekształceń ........................................................................................................... 178 Stos macierzy ....................................................................................................................... 179 Modyfikowanie potoku ..................................................................................................... 180 Wersja wzbogacona ............................................................................................................ 184 Poruszanie się przy użyciu kamer i aktorów ......................................................................... 185 Układ odniesienia aktora ................................................................................................... 186 Kąty Eulera. „Użyj układu odniesienia, Luke!” .............................................................. 187 Obsługa kamery .................................................................................................................. 188 Dodawanie aktorów ........................................................................................................... 191 Oświetlenie .......................................................................................................................... 192 Podsumowanie ........................................................................................................................... 193 9 Spis treści Rozdział 5. Tekstury — podstawy ............................................................................... 195 Surowe dane obrazów ............................................................................................................... 196 Pakowanie pikseli ............................................................................................................... 196 Piksmapy .............................................................................................................................. 199 Upakowane formaty pikseli .............................................................................................. 200 Zapisywanie pikseli ............................................................................................................ 203 Wczytywanie pikseli ........................................................................................................... 205 Ładowanie tekstur ..................................................................................................................... 208 Wykorzystywanie bufora kolorów ................................................................................... 209 Aktualizowanie tekstur ...................................................................................................... 210 Obiekty tekstur ................................................................................................................... 211 Nakładanie tekstur .................................................................................................................... 212 Współrzędne tekstury ........................................................................................................ 212 Parametry tekstur ............................................................................................................... 214 Praktyczne zastosowanie poznanych wiadomości ........................................................ 217 Mipmapy ..................................................................................................................................... 222 Filtrowanie mipmap ........................................................................................................... 223 Generowanie poziomów mipmap .................................................................................... 225 Zastosowanie mipmap ....................................................................................................... 225 Filtrowanie anizotropowe ........................................................................................................ 233 Kompresja tekstur ..................................................................................................................... 235 Kompresowanie tekstur ..................................................................................................... 236 Ładowanie tekstur skompresowanych ............................................................................ 238 Ostatni przykład ................................................................................................................. 239 Podsumowanie ........................................................................................................................... 240 Rozdział 6. Myślenie niekonwencjonalne — programy do cieniowania ................. 241 GLSL 101 ..................................................................................................................................... 242 Zmienne i typy danych ...................................................................................................... 243 Kwalifikatory zmiennych .................................................................................................. 246 Prawdziwy shader ............................................................................................................... 248 Kompilowanie, wiązanie i konsolidowanie .................................................................... 252 Praktyczne wykorzystanie shadera .................................................................................. 258 Wierzchołek prowokujący ................................................................................................ 259 Dane uniform shadera .............................................................................................................. 259 Znajdowanie danych uniform .......................................................................................... 260 Zmienne uniform skalarne i wektorowe ......................................................................... 260 Tablice uniform .................................................................................................................. 261 Macierze uniform ............................................................................................................... 262 Płaski shader ........................................................................................................................ 262 Funkcje standardowe ................................................................................................................ 265 Funkcje trygonometryczne ............................................................................................... 265 Funkcje wykładnicze .......................................................................................................... 266 Funkcje geometryczne ....................................................................................................... 267 Funkcje macierzowe ........................................................................................................... 267 Funkcje porównywania wektorów ................................................................................... 267 Inne często używane funkcje ............................................................................................ 267 10 Spis treści Symulowanie światła ................................................................................................................. 272 Światło rozproszone ........................................................................................................... 272 Shader światła rozproszonego .......................................................................................... 274 Model oświetlenia ADS ..................................................................................................... 278 Cieniowanie Phonga .......................................................................................................... 281 Korzystanie z tekstur ................................................................................................................. 285 Nic, tylko teksele ................................................................................................................. 285 Oświetlanie tekseli .............................................................................................................. 287 Anulowanie przetwarzania fragmentów ......................................................................... 289 Teksturowanie w stylu kreskówkowym — teksele w roli światła ................................ 292 Podsumowanie ........................................................................................................................... 294 Rozdział 7. Tekstury — techniki zaawansowane ....................................................... 295 Tekstury prostokątne ................................................................................................................ 296 Wczytywanie tekstury prostokątnej ................................................................................ 297 Zastosowanie tekstur prostokątnych ............................................................................... 297 Tekstury sześcienne ................................................................................................................... 300 Wczytywanie tekstur sześciennych .................................................................................. 301 Tworzenie pudła nieba ...................................................................................................... 302 Tworzenie efektu odbicia .................................................................................................. 304 Multiteksturowanie ................................................................................................................... 305 Wiele współrzędnych tekstur ........................................................................................... 306 Przykład multiteksturowania ............................................................................................ 306 Teksturowanie punktów ........................................................................................................... 309 Teksturowanie punktów .................................................................................................... 309 Rozmiar punktów ............................................................................................................... 310 Podsumowanie wiadomości ............................................................................................. 311 Parametry punktów ............................................................................................................ 314 Nadawanie punktom kształtów ........................................................................................ 314 Obracanie punktów ............................................................................................................ 315 Tablice tekstur ............................................................................................................................ 317 Ładowanie tablicy tekstur dwuwymiarowych ................................................................ 317 Indeksowanie tablicy tekstur ............................................................................................ 319 Uzyskiwanie dostępu do tablic tekstur ............................................................................ 320 Tekstury zastępcze ..................................................................................................................... 320 Podsumowanie ........................................................................................................................... 322 Część II Techniki średnio zaawansowane i zaawansowane ........... 323 Rozdział 8. Buforowanie — od tej pory przechowywanie danych zależy od Ciebie ......................................................................................... 325 Bufory .......................................................................................................................................... 326 Tworzenie własnych buforów ........................................................................................... 327 Napełnianie buforów ......................................................................................................... 328 Obiekty bufora pikseli ........................................................................................................ 329 Tekstury buforowe ............................................................................................................. 336 11 Spis treści Obiekt bufora obrazu, czyli opuszczamy okno ..................................................................... 338 Sposób użycia FBO ............................................................................................................. 339 Obiekt bufora renderowania ............................................................................................. 339 Bufory rysowania ................................................................................................................ 341 Kompletność bufora obrazu ............................................................................................. 344 Kopiowanie danych w buforach obrazu ......................................................................... 347 Praktyczny przykład wykorzystania buforów FBO ....................................................... 348 Renderowanie do tekstur ......................................................................................................... 353 Podsumowanie ........................................................................................................................... 358 Rozdział 9. Buforowanie — techniki zaawansowane ................................................ 359 Uzyskiwanie dostępu do danych ............................................................................................. 360 Mapowanie buforów .......................................................................................................... 360 Kopiowanie buforów .......................................................................................................... 361 Wysyłanie danych z shadera pikseli i odwzorowywanie fragmentów wyjściowych ....... 362 Nowe formaty dla nowej generacji urządzeń ........................................................................ 364 Precyzyjne formaty zmiennoprzecinkowe ...................................................................... 365 Wielopróbkowanie ............................................................................................................. 379 Liczby całkowite .................................................................................................................. 383 sRGB ..................................................................................................................................... 384 Kompresja tekstur .............................................................................................................. 386 Podsumowanie ........................................................................................................................... 388 Rozdział 10. Operacje na fragmentach — koniec potoku ........................................... 389 Okrawanie — przycinanie geometrii na wymiar .................................................................. 390 Wielopróbkowanie .................................................................................................................... 391 Powierzchnia pokrycia próbki .......................................................................................... 391 Maska próbki ....................................................................................................................... 392 Podsumowanie dotychczasowych wiadomości ............................................................. 393 Operacje na szablonach ............................................................................................................ 397 Testowanie głębi ........................................................................................................................ 400 Ograniczanie wartości głębi .............................................................................................. 400 Mieszanie kolorów .................................................................................................................... 400 Równanie mieszania ........................................................................................................... 401 Funkcja mieszania .............................................................................................................. 401 Zebranie wiadomości ......................................................................................................... 403 Rozsiewanie kolorów ................................................................................................................ 404 Operacje logiczne ...................................................................................................................... 405 Maskowanie wyniku ................................................................................................................. 405 Maskowanie koloru ............................................................................................................ 406 Maskowanie głębi ............................................................................................................... 406 Maskowanie buforów szablonu ........................................................................................ 407 Zastosowanie masek ........................................................................................................... 407 Podsumowanie ........................................................................................................................... 407 12 Spis treści Rozdział 11. Programy cieniujące — techniki zaawansowane ................................... 409 Zaawansowane shadery wierzchołków .................................................................................. 410 Fizyczne symulacje w shaderze wierzchołków ............................................................... 410 Shadery geometrii ...................................................................................................................... 417 Shader geometrii przepuszczający dane .......................................................................... 417 Zastosowanie shadera geometrii w programie ............................................................... 419 Usuwanie geometrii w shaderach geometrii .................................................................. 423 Modyfikowanie geometrii w shaderze geometrii .......................................................... 426 Generowanie geometrii w shaderze geometrii ............................................................... 427 Zmienianie typu obiektu podstawowego w shaderze geometrii ................................. 431 Nowe typy obiektów podstawowych w shaderach geometrii ...................................... 433 Zaawansowane shadery fragmentów ...................................................................................... 436 Przetwarzanie końcowe w shaderze fragmentów — korekcja kolorów ..................... 438 Przetwarzanie końcowe — splot ...................................................................................... 439 Generowanie danych obrazu w shaderze fragmentów ................................................. 442 Ignorowanie zadań w shaderze fragmentów .................................................................. 445 Kontrolowanie głębi poszczególnych fragmentów ........................................................ 447 Inne zaawansowane funkcje shaderów .................................................................................. 448 Interpolacja i kwalifikatory pamięci ................................................................................ 448 Inne zaawansowane funkcje wbudowane ....................................................................... 452 Obiekty bufora bloku zmiennych jednorodnych ................................................................. 454 Tworzenie bloków zmiennych jednorodnych ................................................................ 455 Podsumowanie ........................................................................................................................... 464 Rozdział 12. Zarządzanie geometrią — techniki zaawansowane .............................. 465 Zbieranie informacji o potoku OpenGL — zapytania ......................................................... 466 Przygotowywanie zapytania .............................................................................................. 467 Wysyłanie zapytania .......................................................................................................... 468 Pobieranie wyników zapytania ......................................................................................... 468 Wykorzystanie wyniku zapytania .................................................................................... 469 Zmuszanie OpenGL do podejmowania decyzji ............................................................. 472 Mierzenie czasu wykonywania poleceń .......................................................................... 475 Przechowywanie danych w pamięci GPU ............................................................................. 477 Przechowywanie danych w buforach danych wierzchołków ....................................... 478 Przechowywanie w buforach indeksów wierzchołków ................................................. 482 Organizowanie buforów przy użyciu obiektów tablic wierzchołków ................................ 483 Optymalne rysowanie dużych ilości geometrii ..................................................................... 486 Łączenie funkcji rysujących .............................................................................................. 486 Łączenie geometrii poprzez restart obiektów podstawowych ..................................... 487 Rysowanie wielu egzemplarzy jednego obiektu ............................................................. 489 Automatyczne pobieranie danych ................................................................................... 495 Przechowywanie przekształconych wierzchołków — przekształcenie zwrotne .............. 500 Przekształcenie zwrotne .................................................................................................... 501 Wyłączanie rasteryzacji ..................................................................................................... 506 Liczenie wierzchołków przy użyciu zapytań obiektów podstawowych ...................... 507 Wykorzystanie wyników zapytania obiektów podstawowych ..................................... 508 Przykład zastosowania przekształcenia zwrotnego ....................................................... 509 13 Spis treści Przycinanie i rysowanie tego, co się chce ............................................................................... 518 Definiowanie własnych płaszczyzn obcinania ............................................................... 519 Synchronizacja rysowania ........................................................................................................ 523 Podsumowanie ........................................................................................................................... 527 Część III OpenGL na różnych platformach ........................................ 529 Rozdział 13. OpenGL w systemie Windows .................................................................. 531 Implementacje OpenGL w systemie Windows ..................................................................... 532 OpenGL firmy Microsoft .................................................................................................. 533 Nowoczesne sterowniki graficzne .................................................................................... 533 Rozszerzenia OpenGL ....................................................................................................... 534 Rozszerzenia WGL ............................................................................................................. 536 Podstawy renderowania w systemie Windows ..................................................................... 537 Konteksty urządzenia GDI ................................................................................................ 538 Formaty pikseli ................................................................................................................... 539 Kontekst renderingu OpenGL .......................................................................................... 547 Konsolidacja wiadomości ......................................................................................................... 550 Tworzenie okna .................................................................................................................. 550 Rendering pełnoekranowy ................................................................................................ 555 Podwójne buforowanie ............................................................................................................. 556 Zapobieganie poszarpaniu obrazu ................................................................................... 557 Podsumowanie ........................................................................................................................... 557 Rozdział 14. OpenGL w systemie Mac OS X .................................................................. 559 Cztery twarze OpenGL w systemie Mac ................................................................................ 560 Biblioteka OpenGL i interfejs Cocoa ...................................................................................... 561 Tworzenie programu Cocoa ............................................................................................. 561 Składanie wszystkiego razem ............................................................................................ 566 Buforowanie pojedyncze czy podwójne .......................................................................... 568 Program SphereWorld ....................................................................................................... 569 Renderowanie pełnoekranowe ................................................................................................ 573 Renderowanie pełnoekranowe w Cocoa ......................................................................... 574 CGL ............................................................................................................................................. 581 Synchronizacja szybkości klatek ....................................................................................... 581 Przyspieszanie operacji wypełniania ............................................................................... 582 Wielowątkowość w OpenGL ............................................................................................ 583 Podsumowanie ........................................................................................................................... 583 Rozdział 15. OpenGL w Linuksie .................................................................................... 585 Wiadomości podstawowe ........................................................................................................ 586 Rys historyczny ................................................................................................................... 586 Co to jest X .......................................................................................................................... 586 Zaczynamy .................................................................................................................................. 587 Sprawdzanie obsługi OpenGL .......................................................................................... 587 Konfiguracja Mesy ............................................................................................................. 588 Konfiguracja sterowników sprzętowych ......................................................................... 589 14 Spis treści Konfiguracja bibliotek GLUT i GLEW ........................................................................... 589 Budowa aplikacji OpenGL ................................................................................................ 590 GLX — łączenie z X Windows ................................................................................................ 591 Ekrany i X Windows .......................................................................................................... 592 Zarządzanie konfiguracjami i obiektami widoku .......................................................... 592 Okna i powierzchnie renderingu ..................................................................................... 595 Rozszerzanie OpenGL i GLX ............................................................................................ 597 Zarządzanie kontekstem .................................................................................................... 597 Synchronizacja .................................................................................................................... 601 Zapytania GLX .................................................................................................................... 602 Składanie aplikacji ..................................................................................................................... 602 Podsumowanie ........................................................................................................................... 605 Rozdział 16. OpenGL ES w urządzeniach przenośnych ............................................... 607 OpenGL na diecie ...................................................................................................................... 608 Do czego służy ES ............................................................................................................... 608 Rys historyczny ................................................................................................................... 609 Wybór wersji .............................................................................................................................. 611 ES 2.0 .................................................................................................................................... 611 Środowisko układów wbudowanych ...................................................................................... 615 Kwestie projektowe ............................................................................................................ 616 Rozwiązywanie problemów z ograniczeniami ............................................................... 616 Działania na liczbach stałoprzecinkowych ..................................................................... 617 EGL — nowe środowisko okienkowe ..................................................................................... 619 Ekrany EGL ......................................................................................................................... 619 Tworzenie okna .................................................................................................................. 621 Zarządzanie kontekstem .................................................................................................... 625 Prezentowanie buforów i synchronizacja renderowania .............................................. 626 Jeszcze trochę o EGL .......................................................................................................... 627 Środowiska układów wbudowanych ...................................................................................... 628 Popularne systemy operacyjne ......................................................................................... 628 Rozszerzenia producentów ............................................................................................... 628 Dla domowego rzemieślnika ............................................................................................. 628 Platformy przenośne firmy Apple ........................................................................................... 629 Tworzenie projektu aplikacji dla iPhone’a ..................................................................... 629 Przesiadka na iPhone’a ...................................................................................................... 633 Podsumowanie ........................................................................................................................... 640 Dodatki ................................................................................................ 641 Dodatek A Dalsza lektura ............................................................................................ 643 Dodatek B Słowniczek ................................................................................................. 647 Skorowidz .................................................................................................. 653 15 Rozdział 6. Myślenie niekonwencjonalne — programy do cieniowania Autor: Richard S. Wright, Jr Część I Podstawy Po raz pierwszy ze shaderami spotkaliśmy się w rozdziale 3., w którym opisane zostały podsta- wowe techniki renderowania. Osoby, które ten rozdział pominęły, aby od razu przejść do pisania shaderów, powinny w razie potrzeby do niego wrócić i dokładnie zapoznać się z atrybutami i danymi typu uniform oraz sposobami ich przekazywania do shadera z kodu klienckiego. W tamtym rozdziale w kręgu naszych zainteresowań była wyłącznie strona kliencka. Użyliśmy też niektórych standardowych shaderów oraz kilku typowych funkcji i procedur renderujących. Na początku tego rozdziału można będzie pogłębić swą wiedzę na temat pracy po stronie klienckiej, a następnie pokażemy, jak pisać własne shadery, czyli serwerową część procesu renderowania. W tym celu należy zapoznać się z językiem do pisania programów do cieniowania, czyli shaderów. GLSL 101 OpenGL Shading Language (GLSL) to wysokopoziomowy język programowania podobny do języka C. Napisane w nim programy podlegają kompilacji i konsolidacji przez implementację OpenGL i najczęściej w całości działają na sprzęcie graficznym. Kod shaderów wygląda podob- nie do programów w języku C. Ich wykonywanie zaczyna się od funkcji main oraz można w nich pisać funkcje pobierające argumenty i zwracające wartości. Poniższy rysunek 6.1 to kopia rysunku 3.1 z rozdziału 3., przedstawiająca podstawowe cechy architektury shadera. Jak wynika z powyższego schematu, zawsze potrzebne będą nam przynajmniej dwa shadery — wierzchołków i fragmentów. Trzeci rodzaj shadera, który również może być potrzebny, to tzw. shader geometrii, ale jego szczegółowy opis odłożymy do rozdziału 11. „Programy cieniujące — techniki zaawansowane”. Dane do shadera wierzchołków można przesyłać na trzy sposoby — jako atrybuty, czyli elementy danych dotyczące poszczególnych wierzchołków; dane rodzaju uniform, które są takie same dla całej porcji danych wierzchołkowych; oraz jako tekstury, o któ- rych szerzej pisaliśmy w rozdziale 5. Dane uniform i teksturowe można także przesyłać do sha- dera fragmentów. Nie ma natomiast sensu wysyłać do tego shadera atrybutów wierzchołków, ponieważ służy on tylko do wypełniania fragmentów (pikseli) po rasteryzacji danego obiektu podstawowego. Dane wierzchołkowe mogą natomiast być przesyłane do shadera fragmentów przez program wierzchołkowy. Wówczas jednak dane takie mogą być stałe (każdy fragment dysponuje taką samą wartością) lub wartości mogą być interpolowane na różne sposoby na powierzchni obiektu. Kod shaderów jest bardzo podobny do kodu programów w języku C. Wykonywanie zaczyna się od funkcji main, obowiązują takie same konwencje stosowania komentarzy i taki sam zestaw znaków oraz używa się wielu takich samych dyrektyw preprocesora. Pełną specyfikację języka można znaleźć w dokumencie OpenGL Shading Language Specification. Wskazówki, jak znaleźć tę specyfikację, zamieszczono w dodatku A. Są tam wymienione przydatne adresy internetowe oraz inne wartościowe źródła i kursy uzupełniające. Przyjmujemy założenie, że znasz już języki C i C++, i dlatego będziemy opisywać język GLSL z perspektywy programisty tych języków. 242 Rozdział 6. Myślenie niekonwencjonalne — programy do cieniowania Rysunek 6.1. Schemat architektury shadera Zmienne i typy danych Naukę języka GLSL dobrze jest rozpocząć od zapoznania się z dostępnymi w nim typami danych. Są cztery typy: liczby całkowite (ze znakiem i bez znaku), liczby zmiennoprzecinkowe (od OpenGL 3.3 tylko pojedynczej precyzji) oraz wartości logiczne (bool). W GLSL nie ma wskaź- ników ani typów łańcuchowych i znakowych. Funkcje mogą zwracać wartości dowolnego z dostępnych typów lub nie zwracać nic, jeśli zostaną zadeklarowane jako void, ale niedozwo- lone jest stosowanie wskaźników void. Sposób użycia typów danych GLSL jest podobny do spo- sobu ich użycia w językach C i C++. bool bDone = false; // Wartość logiczna: true lub false int iValue = 42; // Liczba całkowita ze znakiem uint uiValue = 3929u; // Liczba całkowita bez znaku float fValue = 42.0f; // Wartość zmiennoprzecinkowa 243 Część I Podstawy Typy wektorowe Jedną z najbardziej interesujących rzeczy dostępnych w GLSL, a której nie ma w C i C++, są wektorowe typy danych. Wartości każdego z czterech podstawowych typów danych można prze- chowywać w dwu-, trzy- lub czterowymiarowych wektorach. Pełną listę wektorowych typów danych przedstawia tabela 6.1. Tabela 6.1. Wektorowe typy danych języka GLSL Typ vec2, vec3, vec4 Opis Dwu-, trzy- i czteroskładnikowy wektor wartości zmiennoprzecinkowych ivec2, ivec3, ivec4 Dwu-, trzy- i czteroskładnikowy wektor wartości całkowitoliczbowych uvec2, uvec3, uvec4 Dwu-, trzy- i czteroskładnikowy wektor wartości całkowitoliczbowych bez znaku bvec2, bvec3, bvec4 Dwu-, trzy- i czteroskładnikowy wektor wartości logicznych Zmienne typu wektorowego deklaruje się tak samo, jak wszystkie inne rodzaje zmiennych. Poniższa instrukcja deklaruje położenie wierzchołka w postaci czteroskładnikowego wektora war- tości zmiennoprzecinkowych: vec4 vVertexPos; Wektor można także zainicjalizować przy użyciu konstruktora: vec4 vVertexPos = vec4(39.0f, 10.0f, 0.0f, 1.0f); Nie należy jednak tego sposobu inicjalizacji mylić z konstruktorem klasy w języku C++. Wekto- rowe typy danych w języku GLSL nie są klasami, lecz typami wbudowanymi. Wektory można przypisywać jeden do drugiego, dodawać, skalować przez wartości skalarne (nie wektorowe) itd. vVertexPos = vOldPos + vOffset; vVertexPos = vNewPos; vVertexPos += vec4(1.0f, 1.0f, 0.0f, 0.0f); vVertexPos *= 5.0f; Kolejną niezwykłą cechą języka GLSL jest sposób odwoływania się do poszczególnych elemen- tów wektora. Jeśli wiesz, co to takiego konstrukcja union w języku C++, wektory możesz sobie wyobrazić jako unie na steroidach. W celu odwołania się do elementów wektora można użyć kropki albo dowolnego z trzech zestawów identyfikatorów: xyzw, rgba oraz stpq. Podczas pracy z typami wektorowymi najczęściej używamy identyfikatorów xyzw. vVertexPos.x = 3.0f; vVertexPos.xy = vec2(3.0f, 5.0f); vVertexPos.xyz = vNewPos.xyz; Podczas pracy z kolorami korzystamy z identyfikatorów rgba. vOutputColor.r = 1.0f; vOutputColor.rgba = vec4(1.0f, 1.0f, 0.5f, 1.0f); 244 Rozdział 6. Myślenie niekonwencjonalne — programy do cieniowania Identyfikatorów stpq używany w pracy ze współrzędnymi tekstur. vTexCoord.st = vec2(1.0f, 0.0f); Dla języka GLSL nie ma znaczenia, którego zestawu identyfikatorów użyjemy, tzn. nie ma żad- nego błędu w poniższej instrukcji: vTexCoord.st = vVertex.st; Nie można natomiast mieszać różnych zestawów w jednej operacji dostępu do wektora: vTexCoord.st = vVertex.xt; // Nie można użyć jednocześnie x i t! Wektorowe typy danych obsługują również technikę transformacji o nazwie swizzling. Polega ona na zamianie miejscami dwóch lub większej liczby elementów wektora. Może się to np. przy- dać do zamiany danych kolorów w formacie RGB na BGR: vNewColor.bgra = vOldColor.rgba; Wektorowe typy danych są typami rodzimymi nie tylko języka GLSL, lecz również sprzętu. Są szybkie, a operacje wykonywane są na wszystkich czterech składnikach naraz. Na przykład poniż- sza operacja: vVertex.x = vOtherVertex.x + 5.0f; vVertex.y = vOtherVertex.y + 4.0f; vVertex.z = vOtherVertex.z + 1.0f; zostałaby wykonana znacznie szybciej, gdyby użyto rodzimej notacji wektorowej: vVertex.xyz = vOtherVertex.xyz + vec3(5.0f, 4.0f, 1.0f); Typy macierzowe Oprócz typów wektorowych, język GLSL obsługuje kilka typów macierzowych. Jednak w przeci- wieństwie do tych pierwszych, typy macierzowe obsługują tylko wartości zmiennoprzecinkowe. Nie można tworzyć macierzy wartości typu całkowitoliczbowego ani logicznych, ponieważ nie mają one praktycznego zastosowania. W tabeli 6.2 znajduje się lista dostępnych typów macierzowych. Macierz w języku GLSL to w istocie tablica wektorów kolumnowych (może warto sobie w tym momencie powtórzyć wiadomości o porządku kolumnowym macierzy z rozdziału 4. „Podstawy przekształceń geometrycznych. Najważniejsze informacje o wektorach i macierzach”). Aby na przykład ustawić ostatnią kolumnę macierzy 4×4, można zastosować następujący kod: mModelView[3] = vec4(0.0f, 0.0f, 0.0f, 1.0f); Aby pobrać ostatnią kolumnę macierzy: vec4 vTranslation = mModelView[3]; Jeszcze precyzyjniejsze zapytanie: vec3 vTranslation = mModelView[3].xyz; 245 Część I Podstawy Tabela 6.2. Typy macierzowe języka GLSL Typ Opis Dwie kolumny i dwa wiersze mat2, mat2x2 mat3, mat3x3 Trzy kolumny i trzy wiersze mat4, mat4x4 Cztery kolumny i cztery wiersze mat2x3 mat2x4 mat3x2 mat3x4 mat4x2 mat4x3 Dwie kolumny i trzy wiersze Dwie kolumny i cztery wiersze Trzy kolumny i dwa wiersze Trzy kolumny i cztery wiersze Cztery kolumny i dwa wiersze Cztery kolumny i trzy wiersze Macierze można także mnożyć przez wektory. Działanie takie często wykonuje się w celu prze- kształcenia wierzchołka przez macierz rzutowania model-widok: vec4 vVertex; mat4 mvpMatrix; … … vOutPos = mvpMatrix * vVertex; Typy macierzowe, podobnie jak wektory, mają również swoje konstruktory. Aby na przykład wpisać bezpośrednio do kodu macierz 4×4, można napisać poniższą instrukcję: mat4 vTransform = mat4(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f); Jako macierz przekształcenia zastosowaliśmy macierz jednostkową. Można także użyć szybszego konstruktora macierzy wypełniającego tylko przekątną jedną wartością. mat4 vTransform = mat4(1.0f); Kwalifikatory zmiennych Deklaracje zmiennych shadera można rozszerzyć o pewne kwalifikatory służące do określania ich jako zmiennych wejściowych (in i uniform), wyjściowych (out) lub stałych (const). Zmienne wejściowe odbierają dane od klienta OpenGL (atrybuty przesyłane poprzez C lub C++) lub z poprzedniego etapu pracy shadera (np. zmienne przekazywane przez shadera wierzchołków do shadera fragmentów). Zmienne wyjściowe służą do zapisywania na dowolnym etapie pracy 246 Rozdział 6. Myślenie niekonwencjonalne — programy do cieniowania wartości, które chcemy udostępnić w następnych etapach, np. w celu przekazania danych z sha- dera wierzchołków do shadera fragmentów albo zapisania ostatecznej wartości koloru przez shader fragmentów. W tabeli 6.3 zostały zebrane główne kwalifikatory zmiennych. Tabela 6.3. Kwalifikatory zmiennych Kwalifikator brak const in Opis Zwykła zmienna lokalna niedostępna i niewidoczna na zewnątrz Stała czasu kompilacji lub parametr tylko do odczytu funkcji Zmienna przekazana z poprzedniego etapu in centroid Zmienna przekazana z poprzedniego stanu, stosuje interpolację środkową out Zmienna przekazywana do następnego etapu przetwarzania lub przechowująca wartość zwrotną funkcji out centroid Zmienna przekazywana do następnego etapu przetwarzania, stosuje interpolację środkową inout uniform Zmienna do odczytu i zapisu. Dozwolona tylko jako parametr funkcji lokalnej Wartość przekazywana od klienta, taka sama dla wszystkich wierzchołków Kwalifikatora inout można używać tylko do deklarowania parametrów funkcji. Ponieważ język GLSL nie obsługuje wskaźników (czyli referencji), kwalifikator ten stanowi jedyny sposób na przekazanie wartości do funkcji i umożliwienie jej zmodyfikowania i zwrócenia wartości zmiennej. Na przykład funkcja zadeklarowana poniżej: int CalculateSometing(float fTime, float fStepSize, inout float fVariance); zwróciłaby wartość całkowitoliczbową (np. znacznik powodzenia lub niepowodzenia) i dodat- kowo mogłaby zmodyfikować wartość zmiennej fVariance, a kod wywołujący mógłby odczytać również tę jej nową wartość. Aby umożliwić modyfikowanie parametru w językach C i C++, można by było zadeklarować tę funkcję przy użyciu wskaźnika: int CalculateSomething(float fTime, float fStepSize, float* fVariance); Kwalifikator centroid działa wyłącznie w przypadku renderowania buforów wielopróbkowa- nych. W buforze o pojedynczym próbkowaniu interpolację wykonuje się zawsze od środka pik- sela. W przypadku wielopróbkowania, gdy zostanie użyty kwalifikator centroid, wartość inter- polowana wypada w obrębie zarówno obiektu podstawowego, jak i piksela. Więcej na temat wielopróbkowania piszemy w rozdziale 9. „Buforowanie — techniki zaawansowane”. Domyślnie parametry są interpolowane między etapami shaderów w sposób odpowiedni dla perspektywy. Można zastosować interpolację nieperspektywiczną za pomocą słowa kluczowego noperspective, a nawet całkiem ją wyłączyć za pomocą słowa flat. Można także użyć słowa kluczowego smooth, aby bezpośrednio zaznaczyć, że zmienna jest płynnie interpolowana w sposób perspektywiczny, ale to jest i tak działanie domyślne. Poniżej znajduje się kilka przy- kładowych deklaracji: 247 Część I Podstawy smooth out vec3 vSmoothValue; flat out vec3 vFlatColor
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

OpenGL. Księga eksperta. Wydanie V
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: