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

Podobne dokumenty