
Computergrafik und OpenGL
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
Anschließend wird die Theorie jeweils mit der unter Windows verfügbaren Grafik-Bibliothek OpenGL in Beispielen, Übungen und zugeordneten Projekten praktisch umgesetzt.
Dafür bieten die Autoren unter der Software-Entwicklungsumgebung Delphi einen Prototyp an. Die Beispiele, Übungen und Projekte sind so allgemein angelegt, dass sie an spezielle Problemstellungen angepasst werden können.
Die zu diesem Buch entwickelten Beispielprojekte und Lösungen zu den Übungsaufgaben sind über eine Website verfügbar und bilden so die Basis für individuelle Grafikentwicklungen. Das Buch ist auch für Einsteiger geeignet und baut auf den Vorkenntnissen in Mathematik und Informatik der 10. Klasse auf.
Die Autoren
Prof. em. Dr. habil. Orlamünder lehrte Computergrafik und Informatik an der TU Dresden.
Dr. Mascolus ist wissenschaftlicher Mitarbeiter der TU Dresden, betreut Übungen und Praktika zur Computergrafik und hält eigene Vorlesungen.
More details
Other editions
Additional editions

Content
2 - Inhaltsverzeichnis [Seite 8]
3 - 1 Einführung [Seite 12]
4 - 2 Grafische Bibliothek OpenGL [Seite 14]
4.1 - 2.1 Konzepte und Entwurfsziele [Seite 14]
4.2 - 2.2 Modell und Architektur [Seite 16]
4.3 - 2.3 Konventionen, Konstanten, Typen, Routinen [Seite 19]
4.4 - 2.4 OpenGL und Windows [Seite 20]
4.5 - 2.5 Spezielle Inhalte der Unit GLToolsDelphi [Seite 32]
4.6 - 2.6 Erfragefunktionen [Seite 34]
4.7 - 2.7 Übungen [Seite 36]
5 - 3 Rastergrafik-Algorithmen [Seite 37]
5.1 - 3.1 Rastern von Punkten, Linien, Kurven und Polygonen [Seite 37]
5.1.1 - 3.1.1 Rastern von Punkten [Seite 38]
5.1.2 - 3.1.2 Rastern von Linien und Kurven [Seite 39]
5.1.3 - 3.1.3 Rastern von Polygonen [Seite 44]
5.1.4 - 3.1.4 OpenGL-Routinen [Seite 50]
5.2 - 3.2 Clipping [Seite 52]
5.2.1 - 3.2.1 Clippen von Linien an Rechtecken nach Cohen-Sutherland [Seite 53]
5.2.2 - 3.2.2 Clippen von Linien an Polygonen nach Liang-Barsky [Seite 55]
5.2.3 - 3.2.3 Clippen von Polygonen nach Sutherland-Hodgman [Seite 57]
5.2.4 - 3.2.4 Clippen an beliebigen Clipping-Bereichen [Seite 58]
5.2.5 - 3.2.5 Clippen an einem Sichtvolumen [Seite 62]
5.2.6 - 3.2.6 OpenGL-Routinen [Seite 62]
5.3 - 3.3 Farbmodelle, Halbtonverfahren [Seite 64]
5.3.1 - 3.3.1 Grundlagen [Seite 64]
5.3.2 - 3.3.2 CIE-Standard [Seite 68]
5.3.3 - 3.3.3 Farbmodelle [Seite 72]
5.3.4 - 3.3.4 Farbdarstellung, Farboperationen [Seite 74]
5.3.5 - 3.3.5 Halbtonverfahren [Seite 78]
5.3.6 - 3.3.6 OpenGL-Routinen [Seite 78]
5.4 - 3.4 Antialiasing [Seite 79]
5.4.1 - 3.4.1 Vorbemerkungen [Seite 79]
5.4.2 - 3.4.2 Antialiasing mit modifiziertem Grundalgorithmus [Seite 80]
5.4.3 - 3.4.3 Filtermethode [Seite 81]
5.4.4 - 3.4.4 Supersampling-Methode [Seite 82]
5.4.5 - 3.4.5 OpenGL-Routinen [Seite 84]
5.5 - 3.5 Übungen [Seite 86]
6 - 4 Modellierung [Seite 88]
6.1 - 4.1 Vorbemerkung [Seite 88]
6.2 - 4.2 Kurven [Seite 91]
6.2.1 - 4.2.1 Bézier-Kurven [Seite 97]
6.2.2 - 4.2.2 B-Spline-Kurven [Seite 102]
6.2.3 - 4.2.3 NURBS-Kurven [Seite 108]
6.2.4 - 4.2.4 Kubische Splines und allgemeine Kurven [Seite 112]
6.2.5 - 4.2.5 OpenGL-Routinen [Seite 118]
6.3 - 4.3 Flächen [Seite 122]
6.3.1 - 4.3.1 Bézier-Flächen [Seite 123]
6.3.2 - 4.3.2 B-Spline-Flächen [Seite 127]
6.3.3 - 4.3.3 NURBS-Flächen [Seite 128]
6.3.4 - 4.3.4 Allgemeine Flächen [Seite 129]
6.3.5 - 4.3.5 OpenGL-Routinen [Seite 142]
6.4 - 4.4 Körper [Seite 146]
6.4.1 - 4.4.1 Drahtmodell [Seite 147]
6.4.2 - 4.4.2 Oberflächenmodell, Boundary Representation [Seite 147]
6.4.3 - 4.4.3 Volumenmodell [Seite 158]
6.4.4 - 4.4.4 OpenGL-Routinen [Seite 162]
6.5 - 4.5 Spezielle Modelle [Seite 164]
6.5.1 - 4.5.1 Partikelsysteme [Seite 164]
6.5.2 - 4.5.2 Fraktale Systeme [Seite 168]
6.5.3 - 4.5.3 Soft Objects, Blobby Models [Seite 176]
6.6 - 4.6 Display-Listen, Vertex-Arrays und Clip Planes [Seite 177]
6.6.1 - 4.6.1 Display-Listen [Seite 177]
6.6.2 - 4.6.2 Vertex-Arrays [Seite 180]
6.6.3 - 4.6.3 Clip Planes [Seite 183]
6.6.4 - 4.6.4 OpenGL-Routinen [Seite 185]
6.7 - 4.7 Übungen [Seite 188]
7 - 5 Transformationen und Projektionen [Seite 189]
7.1 - 5.1 Einführung [Seite 189]
7.2 - 5.2 Modelltransformation [Seite 190]
7.3 - 5.3 Ansichtstransformation [Seite 199]
7.4 - 5.4 Perspektivische Transformation [Seite 203]
7.5 - 5.5 Orthogonale Transformation [Seite 207]
7.6 - 5.6 Clippen am kanonischen Sichtvolumen [Seite 209]
7.6.1 - 5.6.1 Clippen von Punkten [Seite 210]
7.6.2 - 5.6.3 Clippen von konvexen Polygonen [Seite 214]
7.7 - 5.7 Perspektivische Division [Seite 215]
7.8 - 5.8 Projektionen [Seite 215]
7.8.1 - 5.8.1 Perspektivprojektion [Seite 216]
7.8.2 - 5.8.2 Parallelprojektion [Seite 217]
7.9 - 5.9 Viewporttransformation [Seite 218]
7.10 - 5.10 Hierarchische Transformationen [Seite 219]
7.11 - 5.11 Nicht lineare Transformation [Seite 222]
7.12 - 5.12 OpenGL-Routinen [Seite 226]
7.13 - 5.13 Übungen [Seite 228]
8 - 6 Sichtbarkeit [Seite 230]
8.1 - 6.1 Vorbemerkungen, Klassifizierung [Seite 230]
8.2 - 6.2 z-Buffer-Algorithmus [Seite 232]
8.3 - 6.3 Historische Sichtbarkeitsverfahren (Kurzüberblick) [Seite 234]
8.4 - 6.4 Culling [Seite 236]
8.5 - 6.5 EXACT-Algorithmus [Seite 237]
8.6 - 6.6 OpenGL-Routinen [Seite 241]
8.7 - 6.7 Übungen [Seite 243]
9 - 7 Beleuchtung und Schattierung [Seite 244]
9.1 - 7.1 Einführung [Seite 244]
9.2 - 7.2 Beleuchtungsmodelle [Seite 244]
9.2.1 - 7.2.1 Lichtquellenmodelle [Seite 244]
9.2.2 - 7.2.2 Materialeigenschaften [Seite 245]
9.2.3 - 7.2.3 Elementare Beleuchtungsmodelle [Seite 246]
9.2.4 - 7.2.4 Lokale Beleuchtungsmodelle [Seite 250]
9.2.5 - 7.2.5 Globale Beleuchtungsmodelle [Seite 253]
9.2.6 - 7.3 Schattierungsmodelle [Seite 253]
9.2.7 - 7.3.1 Vorbemerkungen [Seite 253]
9.2.8 - 7.3.2 Inkrementelle Berechnung [Seite 254]
9.2.9 - 7.3.3 Ray Tracing (Überblick) [Seite 258]
9.2.10 - 7.3.4 Radiosity (Überblick) [Seite 260]
9.2.11 - 7.4 OpenGL-Routinen [Seite 264]
9.2.12 - 7.5 Übungen [Seite 267]
10 - 8 Texturen [Seite 268]
10.1 - 8.1 Einführung [Seite 268]
10.2 - 8.2 Prozedurale und diskrete 2D-Texturen [Seite 268]
10.3 - 8.3 Mapping-Verfahren [Seite 271]
10.4 - 8.4 Antialiasing bei Texturen [Seite 281]
10.5 - 8.5 Texturen und Beleuchtungsrechnung [Seite 283]
10.6 - 8.6 Simulation mit Texturen [Seite 284]
10.7 - 8.7 OpenGL-Routinen [Seite 285]
10.8 - 8.8 Übungen [Seite 290]
11 - 9 Transparenz [Seite 291]
11.1 - 9.1 Transparenzmodelle [Seite 291]
11.2 - 9.2 OpenGL-Routinen [Seite 296]
11.3 - 9.3 Übungen [Seite 297]
12 - 10 Interaktion [Seite 298]
12.1 - 10.1 Einführung [Seite 298]
12.2 - 10.2 Selektion und Rückkopplung [Seite 298]
12.3 - 10.3 OpenGL-Routinen [Seite 307]
12.4 - 10.4 Übungen [Seite 310]
13 - Literatur [Seite 311]
14 - Sachwortverzeichnis [Seite 314]
2.1 Konzepte und Entwurfsziele
OpenGL (Open Graphics Library) ist eine Softwareschnittstelle (Interface) zu grafikfähiger Hardware. Die Entwicklung von OpenGL wird durch ein Architecture Review Board (ARB) gesteuert und berwacht. Diesem Gremium gehüren die bedeutenden Hard- und Softwarehersteller Silicon Graphics, IBM, Hewlett Packard, SUN und Microsoft sowie weitere an. Standardliteratur zu OpenGL sind [KemFra00] und [WoNeDa00]. Zweck von OpenGL ist die Unterstützung der Darstellung von zwei- und dreidimensionalen grafischen Objekten mittels eines oder mehrerer Bildspeicher und anwendungsspezifisch weiterer spezieller Speicher.
Die grafischen Objekte werden entweder durch Raumpunkte (Vertices) beschrieben oder sie bestehen aus digitalisierten Bildern (Images, Bitmaps, Pixelmaps) in Form rechteckiger Pixelfelder. Das Interface enthält zu diesem Zweck einen umfangreichen Satz Prozeduren, Funktionen und Statusinformationen. Neben der Standardbibliothek OpenGL mit den wgl-Routinen gibt es die den Funktionsumfang bzw. den Nutzungskomfort erweiternden Bibliotheken GLU (Graphics Library Utility) und GLUT (Graphics Library Utility Tools). OpenGL basiert auf den anschließend näher beschriebenen Konzepten
Sprachunabhangigkeit,
Hardwareorientierung,
einbettendes Windows-System,
Client-Server-Architektur und Netzwerkfähigkeit,
Zustandsautomat.
Sprachunabhängigkeit heißt, OpenGL definiert seine grafische Funktionalität unabhängig von einer existierenden Programmiersprache. Das erfordert aber andererseits, dass für jede reale Sprache eine spezielle Einbindung erfolgen muss. So gibt es beispielsweise für Object Pascal oder Visual C++ zu diesem Zweck die speziellen Bibliotheken opengl32.dll und opengl32.lib. Hardwareorientierung ist im Wesentlichen einerseits dadurch charakterisiert, dass OpenGL hohe Anforderung bezüglich verschiedener Buffer (Speicherblöcke) stellt.
Im Grenzfall sind das bis zu vier Frame Buffer (Bildspeicher) für die Bilddarstellung, der Depth Buffer (Tiefenspeicher) für Sichtbarkeitsentscheidungen, der Stencil Buffer (Maskenspeicher) für die Maskierung von Speicherbereichen, der Accumulation Buffer (Akkumulationsspeicher)", 4> für den akkumulativen Bildaufbau und zusätzlicher Auxiliary Buffer (Hilfsspeicher) für Spezialaufgaben. Als Mindestanforderung mssen für jede OpenGL-Implementierung ein Bildspeicher sowie der Depth, Stencil und Accumulation Buffer im Echtfarbmodus vorhanden sein. Ein Großteil dieser Anforderungen wird heute durch Grafikkarten unterstützt bzw. übernommen. Zur Hardwareorientierung zählen andererseits auch die vielen so genannten Fragmentoperationen. Fragmente sind Pixeldaten, bestehend aus deren Adresse, Farbe, Tiefe und den zugeordneten Texturkoordinaten.
Diese durchlaufen im Modell des OpenGL-Automaten verschiedene Stationen, an denen statusgesteuert bestimmte einfache Operationen durchgeführt werden. Diese Abfolge von Tests und Berechnungen kann gut und effizient in Hardware umgesetzt werden. Einbettendes Windows-System ist das Synonym dafür, dass im Gegensatz zu anderen grafischen Schnittstellen für OpenGL der Ansatz verfolgt wird, unabhängig vom Betriebssystem bzw. einer umgebenden grafischen Benutzeroberfläche zu bleiben. Dies führt dazu, dass für jedes umgebende System zumindest eine Minimalanpassung in Form einer gesonderten Bibliothek notwendig ist. Beispielsweise wird für die Benutzung unter Windows die Bibliothek WGL (Windows Graphics Library) benötigt, die jedoch inzwischen integraler Bestandteil von OpenGL ist.
Durch diese Entscheidung gewinnt OpenGL an Portabilität. Allerdings muss ein solches umgebendes System existieren, um bestimmte Aufgaben, wie beispielsweise Eingaben mit der Maus oder Tastatur, zu bernehmen. Das Fenstersystem von Windows verbindet seinen Gerätekontext (Device Context, DC) mit dem für OpenGL erforderlichen so genannten Darstellungs- oder Renderkontext (Rendering Context, RC).
Das hat folgende Konsequenzen:
Das Fenstersystem erzeugt die korrekte Verbindung seines Gerätekontexts DC mit dem Renderkontext RC von OpenGL (Server) und seiner Anwendung (Client).
Das Fenstersystem stellt die benötigten Buffer, also mindestens einen Bildspeicher, den Depth Buffer, den Stencil Buffer und den Accumulation Buffer, bereit und organisiert die Darstellung des Inhaltes der Bildspeicher auf dem Bildschirm.
Das Fenstersystem bernimmt die Verarbeitung von Eingaben, da OpenGL dafr keine Möglichkeit besitzt.
Client-Server-Architektur und Netzwerkfähigkeit charakterisiert ein Konzept, welches darauf basiert, dass die Anwendung, der Kunde (Client), seine Befehle an OpenGL, den Bediener (Server), sendet, der diese Befehle interpretiert und ausführt. Dabei müssen Client und Server nicht auf einem Rechner arbeiten, sondern können ber ein Netzwerk miteinander kommunizieren. Die Verbindung zwischen der Anwendung und OpenGL wird dabei durch das Fenstersystem organisiert.
Außerdem kann ein OpenGL-Server durchaus mehrere Kunden bedienen. Voraussetzung für die Funktionsfähigkeit dieses Konzeptes ist aber auch, dass Befehle exakt in der Reihenfolge ihres Aufrufes abgearbeitet werden, selbst wenn es Verzögerungen in deren Ausführung geben kann. Das bedeutet insbesondere, dass Statusabfragen konsistent den tatsächlichen Status von OpenGL nach Ausführung aller zeitlich vorher liegenden Befehle zurückgeben und dass grafische Primitive vollständig dargestellt werden, bevor weitere Aufrufe ausgeführt werden. Ein Zustandsautomat ist ein Modell der Informationsverarbeitung, das auf einem internen Zustand des Systems basiert.
Er interpretiert Eingaben, verändert dann den internen Zustand entsprechend und erzeugt Ausgaben. Auf OpenGL bezogen bedeutet das, Eingaben werden abhängig vom aktuellen Zustand in den Bildspeicher geschrieben und damit ausgegeben. Der interne Zustand des OpenGL-Automaten wird auch als Status bezeichnet und bestimmt den Modus der Darstellung.
Er kann durch weitere Befehle ohne direkte Auswirkung auf die Ausgabe verändert werden. Der OpenGL-Zustand besteht aus einer Vielzahl von Variablen in speziellen Funktionsgruppen. Er enthält unter anderem implementationsabhängige Größen, wie die Tiefe des Bildspeichers in Bit, aktuelle Attributwerte, wie die voreingestellte Farbe, sowie Angaben zum Darstellungsmodus, die beispielsweise Transformationen, Beleuchtung oder das Antialiasing steuern.
System requirements
File format: PDF
Copy protection: Watermark-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 uses Watermark-DRM, a „soft” copy protection. This means that there are no technical restrictions to prevent illegal distribution. However, there is a personalised watermark embedded in the eBook that can be used to identify the purchaser of the eBook in the event of misuse and to provide evidence for legal purposes.
For more information, see our eBook Help page.