1 Einleitung | 7 |
1.1 Begriffliche Voraussetzungen | 7 |
1.1.1 Shader | 8 |
1.1.2 Shader Objekt | 9 |
1.1.3 Shader Programm | 9 |
1.1.4 Fixed Functionality | 9 |
1.1.5 Vertex | 10 |
1.1.6 Edge | 11 |
1.1.7 Face | 11 |
1.1.8 Fragment | 11 |
1.1.9 Vertex Shader | 12 |
1.1.10 Geometry Shader | 12 |
1.1.11 Fragment Shader | 12 |
1.1.12 Object-Space | 13 |
1.1.13 Eye-Space | 14 |
1.1.14 Diffusemap / Colormap | 15 |
1.1.15 Alphamap / Transparencymap | 15 |
1.1.16 Bumpmap | 15 |
1.1.17 Heightmap / Displacementmap | 15 |
1.1.18 Normalmap | 16 |
1.1.19 Specularitymap / Reflectivitymap | 16 |
1.1.20 Luminositymap | 17 |
1.1.21 Environmentmap / Reflectionmap | 17 |
2 Gründe für Shader mit GLSL | 18 |
2.1 Über Shader | 18 |
2.2 Die Shadertypen | 18 |
2.3 Die High Level Shading Languages | 19 |
2.3.1 HLSL | 20 |
2.3.2 Cg | 21 |
2.3.3 GLSL | 22 |
3 Shader in OpenGL | 24 |
3.1 Die OpenGL Shading Language | 24 |
3.1.1 Unterschiede zwischen Vertex und Fragment Shader | 25 |
3.1.2 Unterschiede zu C/++ | 25 |
3.1.3 Typecasting und Konstruktoren | 26 |
3.1.4 Neue Datentypen | 26 |
3.1.5 Zugriff auf Vektor-Komponenten | 27 |
3.1.6 Die attribute, uniform und varying Qualifiers | 27 |
3.2 Die OpenGL Shading Language API | 28 |
4 Vier Schritte zum eigenen Shader | 31 |
4.1 Die Objekte vorbereiten | 31 |
4.1.1 Vorbereiten in Blender | 31 |
4.1.2 Vorbereiten in OpenGL | 36 |
4.2 Die Texturen vorbereiten | 39 |
4.2.1 Diffusemap | 41 |
4.2.2 Alphamap | 47 |
4.2.3 Bumpmap | 50 |
4.2.4 Normalmap | 52 |
4.2.5 Huemap | 54 |
4.2.6 Lightnessmap / Brightnessmap | 59 |
4.2.7 Environmentmap | 60 |
4.2.8 Kanten entfernen | 66 |
4.2.9 CrazyBump | 67 |
4.3 Die Shader einbinden | 69 |
4.3.1 Shader erstellen und kompilieren | 70 |
4.3.2 Shader verwenden | 73 |
4.3.3 Werte übergeben | 74 |
4.3.4 Texturen übergeben | 75 |
4.3.5 Das Resultat | 77 |
4.3.6 Die Shader in GLSLDemo einbinden | 78 |
4.4 Die Shader programmieren | 81 |
4.4.1 Farbe | 82 |
4.4.2 Fragmente verwerfen | 84 |
4.4.3 Direktionales Licht | 85 |
4.4.4 Punktlicht | 90 |
4.4.5 Drei Punktlichter | 92 |
4.4.6 Drei Punktlichter (optimiert) | 94 |
4.4.7 Glanz | 97 |
4.4.8 Prozedurale Textur 2D | 100 |
4.4.9 Prozedurale Textur 3D | 104 |
4.4.10 Selektiv Fragmente verwerfen | 106 |
4.4.11 Prozedurale Textur 3D (optimiert) | 109 |
4.4.12 Einbinden von Textur-Maps | 114 |
4.4.13 Nebel | 116 |
4.4.14 Simulation der Fixed Functionality mit ShaderGen | 119 |
4.4.15 Mehrfarb-Lack | 120 |
4.4.16 Hue-Shifter | 122 |
4.4.17 Displacement | 127 |
4.4.18 Displacement Wasser | 130 |
5 Fazit und Aussicht | 134 |
6 Anhang 1: Literaturverzeichnis | 135 |
7 Anhang 2: Verwendete Software | 137 |
7.1 Programmierung | 137 |
7.2 Grafik | 137 |
7.3 Sonstiges | 138 |
8 Anhang 4: GLSL Kurz-Referenz | 139 |
8.1 Data types | 139 |
8.2 Data type qualifiers | 140 |
8.2.1 Global variable declarations | 140 |
8.2.2 Function parameters | 141 |
8.3 Vector components | 141 |
8.4 Preprocessor | 142 |
8.5 Vertex shader variables | 142 |
8.5.1 Special Output Variables | 142 |
8.5.2 Special input variables | 143 |
8.5.3 Varying outputs | 143 |
8.5.4 Attribute inputs | 143 |
8.6 Fragment shader variables | 143 |
8.6.1 Special Output Variables | 143 |
8.6.2 Special input variables | 144 |
8.6.3 Varying inputs | 144 |
8.7 Built-in constants | 144 |
8.8 Built-in uniforms | 144 |
8.9 Built-in functions | 147 |
8.9.1 Angle and Trigonometry Functions | 147 |
8.9.2 Exponential Functions | 148 |
8.9.3 Common Functions | 148 |
8.9.4 Geometric Functions | 149 |
8.9.5 Matrix Functions | 150 |
8.9.6 Vector Relational Functions | 150 |
8.9.7 Texture Lookup Functions | 151 |
8.9.8 Texture Lookup Functions with LOD | 156 |
8.9.9 Fragment Processing Functions | 158 |
8.9.10 Noise Functions | 158 |
9 Stichwortverzeichnis | 159 |