OpenGL / Richard S. Wrigth, Jr. [et al.].
Transkrypt
OpenGL / Richard S. Wrigth, Jr. [et al.].
OpenGL / Richard S. Wrigth, Jr. [et al.]. - wyd. 5. – Gliwice, cop. 2011 Spis treści Podziękowania O autorach Wstęp do wydania piątego Wstęp do wydania czwartego Wstęp do wydania trzeciego Wprowadzenie Co nowego w tym wydaniu Struktura ksiąŜki Część I: Podstawy Część II: Techniki średnio zaawansowane i zaawansowane Część III: OpenGL na róŜnych platformach Konwencje typograficzne Witryna internetowa 17 21 23 25 29 31 31 32 32 34 34 35 35 Część I: Podstawy 37 Rozdział 1. Wprowadzenie do grafiki trójwymiarowej i biblioteki OpenGL Historia grafiki komputerowej w skrócie Elektryczność Wejście w trzeci wymiar Podstawowe efekty trójwymiarowe i najwaŜniejsze pojęcia Przekształcanie i rzutowanie Rasteryzacja Cieniowanie Teksturowanie Mieszanie kolorów Łączenie punktów Typowe zastosowania grafiki trójwymiarowej Trzy wymiary w czasie rzeczywistym Trzy wymiary bez czasu rzeczywistego Programy do cieniowania Podstawowe zasady programowania grafiki trójwymiarowej To nie jest zestaw narzędzi Układy współrzędnych Rzutowanie z trzech w dwa wymiary Podsumowanie 39 40 40 41 44 44 45 45 46 47 47 47 47 48 50 52 52 52 56 58 Rozdział 2. Rozpoczynanie pracy Czym jest OpenGL Ewolucja standardu Mechanizm rozszerzeń Czyje to rozszerzenie Korzystanie z biblioteki OpenGL Narzędzia pomocnicze Biblioteka GLUT Biblioteka GLEW 61 62 63 64 66 71 72 72 73 Biblioteka GLTools Szczegóły interfejsu Typy danych Błędy OpenGL Sprawdzanie wersji Pobieranie wskazówek z funkcji glHint Maszyna stanów OpenGL Konfigurowanie środowiska programistycznego w systemie Windows Dodawanie ścieŜek Tworzenie projektu Dodawanie własnych plików Konfigurowanie środowiska programistycznego w systemie Mac OS X Niestandardowe ustawienia kompilacji Tworzenie nowego projektu Szkielety, nagłówki i biblioteki Nasz pierwszy trójkąt Układ współrzędnych Konfigurowanie ustawień Zabieramy się do pracy OŜywianie sceny Klawisze specjalne OdświeŜanie ekranu Prosta animacja Podsumowanie 73 74 74 76 77 77 78 79 79 81 82 84 85 85 87 90 95 98 100 101 101 103 103 104 Rozdział 3. Podstawy renderowania Rysowanie punktów w trzech wymiarach Podstawowy potok graficzny Klient-serwer Programy do cieniowania Konfigurowanie układu współrzędnych Rzutowanie ortogonalne Rzutowanie perspektywiczne Standardowe programy do cieniowania Atrybuty Zmienne typu uniform Łączenie punktów Punkty i linie Rysowanie trójkątów w trzech wymiarach Nawinięcie Prosty kontener porcji danych Niechciana geometria Przesuwanie wielokątów Wycinanie noŜycami Mieszanie kolorów Łączenie kolorów Zmiana równania mieszania Wygładzanie Podsumowanie 105 106 106 107 108 110 111 112 112 113 113 115 116 120 121 124 126 131 134 135 136 139 140 145 Rozdział 4. Podstawy przekształceń geometrycznych. NajwaŜniejsze informacje o wektorach i macierzach Czy to jest ten straszny rozdział z matematyką? Szybki kurs matematyki Wektory, czyli w którym kierunku Macierz Przekształcenia Współrzędne oka Przekształcenia punktu widzenia Przekształcenia modelowania Dwoistość model-widok Przekształcenia rzutowania Przekształcenia widoku Macierz model-widok Konstruowanie macierzy Łączenie przekształceń Stosowanie macierzy model-widok Więcej obiektów Klasa zestawów trójkątów Macierz rzutowania Rzutowanie prostopadłe Rzutowanie perspektywiczne Macierz rzutowania model-widok Potok przekształceń Stos macierzy Modyfikowanie potoku Wersja wzbogacona Poruszanie się przy uŜyciu kamer i aktorów Układ odniesienia aktora Kąty Eulera. "UŜyj układu odniesienia, Luke!" Obsługa kamery Dodawanie aktorów Oświetlenie Podsumowanie 147 148 149 149 152 154 154 155 156 157 158 159 160 160 164 165 167 167 171 171 172 174 178 179 180 184 185 186 187 188 191 192 193 Rozdział 5. Tekstury - podstawy Surowe dane obrazów Pakowanie pikseli Piksmapy Upakowane formaty pikseli Zapisywanie pikseli Wczytywanie pikseli Ładowanie tekstur Wykorzystywanie bufora kolorów Aktualizowanie tekstur Obiekty tekstur Nakładanie tekstur Współrzędne tekstury Parametry tekstur Praktyczne zastosowanie poznanych wiadomości Mipmapy 195 196 196 199 200 203 205 208 209 210 211 212 212 214 217 222 Filtrowanie mipmap Generowanie poziomów mipmap Zastosowanie mipmap Filtrowanie anizotropowe Kompresja tekstur Kompresowanie tekstur Ładowanie tekstur skompresowanych Ostatni przykład Podsumowanie 223 225 225 233 235 236 238 239 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 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 Tekstury prostokątne Wczytywanie tekstury prostokątnej Zastosowanie tekstur prostokątnych Tekstury sześcienne Wczytywanie tekstur sześciennych Tworzenie pudła nieba Tworzenie efektu odbicia 295 296 297 297 300 301 302 304 Multiteksturowanie Wiele współrzędnych tekstur Przykład multiteksturowania Teksturowanie punktów Teksturowanie punktów Rozmiar punktów Podsumowanie wiadomości Parametry punktów Nadawanie punktom kształtów Obracanie punktów Tablice tekstur Ładowanie tablicy tekstur dwuwymiarowych Indeksowanie tablicy tekstur Uzyskiwanie dostępu do tablic tekstur Tekstury zastępcze Podsumowanie 305 306 306 309 309 310 311 314 314 315 317 317 319 320 320 322 Część II: Techniki średnio zaawansowane i zaawansowane 323 Rozdział 8. Buforowanie - od tej pory przechowywanie danych zaleŜy od Ciebie Bufory Tworzenie własnych buforów Napełnianie buforów Obiekty bufora pikseli Tekstury buforowe Obiekt bufora obrazu, czyli opuszczamy okno Sposób uŜycia FBO Obiekt bufora renderowania Bufory rysowania Kompletność bufora obrazu Kopiowanie danych w buforach obrazu Praktyczny przykład wykorzystania buforów FBO Renderowanie do tekstur Podsumowanie 325 326 327 328 329 336 338 339 339 341 344 347 348 353 358 Rozdział 9. Buforowanie - techniki zaawansowane Uzyskiwanie dostępu do danych Mapowanie buforów Kopiowanie buforów Wysyłanie danych z shadera pikseli i odwzorowywanie fragmentów wyjściowych Nowe formaty dla nowej generacji urządzeń Precyzyjne formaty zmiennoprzecinkowe Wielopróbkowanie Liczby całkowite sRGB Kompresja tekstur Podsumowanie 359 360 360 361 362 364 365 379 383 384 386 388 Rozdział 10. Operacje na fragmentach - koniec potoku Okrawanie - przycinanie geometrii na wymiar Wielopróbkowanie Powierzchnia pokrycia próbki Maska próbki Podsumowanie dotychczasowych wiadomości Operacje na szablonach Testowanie głębi Ograniczanie wartości głębi Mieszanie kolorów Równanie mieszania Funkcja mieszania Zebranie wiadomości Rozsiewanie kolorów Operacje logiczne Maskowanie wyniku Maskowanie koloru Maskowanie głębi Maskowanie buforów szablonu Zastosowanie masek Podsumowanie 389 390 391 391 392 393 397 400 400 400 401 401 403 404 405 405 406 406 407 407 407 Rozdział 11. Programy cieniujące - techniki zaawansowane Zaawansowane shadery wierzchołków Fizyczne symulacje w shaderze wierzchołków Shadery geometrii Shader geometrii przepuszczający dane Zastosowanie shadera geometrii w programie Usuwanie geometrii w shaderach geometrii Modyfikowanie geometrii w shaderze geometrii Generowanie geometrii w shaderze geometrii Zmienianie typu obiektu podstawowego w shaderze geometrii Nowe typy obiektów podstawowych w shaderach geometrii Zaawansowane shadery fragmentów Przetwarzanie końcowe w shaderze fragmentów - korekcja kolorów Przetwarzanie końcowe - splot Generowanie danych obrazu w shaderze fragmentów Ignorowanie zadań w shaderze fragmentów Kontrolowanie głębi poszczególnych fragmentów Inne zaawansowane funkcje shaderów Interpolacja i kwalifikatory pamięci Inne zaawansowane funkcje wbudowane Obiekty bufora bloku zmiennych jednorodnych Tworzenie bloków zmiennych jednorodnych Podsumowanie 409 410 410 417 417 419 423 426 427 431 433 436 438 439 442 445 447 448 448 452 454 455 464 Rozdział 12. Zarządzanie geometrią - techniki zaawansowane Zbieranie informacji o potoku OpenGL - zapytania Przygotowywanie zapytania Wysyłanie zapytania 465 466 467 468 Pobieranie wyników zapytania Wykorzystanie wyniku zapytania Zmuszanie OpenGL do podejmowania decyzji Mierzenie czasu wykonywania poleceń Przechowywanie danych w pamięci GPU Przechowywanie danych w buforach danych wierzchołków Przechowywanie w buforach indeksów wierzchołków Organizowanie buforów przy uŜyciu obiektów tablic wierzchołków Optymalne rysowanie duŜych ilości geometrii Łączenie funkcji rysujących Łączenie geometrii poprzez restart obiektów podstawowych Rysowanie wielu egzemplarzy jednego obiektu Automatyczne pobieranie danych Przechowywanie przekształconych wierzchołków - przekształcenie zwrotne Przekształcenie zwrotne Wyłączanie rasteryzacji Liczenie wierzchołków przy uŜyciu zapytań obiektów podstawowych Wykorzystanie wyników zapytania obiektów podstawowych Przykład zastosowania przekształcenia zwrotnego Przycinanie i rysowanie tego, co się chce Definiowanie własnych płaszczyzn obcinania Synchronizacja rysowania Podsumowanie 468 469 472 475 477 478 482 483 486 486 487 489 495 500 501 506 507 508 509 518 519 523 527 Część III: OpenGL na róŜnych platformach 529 Rozdział 13. OpenGL w systemie Windows Implementacje OpenGL w systemie Windows OpenGL firmy Microsoft Nowoczesne sterowniki graficzne Rozszerzenia OpenGL Rozszerzenia WGL Podstawy renderowania w systemie Windows Konteksty urządzenia GDI Formaty pikseli Kontekst renderingu OpenGL Konsolidacja wiadomości Tworzenie okna Rendering pełnoekranowy Podwójne buforowanie Zapobieganie poszarpaniu obrazu Podsumowanie 531 532 533 533 534 536 537 538 539 547 550 550 555 556 557 557 Rozdział 14. OpenGL w systemie Mac OS X Cztery twarze OpenGL w systemie Mac Biblioteka OpenGL i interfejs Cocoa Tworzenie programu Cocoa Składanie wszystkiego razem Buforowanie pojedyncze czy podwójne Program SphereWorld 559 560 561 561 566 568 569 Renderowanie pełnoekranowe Renderowanie pełnoekranowe w Cocoa CGL Synchronizacja szybkości klatek Przyspieszanie operacji wypełniania Wielowątkowość w OpenGL Podsumowanie 573 574 581 581 582 583 583 Rozdział 15. OpenGL w Linuksie Wiadomości podstawowe Rys historyczny Co to jest X Zaczynamy Sprawdzanie obsługi OpenGL Konfiguracja Mesy Konfiguracja sterowników sprzętowych Konfiguracja bibliotek GLUT i GLEW Budowa aplikacji OpenGL GLX - łączenie z X Windows Ekrany i X Windows Zarządzanie konfiguracjami i obiektami widoku Okna i powierzchnie renderingu Rozszerzanie OpenGL i GLX Zarządzanie kontekstem Synchronizacja Zapytania GLX Składanie aplikacji Podsumowanie 585 586 586 586 587 587 588 589 589 590 591 592 592 595 597 597 601 602 602 605 Rozdział 16. OpenGL ES w urządzeniach przenośnych OpenGL na diecie Do czego słuŜy ES Rys historyczny Wybór wersji ES 2.0 Środowisko układów wbudowanych Kwestie projektowe Rozwiązywanie problemów z ograniczeniami Działania na liczbach stałoprzecinkowych EGL - nowe środowisko okienkowe Ekrany EGL Tworzenie okna Zarządzanie kontekstem Prezentowanie buforów i synchronizacja renderowania Jeszcze trochę o EGL Środowiska układów wbudowanych Popularne systemy operacyjne Rozszerzenia producentów Dla domowego rzemieślnika Platformy przenośne firmy Apple 607 608 608 609 611 611 615 616 616 617 619 619 621 625 626 627 628 628 628 628 629 Tworzenie projektu aplikacji dla iPhone'a Przesiadka na iPhone'a Podsumowanie 629 633 640 Dodatki Dodatek A: Dalsza lektura Dodatek B: Słowniczek 641 643 647 Skorowidz 653 oprac. BPK