OpenGL i GLSL (nie taki krótki kurs) Część I
Książka OpenGL i GLSL (nie taki krótki kurs) to prawdziwa gratka dla każdego, kto chce odnaleźć się w nowoczesnej grafice komputerowej. Kurs opisany w książce przedstawia trzy aplikacje wyświetlające grafikę trójwymiarową. Do kolejnych wariantów każdej aplikacji są dodawane nowe efekty, stanowiąc przykłady zastosowań kolejnych możliwości standardu OpenGL i języka GLSL.
Dla ułatwienia korzystania z książki została ona podzielona na trzy części. Część pierwsza zawiera informacje podstawowe, w tym opis bibliotek podstawowych i pomocniczych oraz języka GLSL, i opis pierwszej aplikacji dla początkujących. Dzięki niej czytelnik również pozna:
•
potok przetwarzania grafiki i zadania wykonywane przez jego kolejne etapy,
• biblioteki i pliki nagłówkowe OpenGL-a,
• otoczenie OpenGL-a, m.in. biblioteki FreeGLUT i GLFW,
• matematyczne podstawy grafiki trójwymiarowej, w tym reprezentacje punktów i wektorów oraz przekształceń afinicznych i sposoby rzutowania równoległego i perspektywicznego,
• sposób przygotowania i używania szaderów w aplikacjach,
• pierwszą aplikację, którą samodzielnie rozbudujesz,
• wiele informacji dodatkowych, nie tylko dla początkujących.
Przedmowa 1
Źródła 5
1. Wprowadzenie 7
1.1. Odrobina historii i ideologii 7
1.2. Potok przetwarzania grafiki 10
1.3. Programy szaderów 13
1.4. Źródła danych w potoku przetwarzania grafiki 14
2. Biblioteki i pliki nagłówkowe OpenGL-a 17
2.1. Biblioteki pomocnicze GLEWi glçw 19
2.2. Nazwy i typy danych w OpenGL-u 22
2.3. Przedrostki i przyrostki nazw procedur 22
2.4. Zestawienie bibliotek 23
3. Otoczenie OpenGL-a 25
3.1. Biblioteka FreeGLUT 25
3.1.1. FreeGLUT—uwagi dodatkowe 31
3.2. Biblioteka GLFW 31
3.2.1. GLFW—obsługa dżojstika 36
3.2.2. GLFW—uwagi dodatkowe 37
3.3. System XWindow i biblioteka GLX 38
3.4. Uzupełnienia 47
3.4.1. Wymiary ekranu 47
3.4.2. *Technologia Optimus 48
4. Utensylia 51
4.1. Wypisanie informacji o wersji 51
4.2. Reakcje na błąd 51
4.3. Reprezentacje kodów źródłowych szaderów 52
4.4. Kompilowanie szaderów i łączenie programów 54
4.5. *Uzupełnienia 57
4.5.1. SPIR-V 57
4.5.2. Opcje programów szaderów 61
5. Działania na wektorach i macierzach 63
5.1. Działania na macierzach 63
5.2. Punkty i wektory swobodne 65
5.3. Współrzędne kartezjańskie, jednorodne i barycentryczne 66
5.4. Przekształcenia afiniczne 68
5.5. Prostopadłość 71
5.6. Orientacja 73
5.7. Procedury 75
6. Rzutowanie 87
6.1. Klatka, aspekt ekranu i kostka standardowa 87
6.2. Rzutowanie perspektywiczne 89
6.3. Rzutowanie równoległe 92
6.4. Przekształcenia rzutowanych wierzchołków 94
6.5. Aksonometria 95
6.6. Rzutowanie dla grafiki dwuwymiarowej 96
7. Pierwsza aplikacja 97
7.1. Szadery 97
7.2. Przygotowanie programu szaderów 99
7.3. Przygotowanie obiektów w programie 102
7.4. Przekształcenia współrzędnych 102
7.5. Tworzenie obiektu tablicy wierzchołków 105
7.6. Rysowanie 109
7.7. Interakcja 111
7.8. Sprzątanie 112
7.9. Uzupełnienia 114
7.10. Ćwiczenia 116
8. Aplikacja pierwsza A 119
8.1. Składanie obrotów 119
8.2. Obracanie obserwatora wokół obiektu 120
8.3. Animacja 126
8.4. Ćwiczenia 131
9. Podstawy języka GLSL 133
9.1. Symbole leksykalne 133
9.2. Preprocesor 134
9.3. Podstawowe typy zmiennych 135
9.3.1. Typy wektorowe i macierzowe 136
9.3.2. Struktury 137
9.3.3. Tablice 137
9.4. Deklaracje zmiennych 138
9.5. Wyrażenia 139
9.6. Instrukcje 141
9.7. Podprogramy 142
9.8. Zmienne wskazujące podprogramy 143
9.9. Równoległość i jednolitość obliczeń 145
9.10. Bloki zmiennych interfejsu 145
9.11. Komunikacja między szaderami 146
9.11.1. Zmienne wbudowane szadera wierzchołków 147
9.11.2. Zmienne wbudowane szadera sterowania rozdrabnianiem 147
9.11.3. Zmienne wbudowane szadera rozdrabniania 147
9.11.4. Zmienne wbudowane szadera geometrii 148
9.11.5. Zmienne wbudowane szadera fragmentów 149
9.12. Kwalifikatory układu 150
9.13. Funkcje i procedury wbudowane 153
9.13.1. Funkcje elementarne 153
9.13.2. Funkcje związane z potęgowaniem 154
9.13.3. Funkcje geometryczne 155
9.13.4. Funkcje związane z kątami 156
9.13.5. Funkcje macierzowe 157
9.13.6. Funkcje relacji wektorowych 157
9.13.7. Funkcje i procedury dla liczb całkowitych 158
9.13.8. Funkcje i procedury dla tekstur i obrazów 159
9.13.9. Liczniki niepodzielne i niepodzielne operacje na pamięci 162
9.14. Szadery obliczeniowe 162
9.14.1. Zmienne wbudowane szadera obliczeniowego 163
10. Aplikacja pierwsza B 165
10.1. Szadery—pierwszy program 165
10.2. Model oświetlenia i drugi program szaderów 166
10.3. Cztery procedury pomocnicze 174
10.4. Aplikacja pierwsza B 176
10.5. Procedury obsługi świateł 182
10.6. Uzupełnienia 185
10.6.1. Cieniowanie Gourauda i Phonga 185
10.6.2. Mgła 185
10.6.3. *Obcinanie i odrzucanie 186
10.7. Ćwiczenia 188
11. Aplikacja pierwsza C 189
11.1. Reprezentacja fontów 189
11.2. Szadery 190
11.3. Fonty i procedury wyświetlania tekstu 194
11.4. Aplikacja pierwsza C 201
11.5. Ćwiczenia 204
11.6. *Uzupełnienia 205
12. Aplikacja pierwsza D 209
12.1. Szadery i programy szaderów 209
12.2. Aplikacja pierwsza D 218
12.3. Ćwiczenia 223
12.4. *Uzupełnienia 225
13. Aplikacja pierwsza E 227
13.1. Czytanie pliku SMF 227
13.2. Zmiany w aplikacji 239
13.3. Ćwiczenia 244