
Shader mit GLSL: Eine Einführung in die OpenGL Shading Language
Eine Einführung in die OpenGL Shading Language
Heiko Ihde(Author)
Diplomica Verlag
1st Edition
Published in July 2009
160 pages
978-3-8366-2927-0 (ISBN)
System requirements
for PDF without DRM
E-Book Single Licence
You are acquiring a single user licence for this eBook, which you might not transfer. [L]
Available for download
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
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.
More details
Language
German
Place of publication
Hamburg
Germany
Illustrations
89 Abb.
PDF-Format
File size
18,44 MB
ISBN-13
978-3-8366-2927-0 (9783836629270)
Schweitzer Classification
Other editions
Additional editions

Heiko Ihde
Shader mit GLSL: Eine Einführung in die OpenGL Shading Language
Eine Einfuehrung in die OpenGL Shading Language
Book
07/2009
1st Edition
Diplomica Verlag
€48.00
Shipment within 7-9 days
Person
Heiko Ihde, Diplom-Informatiker FH, Grafiker für Computerspiele, Medieninformatik-Studium an der TFH-Berlin. Abschluss 2009 als Diplom-Informatiker FH. Derzeit tätig als Medieninformatiker im Bereich Grafik.
Content
1 - 1 Einleitung [Seite 7]
1.1 - 1.1 Begriffliche Voraussetzungen [Seite 7]
1.1.1 - 1.1.1 Shader [Seite 8]
1.1.2 - 1.1.2 Shader Objekt [Seite 9]
1.1.3 - 1.1.3 Shader Programm [Seite 9]
1.1.4 - 1.1.4 Fixed Functionality [Seite 9]
1.1.5 - 1.1.5 Vertex [Seite 10]
1.1.6 - 1.1.6 Edge [Seite 11]
1.1.7 - 1.1.7 Face [Seite 11]
1.1.8 - 1.1.8 Fragment [Seite 11]
1.1.9 - 1.1.9 Vertex Shader [Seite 12]
1.1.10 - 1.1.10 Geometry Shader [Seite 12]
1.1.11 - 1.1.11 Fragment Shader [Seite 12]
1.1.12 - 1.1.12 Object-Space [Seite 13]
1.1.13 - 1.1.13 Eye-Space [Seite 14]
1.1.14 - 1.1.14 Diffusemap / Colormap [Seite 15]
1.1.15 - 1.1.15 Alphamap / Transparencymap [Seite 15]
1.1.16 - 1.1.16 Bumpmap [Seite 15]
1.1.17 - 1.1.17 Heightmap / Displacementmap [Seite 15]
1.1.18 - 1.1.18 Normalmap [Seite 16]
1.1.19 - 1.1.19 Specularitymap / Reflectivitymap [Seite 16]
1.1.20 - 1.1.20 Luminositymap [Seite 17]
1.1.21 - 1.1.21 Environmentmap / Reflectionmap [Seite 17]
2 - 2 Gründe für Shader mit GLSL [Seite 18]
2.1 - 2.1 Über Shader [Seite 18]
2.2 - 2.2 Die Shadertypen [Seite 18]
2.3 - 2.3 Die High Level Shading Languages [Seite 19]
2.3.1 - 2.3.1 HLSL [Seite 20]
2.3.2 - 2.3.2 Cg [Seite 21]
2.3.3 - 2.3.3 GLSL [Seite 22]
3 - 3 Shader in OpenGL [Seite 24]
3.1 - 3.1 Die OpenGL Shading Language [Seite 24]
3.1.1 - 3.1.1 Unterschiede zwischen Vertex und Fragment Shader [Seite 25]
3.1.2 - 3.1.2 Unterschiede zu C/++ [Seite 25]
3.1.3 - 3.1.3 Typecasting und Konstruktoren [Seite 26]
3.1.4 - 3.1.4 Neue Datentypen [Seite 26]
3.1.5 - 3.1.5 Zugriff auf Vektor-Komponenten [Seite 27]
3.1.6 - 3.1.6 Die attribute, uniform und varying Qualifiers [Seite 27]
3.2 - 3.2 Die OpenGL Shading Language API [Seite 28]
4 - 4 Vier Schritte zum eigenen Shader [Seite 31]
4.1 - 4.1 Die Objekte vorbereiten [Seite 31]
4.1.1 - 4.1.1 Vorbereiten in Blender [Seite 31]
4.1.2 - 4.1.2 Vorbereiten in OpenGL [Seite 36]
4.2 - 4.2 Die Texturen vorbereiten [Seite 39]
4.2.1 - 4.2.1 Diffusemap [Seite 41]
4.2.2 - 4.2.2 Alphamap [Seite 47]
4.2.3 - 4.2.3 Bumpmap [Seite 50]
4.2.4 - 4.2.4 Normalmap [Seite 52]
4.2.5 - 4.2.5 Huemap [Seite 54]
4.2.6 - 4.2.6 Lightnessmap / Brightnessmap [Seite 59]
4.2.7 - 4.2.7 Environmentmap [Seite 60]
4.2.8 - 4.2.8 Kanten entfernen [Seite 66]
4.2.9 - 4.2.9 CrazyBump [Seite 67]
4.3 - 4.3 Die Shader einbinden [Seite 69]
4.3.1 - 4.3.1 Shader erstellen und kompilieren [Seite 70]
4.3.2 - 4.3.2 Shader verwenden [Seite 73]
4.3.3 - 4.3.3 Werte übergeben [Seite 74]
4.3.4 - 4.3.4 Texturen übergeben [Seite 75]
4.3.5 - 4.3.5 Das Resultat [Seite 77]
4.3.6 - 4.3.6 Die Shader in GLSLDemo einbinden [Seite 78]
4.4 - 4.4 Die Shader programmieren [Seite 81]
4.4.1 - 4.4.1 Farbe [Seite 82]
4.4.2 - 4.4.2 Fragmente verwerfen [Seite 84]
4.4.3 - 4.4.3 Direktionales Licht [Seite 85]
4.4.4 - 4.4.4 Punktlicht [Seite 90]
4.4.5 - 4.4.5 Drei Punktlichter [Seite 92]
4.4.6 - 4.4.6 Drei Punktlichter (optimiert) [Seite 94]
4.4.7 - 4.4.7 Glanz [Seite 97]
4.4.8 - 4.4.8 Prozedurale Textur 2D [Seite 100]
4.4.9 - 4.4.9 Prozedurale Textur 3D [Seite 104]
4.4.10 - 4.4.10 Selektiv Fragmente verwerfen [Seite 106]
4.4.11 - 4.4.11 Prozedurale Textur 3D (optimiert) [Seite 109]
4.4.12 - 4.4.12 Einbinden von Textur-Maps [Seite 114]
4.4.13 - 4.4.13 Nebel [Seite 116]
4.4.14 - 4.4.14 Simulation der Fixed Functionality mit ShaderGen [Seite 119]
4.4.15 - 4.4.15 Mehrfarb-Lack [Seite 120]
4.4.16 - 4.4.16 Hue-Shifter [Seite 122]
4.4.17 - 4.4.17 Displacement [Seite 127]
4.4.18 - 4.4.18 Displacement Wasser [Seite 130]
5 - 5 Fazit und Aussicht [Seite 134]
6 - 6 Anhang 1: Literaturverzeichnis [Seite 135]
7 - 7 Anhang 2: Verwendete Software [Seite 137]
7.1 - 7.1 Programmierung [Seite 137]
7.2 - 7.2 Grafik [Seite 137]
7.3 - 7.3 Sonstiges [Seite 138]
8 - 8 Anhang 4: GLSL Kurz-Referenz [Seite 139]
8.1 - 8.1 Data types [Seite 139]
8.2 - 8.2 Data type qualifiers [Seite 140]
8.2.1 - 8.2.1 Global variable declarations [Seite 140]
8.2.2 - 8.2.2 Function parameters [Seite 141]
8.3 - 8.3 Vector components [Seite 141]
8.4 - 8.4 Preprocessor [Seite 142]
8.5 - 8.5 Vertex shader variables [Seite 142]
8.5.1 - 8.5.1 Special Output Variables [Seite 142]
8.5.2 - 8.5.2 Special input variables [Seite 143]
8.5.3 - 8.5.3 Varying outputs [Seite 143]
8.5.4 - 8.5.4 Attribute inputs [Seite 143]
8.6 - 8.6 Fragment shader variables [Seite 143]
8.6.1 - 8.6.1 Special Output Variables [Seite 143]
8.6.2 - 8.6.2 Special input variables [Seite 144]
8.6.3 - 8.6.3 Varying inputs [Seite 144]
8.7 - 8.7 Built-in constants [Seite 144]
8.8 - 8.8 Built-in uniforms [Seite 144]
8.9 - 8.9 Built-in functions [Seite 147]
8.9.1 - 8.9.1 Angle and Trigonometry Functions [Seite 147]
8.9.2 - 8.9.2 Exponential Functions [Seite 148]
8.9.3 - 8.9.3 Common Functions [Seite 148]
8.9.4 - 8.9.4 Geometric Functions [Seite 149]
8.9.5 - 8.9.5 Matrix Functions [Seite 150]
8.9.6 - 8.9.6 Vector Relational Functions [Seite 150]
8.9.7 - 8.9.7 Texture Lookup Functions [Seite 151]
8.9.8 - 8.9.8 Texture Lookup Functions with LOD [Seite 156]
8.9.9 - 8.9.9 Fragment Processing Functions [Seite 158]
8.9.10 - 8.9.10 Noise Functions [Seite 158]
9 - 9 Stichwortverzeichnis [Seite 159]
1.1 - 1.1 Begriffliche Voraussetzungen [Seite 7]
1.1.1 - 1.1.1 Shader [Seite 8]
1.1.2 - 1.1.2 Shader Objekt [Seite 9]
1.1.3 - 1.1.3 Shader Programm [Seite 9]
1.1.4 - 1.1.4 Fixed Functionality [Seite 9]
1.1.5 - 1.1.5 Vertex [Seite 10]
1.1.6 - 1.1.6 Edge [Seite 11]
1.1.7 - 1.1.7 Face [Seite 11]
1.1.8 - 1.1.8 Fragment [Seite 11]
1.1.9 - 1.1.9 Vertex Shader [Seite 12]
1.1.10 - 1.1.10 Geometry Shader [Seite 12]
1.1.11 - 1.1.11 Fragment Shader [Seite 12]
1.1.12 - 1.1.12 Object-Space [Seite 13]
1.1.13 - 1.1.13 Eye-Space [Seite 14]
1.1.14 - 1.1.14 Diffusemap / Colormap [Seite 15]
1.1.15 - 1.1.15 Alphamap / Transparencymap [Seite 15]
1.1.16 - 1.1.16 Bumpmap [Seite 15]
1.1.17 - 1.1.17 Heightmap / Displacementmap [Seite 15]
1.1.18 - 1.1.18 Normalmap [Seite 16]
1.1.19 - 1.1.19 Specularitymap / Reflectivitymap [Seite 16]
1.1.20 - 1.1.20 Luminositymap [Seite 17]
1.1.21 - 1.1.21 Environmentmap / Reflectionmap [Seite 17]
2 - 2 Gründe für Shader mit GLSL [Seite 18]
2.1 - 2.1 Über Shader [Seite 18]
2.2 - 2.2 Die Shadertypen [Seite 18]
2.3 - 2.3 Die High Level Shading Languages [Seite 19]
2.3.1 - 2.3.1 HLSL [Seite 20]
2.3.2 - 2.3.2 Cg [Seite 21]
2.3.3 - 2.3.3 GLSL [Seite 22]
3 - 3 Shader in OpenGL [Seite 24]
3.1 - 3.1 Die OpenGL Shading Language [Seite 24]
3.1.1 - 3.1.1 Unterschiede zwischen Vertex und Fragment Shader [Seite 25]
3.1.2 - 3.1.2 Unterschiede zu C/++ [Seite 25]
3.1.3 - 3.1.3 Typecasting und Konstruktoren [Seite 26]
3.1.4 - 3.1.4 Neue Datentypen [Seite 26]
3.1.5 - 3.1.5 Zugriff auf Vektor-Komponenten [Seite 27]
3.1.6 - 3.1.6 Die attribute, uniform und varying Qualifiers [Seite 27]
3.2 - 3.2 Die OpenGL Shading Language API [Seite 28]
4 - 4 Vier Schritte zum eigenen Shader [Seite 31]
4.1 - 4.1 Die Objekte vorbereiten [Seite 31]
4.1.1 - 4.1.1 Vorbereiten in Blender [Seite 31]
4.1.2 - 4.1.2 Vorbereiten in OpenGL [Seite 36]
4.2 - 4.2 Die Texturen vorbereiten [Seite 39]
4.2.1 - 4.2.1 Diffusemap [Seite 41]
4.2.2 - 4.2.2 Alphamap [Seite 47]
4.2.3 - 4.2.3 Bumpmap [Seite 50]
4.2.4 - 4.2.4 Normalmap [Seite 52]
4.2.5 - 4.2.5 Huemap [Seite 54]
4.2.6 - 4.2.6 Lightnessmap / Brightnessmap [Seite 59]
4.2.7 - 4.2.7 Environmentmap [Seite 60]
4.2.8 - 4.2.8 Kanten entfernen [Seite 66]
4.2.9 - 4.2.9 CrazyBump [Seite 67]
4.3 - 4.3 Die Shader einbinden [Seite 69]
4.3.1 - 4.3.1 Shader erstellen und kompilieren [Seite 70]
4.3.2 - 4.3.2 Shader verwenden [Seite 73]
4.3.3 - 4.3.3 Werte übergeben [Seite 74]
4.3.4 - 4.3.4 Texturen übergeben [Seite 75]
4.3.5 - 4.3.5 Das Resultat [Seite 77]
4.3.6 - 4.3.6 Die Shader in GLSLDemo einbinden [Seite 78]
4.4 - 4.4 Die Shader programmieren [Seite 81]
4.4.1 - 4.4.1 Farbe [Seite 82]
4.4.2 - 4.4.2 Fragmente verwerfen [Seite 84]
4.4.3 - 4.4.3 Direktionales Licht [Seite 85]
4.4.4 - 4.4.4 Punktlicht [Seite 90]
4.4.5 - 4.4.5 Drei Punktlichter [Seite 92]
4.4.6 - 4.4.6 Drei Punktlichter (optimiert) [Seite 94]
4.4.7 - 4.4.7 Glanz [Seite 97]
4.4.8 - 4.4.8 Prozedurale Textur 2D [Seite 100]
4.4.9 - 4.4.9 Prozedurale Textur 3D [Seite 104]
4.4.10 - 4.4.10 Selektiv Fragmente verwerfen [Seite 106]
4.4.11 - 4.4.11 Prozedurale Textur 3D (optimiert) [Seite 109]
4.4.12 - 4.4.12 Einbinden von Textur-Maps [Seite 114]
4.4.13 - 4.4.13 Nebel [Seite 116]
4.4.14 - 4.4.14 Simulation der Fixed Functionality mit ShaderGen [Seite 119]
4.4.15 - 4.4.15 Mehrfarb-Lack [Seite 120]
4.4.16 - 4.4.16 Hue-Shifter [Seite 122]
4.4.17 - 4.4.17 Displacement [Seite 127]
4.4.18 - 4.4.18 Displacement Wasser [Seite 130]
5 - 5 Fazit und Aussicht [Seite 134]
6 - 6 Anhang 1: Literaturverzeichnis [Seite 135]
7 - 7 Anhang 2: Verwendete Software [Seite 137]
7.1 - 7.1 Programmierung [Seite 137]
7.2 - 7.2 Grafik [Seite 137]
7.3 - 7.3 Sonstiges [Seite 138]
8 - 8 Anhang 4: GLSL Kurz-Referenz [Seite 139]
8.1 - 8.1 Data types [Seite 139]
8.2 - 8.2 Data type qualifiers [Seite 140]
8.2.1 - 8.2.1 Global variable declarations [Seite 140]
8.2.2 - 8.2.2 Function parameters [Seite 141]
8.3 - 8.3 Vector components [Seite 141]
8.4 - 8.4 Preprocessor [Seite 142]
8.5 - 8.5 Vertex shader variables [Seite 142]
8.5.1 - 8.5.1 Special Output Variables [Seite 142]
8.5.2 - 8.5.2 Special input variables [Seite 143]
8.5.3 - 8.5.3 Varying outputs [Seite 143]
8.5.4 - 8.5.4 Attribute inputs [Seite 143]
8.6 - 8.6 Fragment shader variables [Seite 143]
8.6.1 - 8.6.1 Special Output Variables [Seite 143]
8.6.2 - 8.6.2 Special input variables [Seite 144]
8.6.3 - 8.6.3 Varying inputs [Seite 144]
8.7 - 8.7 Built-in constants [Seite 144]
8.8 - 8.8 Built-in uniforms [Seite 144]
8.9 - 8.9 Built-in functions [Seite 147]
8.9.1 - 8.9.1 Angle and Trigonometry Functions [Seite 147]
8.9.2 - 8.9.2 Exponential Functions [Seite 148]
8.9.3 - 8.9.3 Common Functions [Seite 148]
8.9.4 - 8.9.4 Geometric Functions [Seite 149]
8.9.5 - 8.9.5 Matrix Functions [Seite 150]
8.9.6 - 8.9.6 Vector Relational Functions [Seite 150]
8.9.7 - 8.9.7 Texture Lookup Functions [Seite 151]
8.9.8 - 8.9.8 Texture Lookup Functions with LOD [Seite 156]
8.9.9 - 8.9.9 Fragment Processing Functions [Seite 158]
8.9.10 - 8.9.10 Noise Functions [Seite 158]
9 - 9 Stichwortverzeichnis [Seite 159]
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.
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.
System requirements
File format: PDF
Copy protection: without DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use the free software Adobe Reader, Adobe Digital Editions, or any other PDF viewer of your choice (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or another reading app for eBooks, e.g., PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook does not use copy protection or Digital Rights Management.
For more information, see our eBook Help page.