Marius. Apetri. OpenGL. 3D-Grafik mit. Das umfassende Praxis-Handbuch. inklusive CD-ROM

Außerdem zum Thema bei mitp: Marius Apetri Apetri Mathematische Grundlagen und Einführung in die 3D-Grafikprogrammierung Modellierung dreidimension...
Author: Frank Dunkle
5 downloads 4 Views 921KB Size
Außerdem zum Thema bei mitp:

Marius Apetri

Apetri

Mathematische Grundlagen und Einführung in die 3D-Grafikprogrammierung Modellierung dreidimensionaler Umgebungen

Auf der CD:

ISBN 978-3-8266-5953-9

ISBN 978-3-8266-1767-6

5512_P_OpenGL_U4_RS_Korr2.indd 1

3D-Grafik mit

OpenGL Das umfassende Praxis-Handbuch

ISBN ISBN978-3-8266-5512-8 978-3-8266-5512-8

(D) € 49,95

Vollständige Quelltexte: • 199 Programme in C++, basierend auf GLUT • 199 Programme in C++ für Windows • 4 Programme in Java (JOGL v1.1.1a), die alle wichtigen Themen abdecken

ISBN 978-3-8266-5548-7

OpenGL

• Grundlagen der OpenGLProgrammierung • Einführung in die 3DGrafikprogrammierung • Das Zusammenwirken von Programmsoftware und Grafikhardware • Umgang mit Matrizen • Beleuchtung von Gegenständen • Polygon- und Texturschattierung mit GLSL • Einschränkung des Sichtbereiches • Auswahl von Gegenständen • Hardwarebeschleunigte Bildbearbeitung • Texturprojektion • Ein- und Ausgabe von Texten • Generierung einer Programmkonsole • Semitransparenz • Globale und örtlich begrenzte Nebelfelder • Texturprojektion • Multitextureffekte

Der OpenGL-Standard ist eine sprachenunabhängige Programmierschnittstelle zur Entwicklung von 2Dund 3D-Computergrafik und eignet sich zur Darstellung komplexer Szenen in Echtzeit. OpenGL ist die Grundlage zur Erstellung zahlreicher Softwareprojekte wie Computerspiele, Animationen für Film- und Videoprojekte, wissenschaftliche Darstellungen oder „virtuelle Realität“. Dieses Buch vermittelt die Kenntnisse, die für die Erstellung einfacher bis komplexer OpenGLAnwendungen benötigt werden. Alle Themen werden anhand anschaulicher Beispiele erläutert. Der OpenGL-Standard wird aus der Perspektive des Entwicklers vorgestellt, der komplexe virtuelle Welten generieren möchte, in denen man sich frei bewegen kann. Nach der Vorstellung grundlegender Konzepte von OpenGL wird die Visualisierung von Punkten, Linien, Polygonen und Polyedern erläutert. Daraufhin behandelt der Autor das von OpenGL eingesetzte System zur Verarbeitung von Matrizen einschließlich der Vorteile dieses Systems gegenüber der in der Mathematik üblichen Reihenfolge der Multiplikation von Matrizen. Weitere Schwerpunkte sind die Geometry Pipeline, Picking, eine ausführliche Einführung in die Programmierung des Vertex- und Fragmentprozessors mit GLSL, die hardwarebeschleunigte Bearbeitung von Bildern, Semitransparenz sowie Texturprojektion und -schattierung. Die Darstellung einer virtuellen Welt aus der Sicht mehrerer, beliebig positionierter und ausgerichteter Kameras wird ebenfalls behandelt. Dies ist ein Lehrbuch mit zahlreichen Übungsaufgaben, das sich besonders gut für das Alleinstudium eignet. Zusammenhänge werden einem breiten Publikum nachvollziehbar erklärt, und es werden lediglich gute Kenntnisse einer leistungsfähigen Programmiersprache sowie das mathematische Grundwissen der gymnasialen Mittelstufe vorausgesetzt. Dabei richtet sich der Autor an Leser, die weder über OpenGL-Kenntnisse noch über Vorkenntnisse in der Computergrafik verfügen. Die Beispiele im Buch sind in C++ erstellt.

3D-Grafik mit

Aus dem Inhalt:

Das umfassende Praxis-Handbuch

Zahlreiche anschauliche Beispielprogramme und Übungsaufgaben

inklusive CD-ROM

12.07.2010 20:14:31

00___OpenGL.book Seite 15 Montag, 12. Juli 2010 8:45 20

Einleitung Dieses Buch übermittelt die Kenntnisse und Fertigkeiten, die für die Erstellung komplexer OPENGL-Anwendungen erforderlich sind. Der Aufbau des Buches erfolgt nach einem intuitiven und leicht nachvollziehbaren Prinzip, das auf der hierarchischen Gliederung der gesamten Computergrafik unter Berücksichtigung der vom OPENGL-Standard unterstützten Techniken beruht. Die Texte richten sich insbesondere an Leser, die weder über OPENGL- noch über Vorkenntnisse der Computergrafik verfügen. Das Buch ist in erster Linie für ein Alleinstudium konzipiert, es kann jedoch auch als Begleitmaterial oder Nachschlagewerk für Fächer wie Computergrafik eingesetzt werden. Eine Besonderheit des Buches besteht darin, dass die theoretischen Ausführungen in Form zahlreicher Programme in die Praxis umgesetzt werden; somit ergeben sich viele Gelegenheiten, um die erworbenen Kenntnisse individuell vertiefen bzw. erweitern zu können. Dank des vielschichtigen Aufbaus werden dem Leser wiederholt Anreize gegeben, um eigene Effekte zu programmieren, die im Text nicht explizit beschrieben sind. Die Beispielprogramme werden in Form einer plattformunabhängigen Variante der Programmiersprache C++ vorgestellt und sind in jeweils drei unterschiedlichen Versionen implementiert: C++ für WINDOWS, C++ auf der Basis von GLUT und JAVA, wobei die Version 1.1.1 der JOGL-Erweiterung zum Einsatz kommt. Übersetzerspezifische Strukturen kommen in den Quelltexten nicht vor, so dass die Erstellung lauffähiger Programme unter Verwendung eines beliebigen Compilersystems erfolgen kann.

Erforderliche Vorkenntnisse Die wichtigste Voraussetzung für das Verständnis des Buches ist die sichere Beherrschung einer leistungsfähigen Programmiersprache. Zwar wird in den Quelltextausschnitten ausschließlich die Programmiersprache C++ eingesetzt, die genaue Kenntnis dieser Sprache ist allerdings nicht erforderlich – die Arbeitsweise der Quelltexte wird ausführlich so beschrieben, dass die entsprechenden Anweisungen leicht in einer alternativen Sprache wie DELPHI übersetzt werden können. Die zweite Voraussetzung ist die Beherrschung elementarer mathematischer Grundlagen wie Brüche oder das Lösen von Gleichungssystemen mit einer reellen Unbekannten. Erweiterte mathematische Grundlagen wie Vektoren, Ebenen oder trigonometrische Funktionen, die für das Verständnis der Texte von Bedeutung sind, werden im ersten Anhang ausführlich erklärt. Der Aufbau dieses Anhanges ermöglicht selbst Lesern, denen die beschriebenen Begriffe fremd sind, ein genaues Verständnis der entsprechenden Grundideen und Definitionen.

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

15

00___OpenGL.book Seite 16 Montag, 12. Juli 2010 8:45 20

Einleitung

Aufbau des Buches Das Buch ist in sechs Teile gegliedert, und jeder Teil umfasst eine unterschiedliche Anzahl an Kapiteln. Die unterschiedlichen Abschnitte eines Kapitels beschreiben die entsprechenden Themen anhand anschaulicher Beispiele, wobei zunächst die Problemstellung und anschließend die Lösung anschaulich erklärt wird. Die Themen sind hierarchisch so gegliedert, dass die Lösung eines neuen Problems häufig eine geringfügig umgewandelte oder leicht erweiterte Version der Lösung eines bereits bekannten Problems darstellt. Im dritten Schritt wird die anschaulich vorgestellte Lösung in eine mathematische Formel umgewandelt, die aus den gegebenen die jeweils gesuchten Größen berechnet. Jeder Schritt im Verlauf der dazugehörigen Umformungen wird in Form der zugrunde liegenden Definition erläutert; bis auf die vorausgesetzten elementaren mathematischen Grundkenntnisse werden sämtliche Definitionen in diesem Buch ausführlich erläutert, entweder im regulären Text oder im ersten Anhang. Schließlich wird die OPENGL-Implementierung des entsprechenden Verfahrens vorgestellt und in Form eines lauffähigen Beispielprogramms implementiert. Wichtige Erweiterungen der entsprechenden Verfahren werden häufig anhand von Übungsaufgaben und Projekten vorgestellt. Projekte sind längere Übungsaufgaben, die für die Realisierung eines bestimmten Ziels mehrere, aufeinander aufbauende Etappen durchlaufen. Die Musterlösungen der Übungsaufgaben und Projektschritte befinden sich am Ende des jeweiligen Kapitels.

Erster Teil Der erste Teil vermittelt die grundlegenden Definitionen und Konventionen, die bei der Erstellung von OPENGL-Programmen zu berücksichtigen sind. Hierzu zählen die Koordination von Programmsoftware und Grafikhardware, OPENGL-Datentypen, die Benennung von Funktionen, das Fehlererkennungssystem von OPENGL sowie die gepufferte Ausgabe und der Umgang mit globalen Zuständen. Der praktische Einsatz dieser Vorgaben wird anhand der Darstellung von zweidimensionalen Punkten und Linien mit benutzerdefinierten Stärken demonstriert. Die Beschreibung des Grafikprozessors sowie die Erläuterung sämtlicher Rasteralgorithmen erfolgen anhand eines theoretischen Modells der Grafikhardware, das am Anfang des ersten Teils vorgestellt wird. Weitere Schwerpunkte sind die Festlegung des auf dem Bildschirm sichtbaren Bereiches des zweidimensionalen Raumes und die Vorstellung des Funktionsbegriffes – diese Kenntnisse sind von großer Wichtigkeit im Zusammenhang mit der Visualisierung von Bézierkurven mit dem hardwareinternen Auswertungsmechanismus, dem letzten Hauptthema des ersten Teils.

Zweiter Teil Die Definition, Bewegung und Darstellung dreidimensionaler Gegenstände wird im zweiten Teil des Buches vorgestellt. Zu diesen Themen zählen die Zentral- und Parallelprojektion, zwei unterschiedliche Techniken zur Umwandlung der dreidimensionalen Koordinaten von Punkten in zweidimensionale, auf dem Bildschirm darstellbare Positionen. Während die Zentralprojektion besonders realitätsnahe Ausgaben generiert, werden auf der Parallelprojektion basierende Darstellungsverfahren wie die ausführlich beschriebene Militär- oder Kavalierperspektive für schematische Visualisierungen eingesetzt, die genaue Rückschlüsse hinsichtlich der Verhältnisse zwischen Seiten und Winkeln von Gegenständen erlauben.

16

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

00___OpenGL.book Seite 17 Montag, 12. Juli 2010 8:45 20

Aufbau des Buches

Von besonderem Interesse ist die Herleitung der Matrizen zur Durchführung der beschriebenen Darstellungstechniken auf der Grundlage der zweidimensionalen Geradengleichung f( x ) = m * x + n und die Beschreibung der Rolle dieser Matrizen im Verlauf des von der Grafikhardware automatisch durchgeführten geometrischen Verarbeitungsprozesses (Rendering Pipeline). Vorgänge wie die Umwandlung des dreidimensionalen Sichtbereiches, der im Allgemeinen die Form eines Pyramidenrumpfes aufweist, in den Einheitswürfel sowie die Anpassung (Clipping) von Linien und Polygonen an diesem Würfel werden im gegebenen Zusammenhang zunächst anhand des anschaulichen dreidimensionalen Raumes erklärt und erst anschließend in den vierdimensionalen Raum überführt. Ein weiteres Hauptthema ist die ausführliche Erläuterung des Matrizenbegriffes auf der Grundlage des Linearitäts- und des Funktionsbegriffes. Schwerpunkte sind der Aufbau von Matrizen auf der Grundlage vorgegebener Gleichungssysteme, die mathematisch korrekte Reihenfolge der Matrizenmultiplikation sowie die Definition beliebiger Bewegungen. Die Texte sind aus einfachen, allgemein verständlichen Ideen aufgebaut und es findet keine Abstraktion statt. Der zunächst noch theoretisch formulierte Matrizenbegriff wird schließlich in Form eines benutzerdefinierten Datentyps zur Verwaltung von Matrizen implementiert und in mehreren Beispielprogrammen zur anschaulichen Verschiebung, Rotation und Skalierung von Polygonen eingesetzt, die mit abgeschlossenen Linienzügen dargestellt werden. Der Text geht auf Besonderheiten ein, die im Zusammenhang mit diesen Grundbewegungen zu beachten sind, und es werden komplexere Bewegungen aus der Hintereinanderausführung einfacher Bewegungen definiert. Diese ausführliche Diskussion des Matrizenbegriffes in einem möglichst anschaulichen Zusammenhang ist von großer Wichtigkeit im Hinblick auf das genaue Verständnis der Matrizenverarbeitungsvorgänge, die versteckt und ohne Zutun des Programmierers automatisch innerhalb der Grafikhardware stattfinden. Diesen Vorgängen ist der gesamte dritte Teil des Buches gewidmet. Polygone stellen das dritte Hauptthema des zweiten Teils dar. Der Text beschreibt die von OPENGL unterstützte Definition des Polygonbegriffes sowie ein mögliches Rasterverfahren zur Darstellung der Bildpunkte auf der Oberfläche eines konvexen Vielecks. Anschließend wird die hardwareunterstützte Visualisierung beliebiger Polygone in Form von Punktwolken und Drahtgittern sowie das Standardverfahren erläutert, mit dem gefüllte konkave Polygone unter Verwendung der Funktionen der OPENGL UTILITY LIBRARY dargestellt werden können. Der letzte Schwerpunkt des zweiten Teils umfasst die Definition, Verwaltung sowie die perspektivisch korrekte Darstellung von Polyeder-Gegenständen, die aus einer endlichen Anzahl an Polygonen zusammengesetzt sind. In diesem Zusammenhang werden Begriffe wie Vorderseite und Anordnung der Punkte eines Vielecks definiert und das von OPENGL unterstützte Verfahren zur Erkennung abgewandter Polygone beschrieben. Schließlich wird der Z-SpeicherAlgorithmus erläutert, zusammen mit der Notwendigkeit der perspektivisch korrekten Interpolation von z-Koordinaten entlang der Oberfläche von Polygonen und den benutzerdefinierten, von OPENGL unterstützten Einstellungen des Verfahrens.

Dritter Teil OPENGL verwendet ein System zur Verarbeitung von Matrizen, das sich von der mathematisch korrekten Vorgehensweise unterscheidet. Das wichtigste Thema des dritten Teils ist die Beschreibung dieses Systems, wobei der Schwerpunkt auf die Vorteile gesetzt wird, die es gegenüber dem Standardverfahren aufweist. Diese Vorteile werden schließlich anhand eines

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

17

00___OpenGL.book Seite 18 Montag, 12. Juli 2010 8:45 20

Einleitung

Übungsprogramms demonstriert, das in drei unterschiedlich optimierten Versionen vorgestellt wird – dieses Programm verdeutlicht, dass das von OPENGL eingesetzte Matrizenverarbeitungssystem im Vergleich mit der mathematisch korrekten Methode übersichtlichere Quelltexte und eine Reduzierung des bei einem Programm auftretenden Rechenaufwandes ermöglicht. Sämtliche im dritten Teil vorgestellten Themen basieren auf dem Begriff der lokalen Ausrichtung, einer erweiterten Version des bereits im zweiten Teil formulierten Begriffes der Position eines Gegenstandes. Der praktische Einsatz lokaler Ausrichtungen setzt allerdings die Formulierung eines Verfahrens voraus, mit dessen Hilfe ein Punkt um eine beliebig durch den dreidimensionalen Raum verlaufende Gerade rotiert werden kann. Die Definition der entsprechenden Matrix wird ausführlich beschrieben und basiert auf dem im ersten Anhang vorgestellten Begriff des Skalarproduktes. Lokale Ausrichtungen werden zunächst im Zusammenhang mit der Bewegung der Betrachterposition durch den dreidimensionalen Raum eingesetzt. Die entsprechende Technik wird anschließend in einer leicht veränderten Form eingesetzt, um den Darstellungsprozess beliebiger Gegenstände zu optimieren – der Schwerpunkt wird hierbei auf die unterschiedlichen Bezugssysteme gesetzt, die in der Computergrafik dreidimensionalen Koordinaten zugeordnet werden. Die Standardkoordinaten (Object Coordinates) bleiben während der gesamten Programmausführung konstant, die auf das globale Koordinatensystem bezogenen Weltkoordinaten verändern sich bei jeder Bewegung des Gegenstandes und die Kamerakoordinaten (Eye Coordinates) richten sich schließlich nach den Achsen der lokalen Ausrichtung, die die Position und Orientierung der jeweils aktuellen Darstellungskamera festlegen. Der Wechsel zwischen den beschriebenen Bezugssystemen erfolgt in Abhängigkeit von der entsprechenden Situation durch Multiplikation von Punkten mit der Zeilen- oder der Spaltenmatrix der lokalen Ausrichtung des Gegenstandes. Der Text beschreibt sowohl die explizite Verwaltung von Ausrichtungen in Form eines benutzerdefinierten Datentyps als auch die implizite Verwaltung unter Verwendung von Matrizen. Ein weiteres Hauptthema ist die Visualisierung einer dreidimensionalen Umgebung aus der Sicht beliebig positionierter und orientierter Kameras. Die Darstellung der Sicht jeder Kamera in einem eigenen Fenster (Viewport) wird ebenfalls erläutert. Sowohl die Gegenstände als auch die Kameras lassen sich während der Ausführung des Programms frei bewegen. Das von OPENGL eingesetzte Auswahlsystem von Gegenständen stellt das letzte Hauptthema des dritten Teils dar. Die Einleitung der ausführlichen Beschreibung der betreffenden Vorgänge erfolgt anhand der Beschreibung der benutzerdefinierten Einschränkung des dreidimensionalen Sichtbereiches. Diese Erläuterung erfolgt sowohl vom geometrischen als auch vom algebraischen Standpunkt aus, wobei im zweiten Fall die von OPENGL eingesetzte Einschränkungsmatrix (Pick Matrix) schrittweise auf der Grundlage der zweidimensionalen Geradengleichung f( x ) = m * x + n hergeleitet wird. Der dritte Teil endet mit der Vorstellung eines weiteren Grafikeffektes, der auf eine einfache Weise auf der Grundlage lokaler Ausrichtungen generiert werden kann: die Approximation einer in Echtzeit animierten Wasseroberfläche aus der Überlagerung mehrerer Sinusflächen. Die Form jeder Sinusfläche, das heißt die Wellenhöhe und -länge sowie die Bewegungsrichtung und -geschwindigkeit lassen sich beliebig während der Ausführung des Programms festlegen.

18

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

00___OpenGL.book Seite 19 Montag, 12. Juli 2010 8:45 20

Aufbau des Buches

Vierter Teil Polygonschattierung ist das Hauptthema des vierten Teils des Buches. Anfangs werden die drei unterschiedlichen Denkansätze auf der Grundlage dieses Vorganges erläutert: die Technik zur Berechnung der schattierten Farbe, die Art der Anwendung dieser Technik im Verlauf der Darstellung eines Polyeders und die Beschaffenheit der Lichtquelle. Die Art der Durchführung der Farbberechnung ist der erste Schwerpunkt des vierten Teils: Von einer möglichst einfachen Methode der Farbgebung und einer paralleles Licht ausstrahlenden Lichtquelle ausgehend, wird zunächst die flache Schattierung von Polygonen auf der Basis des Winkels zwischen dem Licht- und dem entsprechenden Normalenvektor beschrieben. Die Definition des Begriffes der Vertexnormale ermöglicht anschließend die Durchführung der Vertexschattierung – Farben werden nunmehr in jedem Punkt des darzustellenden Polygons berechnet und anschließend entlang der Seiten und Rasterzeilen linear interpoliert. In diesem Zusammenhang wird eine anschauliche Erklärung gegeben, warum die Aufteilung konvexer Polygone in Dreiecke sinnvoll ist. Die Fragmentschattierung ordnet schließlich jedem Bildpunkt auf der Oberfläche des Polygons einen eigenen Normalenvektor zu, der zusammen mit dem Lichtvektor zur Berechnung der gesuchten Farbe eingesetzt wird. Ein wichtiger Schwerpunkt des vierten Teils ist die Beschreibung der Syntax der OPENGL SHADING LANGUAGE sowie die praktische Erstellung und Ausführung von GLSL-Unterprogrammen in einem Hochsprachen-Hauptprogramm. Die Koordination zwischen dem Programmquelltext und dem programmierbaren Vertex- und Fragmentprozessor sowie die Ausgabe eventuell auftretender Fehlermeldungen während der Erstellung des GLSL-Unterprogramms werden besonders betont. Der letzte Schwerpunkt des vierten Teils ist die Diskussion der Standardmethode der Polygonschattierung. Zunächst werden grundlegende Begriffe wie Eigen- und Umgebungslicht, diffuse und spiegelnde Reflexion sowie winkelhalbierender Vektor (Halfway Vector) definiert, anschließend erfolgt die praktische Implementierung des Verfahrens in Form lauffähiger Programme.

Fünfter Teil Der fünfte Teil des Buches beschreibt die von OPENGL unterstützten Funktionen zur Ausgabe und Bearbeitung von Bildern. Anfangs erfolgt die Definition der Begriffe Schwarzweiß-, Graustufen- und Farbbild, und es werden Techniken zur Darstellung von Bildern in zwei- und dreidimensionalen Zusammenhängen vorgestellt. Weitere Schwerpunkte sind die Ausgabe von Texten sowie die im Verlauf eines Projektes erfolgende Erstellung einer Konsole zur Veränderung der Werte global definierter Variablen während der Laufzeit des Programms durch die freie Eingabe festgelegter Zeichenketten in einem Textfeld. Die hardwarebeschleunigte Bildbearbeitung mit OPENGL stellt das zweite Hauptthema des fünften Teils dar. Die Grundidee des Einsatzes von Farbpaletten auf Bildern wird anhand der Veränderung der Helligkeit, der Trennung von Farbkanälen sowie der Färbung von Graustufenbildern in die Praxis umgesetzt. Die Bildfilterung wird zunächst theoretisch erklärt und anschließend in Form der mehrfachen Anwendung eines Unschärfefilters auf ein vorgegebenes Bild demonstriert.

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

19

00___OpenGL.book Seite 20 Montag, 12. Juli 2010 8:45 20

Einleitung

Die Grundidee sowie der praktische Einsatz der hardwareinternen Farbmatrix werden in Form der Umwandlung eines Farbbildes in das entsprechende Graustufenbild, der Vertauschung von Farbkanälen und der Generierung von Farben vorgestellt, die in der ursprünglichen Version des Bildes nicht vorkommen. Im Zusammenhang mit der hardwarebeschleunigten Generierung, Ausgabe und Interpretation von Histogrammen wird schließlich ein Verfahren zur Anpassung von Bildschärfe und -kontrast beschrieben. Ein weiteres Hauptthema des fünften Teils umfasst die Grundidee und praktische Durchführung von Semitransparenzeffekten. Schwerpunkte sind die Definition des Transparenzgrades unter Verwendung von Alphawerten sowie die Vorstellung von zwei Situationen, die eine Festlegung der Transparenzstärke anhand der roten, grünen und blauen Farbkomponente erfordern. Der vierte Teil endet mit der Beschreibung der Konstruktion dreidimensionaler Landschaften auf der Grundlage von Höhenfeldern, die als Graustufenbilder vorliegen. In diesem Zusammenhang werden zunächst die drei von dem nicht programmierbaren Grafikprozessor unterstützten Algorithmen zur Generierung globaler Nebeleffekte vorgestellt, anschließend erfolgt die schrittweise GLSL-Definition von zwei Fragment-Unterprogrammen zur Darstellung kugel- und quaderförmig begrenzter Nebelfelder.

Sechster Teil Der sechste Teil des Buches beschreibt die Projektion zweidimensionaler Bilder auf die Oberfläche von Polygonen. Anfangs werden die Definition des Texturbegriffes und die Grundidee der Verwendung von Textur- und Bildkoordinaten vorgestellt, gefolgt von den Vorgängen, die OPENGL zur Initialisierung der Texturprojektion voraussetzt. In diesem Zusammenhang werden das Auftreten von Vergrößerungs- und Verkleinerungsartefakten (Magnification, Minification) sowie die lineare und perspektivische Form der Texturprojektion untersucht. Der Text gibt eine anschauliche Begründung für die Durchführung der perspektivisch korrekten Interpolation von varying-Werten entlang von Polygonseiten und Rasterzeilen trotz des höheren Rechenaufwands, der im Vergleich zur linearen Interpolation auftritt. Das erste Hauptthema endet mit der praktischen Texturierung eines einzelnen Polygons und eines Würfels. Das zweite Hauptthema des sechsten Teils befasst sich mit drei Techniken zur Parkettierung von Texturen entlang der Oberfläche von Polygonen. Schwerpunkte sind die entsprechenden Vorschriften zur Umwandlung von Textur- in Bildkoordinaten sowie der von OPENGL festgelegte Begriff der Texturgrenze (Texture Border). Der Text beschreibt, wie die Bewegung von Texturen entlang der Oberfläche von Polygonen unter Verwendung der hardwareinternen Texturmatrix durchgeführt werden kann. Die Texturfärbung stellt zunächst eine einfache Technik zur Schattierung texturierter Polygone vor, anschließend werden die polygonübergreifende Texturparkettierung sowie die Verbindung der Texturprojektion mit dem Standardmodell der Polygonschattierung erläutert. Die Texte weisen darauf hin, dass die Zugehörigkeit von Texturkoordinaten situationsabhängig ist: Trotz der allgemeingültigen Festlegung von Texturkoordinaten als eine Polygoneigenschaft ist es in bestimmten Fällen dennoch sinnvoll, diese als eine Vertexeigenschaft festzulegen. Ein weiterer Schwerpunkt der Texturfärbung ist die Farbmischung im Dreidimensionalen, die anhand der Konstruktion eines Partikelsystems im Verlauf eines Projekts vorgestellt wird – bemerkenswert ist, dass die in diesem Zusammenhang eingesetzte Vorschrift zur Mischung von

20

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

00___OpenGL.book Seite 21 Montag, 12. Juli 2010 8:45 20

Aufbau des Buches

Farben eine realistisch wirkende Aufhellung durch die bewusste Herbeiführung von Wertüberläufen generiert. Schließlich wird die perspektivisch korrekte Darstellung von Texturen mit vollständig transparenten Bereichen unter Verwendung des Alphatests beschrieben. Der sechste Teil des Buches beschreibt die Durchführung der Texturprojektion unter Verwendung von GLSL. Schwerpunkte sind die Generierung von Multitextureffekten, das heißt die Darstellung mehrerer Bilder auf der Oberfläche desselben Polygons, die auf verschiedene Arten bewegt werden können. Der Text stellt ein komplexes Fragment-Unterprogramm vor, das die Texturfärbung mit der Modellierung eines sphärenförmig begrenzten Nebelfeldes verbindet.

Anhänge Anhang A stellt die mathematischen Grundlagen vor, die über die ab Seite 15 beschriebenen Grundkenntnisse hinausgehen und für das Verständnis des Buches erforderlich sind. Die entsprechenden Themen sind hierarchisch gegliedert und bauen so aufeinander auf, dass die Texte selbst dann verstanden werden können, wenn die Inhalte als komplett neu empfunden werden. Anhang A beschreibt zunächst den von Cantor formulierten Mengenbegriff zusammen mit den Operatoren, die auf Mengen definiert sind. Diese Festlegungen bilden anschließend die Grundlage der formellen Definition der Begriffe Punkt, Gerade und Ebene. Ein wichtiger Schwerpunkt ist die Formulierung des Vektorbegriffes, zusammen mit den Definitionen der Länge eines Vektors, der Vektoraddition und der Skalarmultiplikation. Der Punkt- und Vektorbegriff wird in Form der Definition des Ortsvektors in einen gemeinsamen Zusammenhang gebracht, und der Text beschreibt die Vorteile der Definition des anschaulichen dreidimensionalen Raumes R3 als eine Menge von Vektoren. Im Verlauf eines Projekts wird zunächst der verallgemeinerte Satz des Pythagoras, anschließend das Standard-Skalarprodukt von Vektoren hergeleitet. Im Zusammenhang mit der Berechnung der Abstände zwischen Punkten, Geraden und Ebenen wird dem Leser schließlich eine auf Vektoren und Skalarprodukten basierende Technik vorgestellt, mit deren Hilfe die meisten in der Computergrafik auftretenden Problemstellungen auf einfache Weise gelöst werden können. Weitere Hauptthemen des ersten Anhangs sind die anschaulichen Definitionen der Sinus-, Kosinus- und Tangensfunktion sowie der erweiterten binomischen Formel und die Angabe von Winkeln in Bogenmaß. Von besonderem Interesse ist die zweidimensionale Geradengleichung f( x ) = m * x + n Diese Formel ist von herausragender Bedeutung für die Computergrafik, da sie die Grundlage sämtlicher wichtiger Algorithmen bildet, unter anderem Darstellung von Linien und gefüllten Polygonen, Z-Speicherung, Polygonschattierung, Auswahl von Gegenständen, Bildbearbeitung oder Texturprojektion. Anhang B stellt die Komponenten der Beispielprogramme vor, die von OPENGL unabhängig sind – hierbei handelt es sich um die Generierung eines Fensters, die Erstellung einer Verbindung zwischen Programm und Grafikhardware und die Abfrage von Benutzereingaben. Anhang C beschreibt die Kompilierung der Beispielprogramme, weiterführende Literatur wird in Anhang D vorgestellt.

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

21

00___OpenGL.book Seite 22 Montag, 12. Juli 2010 8:45 20

Einleitung

Lieferumfang der CD Die mitgelieferte CD enthält die vollständigen Quelltexte sämtlicher im Verlauf des Buches vorgestellten Beispielprogramm. Jedes Beispielprogramm tritt in Form von zwei unterschiedlichen Versionen auf: C++ für WINDOWS und C++ auf der Grundlage von GLUT. Jedes Programm wird von mindestens einer Bilddatei mit der entsprechenden Ausgabe in Originalgröße begleitet. Zusätzlich hierzu werden die Quelltexte von vier unterschiedlichen Java-Programmen vorgestellt, die alle wesentlichen Themen des Textes berücksichtigen: Darstellung und benutzerdefinierte Bewegung von Polyeder, Texteingabe, Ausgabe von Bildern, Texturprojektion mit dem nicht programmierbaren Grafikprozessors und Texturschattierung mit GLSL. Diese vier Programme bilden eine solide Grundlage, die die Portierung sämtlicher in C++ definierten Quelltexte auf Java ermöglicht. Die Kompilierung sämtlicher Quelltexte wird in Anhang C beschrieben.

Art der Wissensübermittlung Motivation ist von herausragender Bedeutung bei der Erschließung eines neuen Wissensgebiets; um dieses Gefühl hervorzurufen, wird die für die Erstellung eines neuen Beispielprogramms erforderliche Theorie möglichst gering gehalten. Der Text ist auf eine Weise konzipiert, die einer großen Lesergruppe das Verständnis ermöglicht. Wird das Buch von Anfang an gelesen und der erste Anhang berücksichtigt, sind die vom Leser mitzubringenden Vorkenntnisse äußerst gering. Das Selbststudium ruft zwangsläufig Fragen und Probleme zu bestimmten Themen hervor. Die kritischen Stellen sind dem Autor bekannt, und es wird in den entsprechenden Abschnitten Hilfestellung geleistet. Um den Leser zu motivieren, wurde beim Aufbau des Textes an vielen Stellen auf das Hervorrufen von Aha-Effekten hingearbeitet; an anderen Stellen wird dem Leser das Gefühl vermittelt, etwas Besonderes erreicht zu haben. Dadurch, dass neu Erlerntes gleich in die Praxis umgesetzt wird, verschwindet die Angst vor der Theorie, ein Glücksgefühl und Vergnügen am weiteren Lesen sind die Folgen. Das Buch ist sehr logisch aufgebaut, Sachverhalte werden Schritt für Schritt erläutert, neues Wissen basiert in erster Linie auf bereits Übermitteltem. Dabei wird der rote Faden, der von den untersten Grundlagen bis zu komplexen Sachverhalten reicht, niemals aus den Augen verloren. Der Darstellung eines Polygons geht beispielsweise das Setzen voneinander unabhängiger Bildpunkte voran; man kann sich nicht über Techniken wie Polygonschattierung auslassen, ohne zuvor den geometrischen Verarbeitungsprozess der Grafikhardware vorgestellt zu haben, usw. Das menschliche Denken orientiert sich überwiegend an Bildern und Symbolen, weshalb an zahlreichen Stellen die Erklärung auf eine bestimmte, einprägsame und logische Abbildung angelehnt wird. Die zahlreichen Beispielprogramme sind im Algemeinen aus bemerkenswert wenigen Grundkomponenten zusammengesetzt, die in leicht veränderter Form auf unterschiedliche Arten kombiniert sind. Jede auftretende Problemstellung wird mit einem spezifischen, möglichst einfachen Programm gelöst; die Komponenten des zu erstellenden Programms werden den bereits bestehenden Quelltexten entnommen, neu zusammengesetzt und bilden ihrerseits eine solide Grundlage für zukünftige Erweiterungen.

22

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

00___OpenGL.book Seite 23 Montag, 12. Juli 2010 8:45 20

Geeignete Lesergruppen

Trotz der beschriebenen Vorteile sollen die vorgegebenen Quelltexte lediglich eine Hilfestellung sein – das Buch ist im Hinblick auf die Unabhängigkeit des Lesers von den vorgestellten Quelltexten der Beispielprogramme aufgebaut, und der Leser wird an zahlreichen Stellen motiviert, eigene Quelltexte zu erstellen.

Geeignete Lesergruppen Das bewährte didaktische Konzept des Buches, der geringe Umfang an erforderlichem Vorwissen sowie der anschauliche, an einfachen Grundideen und Zusammenhängen orientierte Umgang mit der Mathematik eröffnet dieses Buch einer Vielzahl an Lesergruppen: 1. Leser, die selbst komplexe Grafikeffekte darstellen möchten bzw. herausfinden wollen, wie diese funktionieren 2. Personen, die sich schnell und effizient mit dem Thema vertraut machen müssen, zum Beispiel Informatikstudenten während des Hauptstudiums 3. Lehrkräfte, die geeignetes Unterrichtsmaterial für Fächer wie Computergrafik o.Ä. benötigen 4. Leser, die einen einfachen Zugang zu den mathematischen Algorithmen benötigen, die bereits in Hardwareform implementiert worden sind, um diese neue, leistungsfähige Technologie effizient nutzen zu können 5. Personen, die sich bereits durch Selbststudium mit dem Thema vertraut gemacht haben, und ihr Wissen vertiefen möchten oder noch offene Fragen haben 6. Hobbyprogrammierer, die ihre Fähigkeiten auf einem neuen Gebiet erweitern möchten 7. Schüler, die sich mit Computerspielen beschäftigt haben und wissen möchten, wie diese programmiert werden 8. Erfahrene Grafikprogrammierer, die ein Nachschlagewerk für die mathematische Herleitung bestimmter Grafikeffekte benötigen, um diese weiterentwickeln zu können

Kontakt Dringende Fragen, Kommentare, Erweiterungs- oder Verbesserungsvorschläge können entweder direkt an den Autor übermittelt werden: [email protected] oder an den Verlag: [email protected] und der Verlag leitet die E-Mails an den Autor weiter.

© des Titels »3D-Grafik mit OpenGL« (ISBN 978-3-8266-5512-8) 2010 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg Nähere Informationen unter: http://www.it-fachportal.de/5512

23