: Heiko Ihde
: Shader mit GLSL: Eine Einführung in die OpenGL Shading Language
: Diplomica Verlag GmbH
: 9783836629270
: 1
: CHF 31.20
:
: Informatik
: German
: 160
: kein Kopierschutz/DRM
: PC/MAC/eReader/Tablet
: PDF
Seit es Computergrafik gibt, wird kontinuierlich versucht die Qualität der Darstellung bis hin zum absoluten Realismus zu steigern. Die Shader sind dabei ein wichtiges Hilfsmittel um realistischer scheinende Materialien in der Computergrafik zu erzeugen. Shader bieten dem Grafik-Programmierer eine vorher unerreichte Flexibilität. Die vorher starren Vorgaben der Grafikprozessoren können nun individuell an die eigenen Bedürfnisse angepasst werden.

Dieses Buch bietet einen schnellen Einstieg in die Highlevel Shading Sprachen. Anhand von Beispiel-Shadern in der OpenGL Shading Language (GLSL) werden die Grundsätze erklärt. Verschiedene Ansätze werden erläutert und mögliche Fehlerquellen werden aufgedeckt. Die Einbindung der entwickelten Shader in eigene OpenGL-Anwendungen wird geklärt.Zusätzlich wird eine Einführung in Textur-Erstellung und 3D-Modeling gegeben.
Kapitel 4.3.6, Die Shader in GLSLDemo einbinden: Wer ohne den aufwändigen Weg über ein eigenes OpenGL Programm Shader schreiben und ausprobieren möchte, der kann diese auch in ein bestehendes Programm wie z.B. GLSLDemo von der Seite www.3dshaders.com einbinden. Nach der Installation von GLSLDemo sollten im Ordner des Programms die Ordner bin, shaders und textures vorhanden sein. Starten wir das Programm mit glsldemo.exe im Ordner bin müsste das Programm wie in der Abbildung aussehen. In der Seitenleiste sind bereits einige Shaderbeispiele vorhanden. Im Menü View/Uniform adjuster (oder über Tastatureingabe Alt+U) können wir ein Bedienfeld öffnen. Darin werden Schieberegler für die im Shader definierten uniform Variablen angezeigt. Mit diesen Reglern können wir die Werte der Variablen ändern. Hat die Änderung des Wertes ein visuelles Feedback zur Folge, können wir es im 3Dbereich der Anwendung sofort sehen.
1 Einleitung7
1.1 Begriffliche Voraussetzungen7
1.1.1 Shader8
1.1.2 Shader Objekt9
1.1.3 Shader Programm9
1.1.4 Fixed Functionality9
1.1.5 Vertex10
1.1.6 Edge11
1.1.7 Face11
1.1.8 Fragment11
1.1.9 Vertex Shader12
1.1.10 Geometry Shader12
1.1.11 Fragment Shader12
1.1.12 Object-Space13
1.1.13 Eye-Space14
1.1.14 Diffusemap / Colormap15
1.1.15 Alphamap / Transparencymap15
1.1.16 Bumpmap15
1.1.17 Heightmap / Displacementmap15
1.1.18 Normalmap16
1.1.19 Specularitymap / Reflectivitymap16
1.1.20 Luminositymap17
1.1.21 Environmentmap / Reflectionmap17
2 Gründe für Shader mit GLSL18
2.1 Über Shader18
2.2 Die Shadertypen18
2.3 Die High Level Shading Languages19
2.3.1 HLSL20
2.3.2 Cg21
2.3.3 GLSL22
3 Shader in OpenGL24
3.1 Die OpenGL Shading Language24
3.1.1 Unterschiede zwischen Vertex und Fragment Shader25
3.1.2 Unterschiede zu C/++25
3.1.3 Typecasting und Konstruktoren26
3.1.4 Neue Datentypen26
3.1.5 Zugriff auf Vektor-Komponenten 27
3.1.6 Die attribute, uniform und varying Qualifiers27
3.2 Die OpenGL Shading Language API28
4 Vier Schritte zum eigenen Shader31
4.1 Die Objekte vorbereiten31
4.1.1 Vorbereiten in Blender31
4.1.2 Vorbereiten in OpenGL36
4.2 Die Texturen vorbereiten39
4.2.1 Diffusemap41
4.2.2 Alphamap47
4.2.3 Bumpmap50
4.2.4 Normalmap52
4.2.5 Huemap54
4.2.6 Lightnessmap / Brightnessmap59
4.2.7 Environmentmap60
4.2.8 Kanten entfernen66
4.2.9 CrazyBump67
4.3 Die Shader einbinden69
4.3.1 Shader erstellen und kompilieren70
4.3.2 Shader verwenden73
4.3.3 Werte übergeben74
4.3.4 Texturen übergeben75
4.3.5 Das Resultat77
4.3.6 Die Shader in GLSLDemo einbinden78
4.4 Die Shader programmieren81
4.4.1 Farbe82
4.4.2 Fragmente verwerfen84
4.4.3 Direktionales Licht85
4.4.4 Punktlicht90
4.4.5 Drei Punktlichter92
4.4.6 Drei Punktlichter (optimiert)94
4.4.7 Glanz97
4.4.8 Prozedurale Textur 2D100
4.4.9 Prozedurale Textur 3D104
4.4.10 Selektiv Fragmente verwerfen106
4.4.11 Prozedurale Textur 3D (optimiert)109
4.4.12 Einbinden von Textur-Maps114
4.4.13 Nebel116
4.4.14 Simulation der Fixed Functionality mit ShaderGen119
4.4.15 Mehrfarb-Lack120
4.4.16 Hue-Shifter122
4.4.17 Displacement127
4.4.18 Displacement Wasser130
5 Fazit und Aussicht134
6 Anhang 1: Literaturverzeichnis135
7 Anhang 2: Verwendete Software137
7.1 Programmierung137
7.2 Grafik137
7.3 Sonstiges138
8 Anhang 4: GLSL Kurz-Referenz139
8.1 Data types139
8.2 Data type qualifiers140
8.2.1 Global variable declarations140
8.2.2 Function parameters141
8.3 Vector components141
8.4 Preprocessor142
8.5 Vertex shader variables142
8.5.1 Special Output Variables142
8.5.2 Special input variables143
8.5.3 Varying outputs143
8.5.4 Attribute inputs143
8.6 Fragment shader variables143
8.6.1 Special Output Variables143
8.6.2 Special input variables144
8.6.3 Varying inputs144
8.7 Built-in constants144
8.8 Built-in uniforms144
8.9 Built-in functions147
8.9.1 Angle and Trigonometry Functions147
8.9.2 Exponential Functions148
8.9.3 Common Functions148
8.9.4 Geometric Functions149
8.9.5 Matrix Functions150
8.9.6 Vector Relational Functions150
8.9.7 Texture Lookup Functions151
8.9.8 Texture Lookup Functions with LOD156
8.9.9 Fragment Processing Functions158
8.9.10 Noise Functions158
9 Stichwortverzeichnis159