next_inactive up previous


Implementierung eines Tutorials für OpenGL-Objekte (glut) mit Interpreter

Benutzerdokumentation

Andreas Volz, 157063

14. Dezember 2002


Inhalt

Einleitung

Sinn und Zweck

Das eigentliche Programm besteht aus einem Interpreter, welcher Dateien mit einem XML ähnlichen Format interpretiert. Dieses Format wird im weiteren Verlauf der Dokumentation genau erläutert. Dieser Interpreter ermöglicht es dem Anwender relativ schnell die wesentlichen Aspekte im OpenGL Objekt-, Farb- und Lichtmodell zu verstehen. Man ist in der Lage Variablenwerte zu ändern, ohne das Programm neu kompilieren zu müssen.

Der zweite Teil der Applikation ist völlig getrennt vom Interpreter und stellt mit Hilfe des gtk2-Toolkits eine Oberfläche zum Erzeugen der Objekte und Lichter zur Verfügung.

Motivation

Es gibt schon eine Menge anderer Tutorials und Programme, die ähnlich wie dieses sind. Ich hatte jedoch beim schreiben dieses Programms einzig das Ziel besser den Umgang mit ANSI-C, gtk2 und OpenGL zu lernen. Wenn jemand durch dieses Programm etwas über OpenGL lernt würde ich mich denoch sehr freuen.

Dokumentation

Bei der Dokumentation ist die Entscheidung auf LATEX gefallen. LATEX ist ein Textverabeitungs-System, welches für sehr viele Betriebsysteme zur verfügbar steht und als OpenSource Software im Internet kostenlos herunter geladen werden kann.

Im Text sind besondere Wort hervorgehoben. Ein Befehl den man eingeben kann, wird etwa durch Kommando kenntlich gemacht. Auch Dateien werden so kenntlich gemacht. Kursiv geschriebene Wörter weisen auf Dateien, Buttons oder Menüpunkte hin. Ausserdem markieren sie Firmennamen oder Produkte wie OpenGL. Englische Wörter sind auch kursiv dargestellt. Begriffe denen besondere Beachtung geschenkt werden sollten, sind fett dargestellt.

Lizenz

Alle Quellcodes und Dokumentationen sind unter der GPL veröffentlicht. Im Anhang dieses Dokuments und in der Datei COPYING ist eine Kopie davon vorhanden.

Anforderungen

Unterstützte Betriebsysteme

Das grundsätzliche Design der Anwendung ist mit kleinen Einschränkungen Plattformunabhängig. Der Interpreter ist auf folgenden System erfolgreich getestet: Da das Toolkit gtk2 nicht auf allen vorhandenen Rechnerarchitekturen zur Verfügung stand, war es nur moglich die GUI auf folgenden Systemen zu testen: Wer sich für die Portierung auf eine andere Rechnerplattform interessiert, muss an dieser Stelle auf die Detaildokumentation verwiesen werden.

Rechnerleistung

Die eigentlichen Rechneranforderungen das Programm lauffähig zu bekommen sind relativ gering. Jedoch ist für das vernünftige Arbeiten mit mehreren OpenGL-Objekten entweder eine 3D-Beschleunigerkarte oder ein sehr schneller PC notwendig.

Auf einem Pentium 800 mit einer Nvidia TNT II 3D-Karte und aktivierten nvidia Treibermodul unter Linux lassen sich sehr gute Ergebnisse erzielen.

Vorraussetzung zum Kompilieren

Auf allen Systemen die eine Implementierung für OpenGL mit GLUT zur Verfügung stellen, sollte eine Kompilation des Interpreters möglich sein. Damit jedoch der Designer mit der gtk2-Oberfläche genutzt werden kann, müssen auf dem System eine Reihe von Bibliotheken zur Verfügung stehen. Selbstverständlich muss auch eine geeignete Entwicklungsumgebung zur Verfügung stehen. Der Kompiliervorang ist nochmal ausführlich in der Detaildokumentation beschrieben.

Arbeiten mit glInterpret

Start und Parameter

Der Interpreter ist ein rein Terminal basierendes Programm und wird mit glInterpret gestartet. Wenn keine Paramerer an glInterpret übergeben werden, bekommt man einen Hinweis angezeigt. Als einziger Parameter kann man eine Datei, welche die Szene mit allen Objekt und Lichtquellen beschreibt übergeben. Diese Datei hat normalerweise die Endung .gli. Falls man in der Datei nicht bekannte Objekte stehen hat, bekommt man dies als Fehler im Terminal zurückgemeldet.

Da man in Windows meist nicht aus dem Terminal startet, ist es sinnvoll den Dateityp .gli mit glInterpret im Explorer zu verknüpfen. Leider werden dann im Fehlerfall keine Meldungen angezeigt.

Steuerung und Tastenkontrolle

Wenn man eine Szene berechnen und das Ergebnis in einem OpenGL-GLUT Fenter vorliegen hat, kann man darin mit Hilfe der Tastatur die Ansichten ändern. Mit Hilfe der Tasten ``x'',''y'' und ``z'' kann man die gesamte Szene von allen Seiten betrachten. Die Taste ``t'' lässt den Betrachter die Szene von der anderen Seite betrachten. Die Tasten ``1'' bis ``8'' aktivieren und deaktivieren die Lichtquellen LIGHT0 bis Light7.

Format der Szenen Datei

Das Datenformat ist nach einer hierarchischen Syntax aufgebaut. Es gibt <ABSCHNITTE> welche entweder weitere <UNTERABSCHNITTE> oder Schlüssel = Wert Paare enthalten dürfen. Jeder <ABSCHNITT> muss durch den entsprechenden </ABSCHNITT> geschlossen werden. Es gibt eine Reihe von gemeinsamen Optionen, welche für alle Objekte anwendbar sind. Zusätzlich gibt es bestimmte Objektabhängige Optionen die nur für bestimmte Objekte verfügbar sind. Beide Arten von Optionen sind imm Anhang aufgelistet.

Der Eintrag int bezeichnet dabei eine Ganzzahl. An die Stelle von double kann eine Gleitkommazahl eingetragen werden. Es ist zu beachten diese Zahl nach englischer Schreibweise mit einem Punkt, statt einem Komma einzutragen. Werte die den Typ String annehmen dürfen sind entweder Objekttypen, Bezeichner oder Beschreibungen. Die eckigen Klammern definieren den Standard-Wert, falls dieser Schlüssel nicht verwendet wird. Runde Klammern beschränken entweder die Auswahl der möglichen Alternativen oder weisen auf Besonderheiten hin.

Erstellen eines Beispiels

An dieser Stelle ist es soweit das erste Beispiel selbst zu erstellen. Als einfachstes und damit erstes Beispielobjekt nehmen wie hier den teapot.

<GLOBAL>
</GLOBAL>
<OBJECT>
type = teapot
identifier = teapot0
description = Die erste Teekanne
size = 2.0
</OBJECT>
<LIGHT>
</LIGHT>

Der <GLOBAL>-Eintrag kann Optionen beinhalten, welche den Zustand der gesamten Szene beschreiben. Dieser Eintrag darf in jeder Szenen-Datei nur genau einmal vorkommen. Im Gegensatz dazu darf der <OBJECT>-Eintrag beliebig oft in der Datei auftauchen. Der type Schlüssel definiert das Objekt, welches dargestellt werden soll. In diesem Beispiel ist das eine Teekanne (teapot). Der idenifier-Schlüssel muss bei jedem Objekt angegeben werden. Dabei darf jeder Identifikatior nur einmal vorkommen. glInterpret beachtet diesen Wert zwar nicht, aber glDesigner braucht diesen Wert um die Objekt unterscheiden zu könnnen. Optional kann zur besseren Identifikation noch eine Beschreibung (description) vergeben werden. Alle restlichen Optionen beschreiben direkt Attribute oder Farbinformationen des Objekts. Bei einer Teekanne ist das nur die Größe (size) relevant. Auf Licht wird in diesem Beispiel nicht eingegangen und deshalb einfach nur das erste Licht mit <LIGHT> aktiviert. Der <LIGHT>-Eintrag darf genau acht mal vorkommen. So groß ist die minimale Anzahl von Lichtern in OpenGL. Falls mehr erforderlich sind und die Implementation das zulässt kann man den Wert im Quelltext noch erhöhen. Diese Möglichkeit ist in der Detaildokumentation genauer erläutert. Es ist zu beachten, dass nicht definierte Schlüssel mit den OpenGL Standardwerten belegt werden.

Anwenderrelevante Fehlerinformationen

Sofern man sich an den genauen Syntax der Beschreibungsdatei hält, sollte es zu keinen Problemen bei der Interpretation kommen. Falls man jedoch durch Einsatz von zusätzlichen Leerzeichen oder Tabulatoren das Dateiformat modifiziert, kann es aufgrund der Komplexität einen Syntaxanalysators zu Problemen kommen. Diese Probleme äußern sich aber im schlimmsten Fall darin, dass ein Objekt nicht erscheint oder aber die Szene nicht dargestellt werden kann. Aufgrund der Beschaffenheit der Zeilen-Endezeichen kommt es zu Problemen falls man Dateien unter Windows erstellt und unter UNIX darstellen möchte. Dies ist aber kein größes Problem und wird wohl in der nächsten Version behoben sein.

Arbeiten mit glDesigner

Start und Parameter

Die gtk2-Oberfläche wird mit glDesigner gestartet. Wie schon bei glInterpret kann als Argument dem Programm ein Datei übergeben werden, die es laden soll. Im Gegensatz zu glInterpret startet die GUI aber auch ohne diese Angabe. In diesem Fall wird eine Datei ohne Objekt und nur mit einem aktivierten Licht gestartet. Durch das verändern der Datei empty.gli kann man die Defaultwerte von glDesigner verändern.

Aufbau und Arbeitsweise der Oberfläche

Image toolbox

Das oben stehende Bild zeigt das Hauptfenster von glDesigner. Das Fenster besteht aus einer Menüzeile und einem Werkzeugkasten. Die Menüzeile ermöglicht Dateioperationen wie Laden, Speichern und Neu Anlegen der Szene. Durch einen Mausklick auf eines der OpenGL-Objekte wird ein neues Objekt angelegt, welches später im Einstellungsfenster verändert werden kann. Darunter sind weitere Knöpfe für Hintergrundfarbe, Fenstergröße, Licht hinzufügen und Szene berechnen. Wenn man die Maus über einen der Knöpfe bewegt bekommt man einen Tip welche Funktion sich dahinter verbirgt.

Image properties_obj

Auf diesem Bild ist das Eigenschafts-Fenster von glDesigner zu sehen. Mit Hilfe dieses Fensters lassen sich alle Eigenschaften der in der Szene vorhandenen Objekte und Lichtquellen verändern. Ausserdem ist es möglich einzelne Objekte oder Lichtquellen wieder zu löschen. Die Einzelheiten der Objekt- und Lichtdialoge werden anhand eines Beispiels weiter unten in diesem Kapitel erläutert.

Erstellen eines Beispiels

Wie im Eigenschafts-Fenster weiter oben zu sehen ist, sind in diesem Beispiel nur zwei Kugeln (sphere) vorhanden. Zu einem späteren Zeitpunkt wird auch noch eine zusätzliche Lichtquelle zu der schon Vorhandenen eingefügt.

Image object_prop

Durch das markieren des gewünschten Objekts in der Objektliste und einen Mausklick auf Eigenschaften öffnet sich ein Dialog-Fenster in dem man zum einen Bezeichner und Beschreibung ändern und zum anderen weitere Dialoge auswählen kann. Der Bezeichner kann verändert werden, muss aber zum späteren wiederfinden des Objekts eindeutig sein. Die Oberfläche verhindert ein Anlegen zweier Objekte gleichen Namens. Die Beschreibung hat nur den Sinn Kommentare zu vergeben die das Wiedererkennen von Objekten erleichtern.

Image obj_attribute

Jedes Objekt hat unterschiedliche Attribute wie Umfang, Höhe oder Anzahl der Ringe. Dem zu Folge erscheint bei jedem Objekt an dieser Stelle ein andere Dialog um die jeweilige Objekt-Attribute einzustellen. Diesen Schritt mit änhlichen Werten auch für die zweite Kugel wiederholen.

Image obj_material

Da graue Kugel für dieses Beispiel zu langweilig sind ist es sinnvoll die Material-Eigenschaften der beiden Kugeln festzulegen. Hier sollte man bei beiden Kugel nach belieben etwas an den Material-Eigenschaften ``spielen''.

Image obj_translation

Die Szene ohne weitere Veränderungen zu erzeugen würde bedeuten beide Kugeln auf der Null-Position stehen zu haben. Zwangsläufig würde also eine des Kugel die andere verdecken. Mit Hilfe des oben zu sehenden Dialogs lassen sich Objekte an eine andere Position ``bewegen'' (Translation). Für unser Beispiel ist es also nötig mindestens eine der Kugeln zu bewegen. Dabei ist vorsicht geboten, damit die Kugel nicht aus dem aktuellen Sichtfeld verschwindet.

Image obj_rotation

Der vollständiger Weise sei hier noch das Dialog-Fenster zum ``drehen'' (Rotation) der Objekte erwähnt. Normalerweise kann man so Objekte in einem bestimmten Winkel drehen und neigen. Jedoch ergibt es hier keinen Sinn eine Kugel zu drehen.

Image render1

Nach den ganzen Veränderungen ist es nun an der Zeit das vorläufige Ergebnis zu betrachten. Mit einem Mausklick auf den Render-Knopf im Werkzeugkasten wird ein OpenGl-Fenster geöffnet und das Ergebnis dargestellt. Es sieht schon recht annehmbar aus, kann aber durch Änderung der Lichtquellen noch verändert werden.

Image light_list

Zum Ändern der Lichtquellen nimmt man wieder das Eigenschaften-Fenster zur Hand und wählt den Lichtquellen-Reiter aus. Normalerweise ist hier am Anfang nur eine Lichtquelle vorhanden. Für dieses Beispiel ist es sinnvoll durch einen Mausklick auf den Licht hinzufügen-Knopf aus dem Werkzeugkasten eine weitere Lichtquelle hinzuzufügen. Die Beschreibung der Lichtquellen dient einzig dazu die Lichtquellen besser zu unterscheiden.

Image light_position

Durch einen Mausklick auf Eigenschaften öffnet sich ein Dialog-Fenster in dem sich verschiedene Einstellungen für die Lichtquelle vornehmen lassen. In diesem Beispiel genügt es die Position der Lichtquellen etwas zu verändern. Es ist zu beachten, dass bestimmte OpenGL-Standardwerte nur für die erste Lichtquelle gelten.

Image render2

Nachdem alle gewünschten Änderungen an den Lichtquellen vorgenommen worden sind, kann man erneut die Szene berechnen lassen. Wie am dem Bild gut zu erkennen, sind nun zwei Lichtquellen vorhanden. Die Spiegelungen ergeben sich jedoch nur bei bestimmten Material-Eigenschaften. Am Ende kann man noch durch einen Mausklick im Werkzeugkasten die Hintergrundfarbe und Fenstergröße einstellen.

Anwenderrelevante Fehlerinformationen

Da glDesigner und glInterpret sich den Code zur Syntaxanalyse der Szenen-Datei teilen gelten alle schon oben angesprochenen Probleme im Bezug auf die Syntaxanalyse auch hier.

Zum momentanen Zeitpunkt sind keine weiteren für den Anwender relevanten Fehler bekannt.

Ausblicke

Hier sollen einige Ausblicke gegeben werden, welche Funktionen und Eigenschaften in Zukunft noch in das Programm eingefügt werden könnten. Der nächste Schritt zu diesem Entwicklungsstand ist es die übrigen OpenGL-Objekte und GLUT Drahtgitter-Modelle in die Programme einzufügen. Darüber hinaus wäre es sehr sinnvoll bessere Möglichkeiten einzubauen sich in der Szene mit der Tastatur oder Maus zu bewegen. In der nächsten Version ist zusätzlich noch geplant die Verwendung von Texturen für Objekte zu ermöglichen. Ein weiterer sehr wichtiger Aspekt könnte das Erzeugen von C-Quellcode aus einer Szenen-Datei sein. Diese Möglichkeit würde das Schreiben eigener OpenGL-Anwendungen wesentlich vereinfachen.

Auf jeden Fall wir im nächsten Entwicklungsschritt das gesamte Projekt auf die Verwendung von automake und autoconf umgebaut. Das erleichtert der Kompiliervorgang wesentlich.

Referenz der Szenen-Datei

Beschreibung der gemeinsamen Elemente

<GLOBAL>
<BACKGROUND>
red = double [0.0]
green = double [0.0]
blue = double [0.0}
alpha = double [0.0]
</BACKGROUND>
<WINDOWSIZE>
x = int [300]
y = int [300]
</WINDOWSIZE>
</GLOBAL>

<OBJECT>
type = string
identifier = string
description = string
<TRANSLATION>
x = double [0.0]
y = double [0.0]
z = double [0.0]
</TRANSLATION>
<ROTATION>
angle = double [0.0]
x = double [0.0]
y = double [0.0]
z = double [0.0]
</ROTATION>
<AMBIENT>
face = string [FRONT] (FRONT, BACK, FRONT_AND_BACK)
red = double [0.2]
green = double [0.2]
blue = double [0.2}
alpha = double [1.0]
</AMBIENT>
<DIFFUSE>
face = string [FRONT] (FRONT, BACK, FRONT_AND_BACK)
red = double [0.8]
green = double [0.8]
blue = double [0.8}
alpha = double [1.0]
</DIFFUSE>
<SPECULAR>
face = string [FRONT] (FRONT, BACK, FRONT_AND_BACK)
red = double [0.0]
green = double [0.0]
blue = double [0.0}
alpha = double [1.0]
</SPECULAR>
<EMISSION>
face = string [FRONT] (FRONT, BACK, FRONT_AND_BACK)
red = double [0.0]
green = double [0.0]
blue = double [0.0}
alpha = double [1.0]
</EMISSION>
<SHININESS>
face = string [FRONT] (FRONT, BACK, FRONT_AND_BACK)
shine = double [0.0]
</SHININESS>
</OBJECT>

<LIGHT>
spot_exponent = double [0.0]
spot_cutoff = double [180.0]
constant_attenuation = double [1.0]
linear_attenuation = double [0.0]
quatratic_attenuation = double [0.0]
description = string
<AMBIENT>
red = double [0.0]
green = double [0.0]
blue = double [0.0}
alpha = double [1.0]
</AMBIENT>
<DIFFUSE>
red = double [0.0] (1.0 für LIGHT0)
green = double [0.0] (1.0 für LIGHT0)
blue = double [0.0] (1.0 für LIGHT0)
alpha = double [1.0]
</DIFFUSE>
<SPECULAR>
red = double [0.0] (1.0 für LIGHT0)
green = double [0.0] (1.0 für LIGHT0)
blue = double [0.0} (1.0 für LIGHT0)
alpha = double [1.0]
</SPECULAR>
<POSITION>
x = double [0.0]
y = double [0.0]
z = double [1.0]
w = double [0.0]
</POSITION>
<SPOT_DIRECTION>
x = double [0.0]
y = double [0.0]
z = double [-1.0]
</SPOT_DIRECTION>
</LIGHT>

Beschreibung der Objektabhängigen Schlüssel

sphere:
radius = double
slices = int
stacks = int

cone:
base = double
height = double
slices = int
stacks = int

cube:
size = double

torus:
innerRadius = double
outerRadius = double
nsides = int
rings = int

teapot:
size = double

dodecahedron:
no options

octahedron:
no ooptions

tetrahedron:
no options

icosahedron:
no options

GPL Lizenz

GNU GENERAL PUBLIC LICENSE

Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Jeder ist dazu berechtigt, diese Lizenz zu kopieren und wörtliche Kopien von diesem Dokument zu verteilen, Änderungen sind jedoch nicht erlaubt.

VORWORT

Die Lizenzen für die meiste Software sind daraufhin ausgelegt, die Weitergabe und die Möglichkeit der Änderung zu verhindern. Im Gegensatz dazu will die GNU General Public License (im folgenden mit ,,GPL`` bezeichnet) sicherstellen, daß freie Software von jedem benutzt und verändert werden kann - um sicherzustellen, daß die Software für alle Benutzer frei ist. Diese GPL gilt für den größten Teil der Software von der Free Software Foundation und für alle anderen Programme, deren Autoren ihre Arbeit unter die GPL gestellt haben (einige andere Programm der Free Software Foundation unterliegen stattdessen der GNU Library General Public License). Auch Sie können Ihre Programme unter diese License stellen.

Wenn wir von freier Software sprechen, meinen wir Freiheit, nicht Preis. Unsere General Public Licenses haben den Zweck, sicherzustellen, daß Sie die Freiheit haben, Kopien freier Software zu verbreiten (und etwas für diesen Service zu berechnen, wenn Sie wollen), daß Sie den Quellcode erhalten oder bekommen können, wenn Sie wollen, und daß Sie die Software ändern oder Teile davon in neuen freien Programmen verwenden können; weiterhin haben die Licences den Sinn, Sie darüber zu unterrichten, daß Sie dies alles tun dürfen.

Um Ihre Rechte zu schützen, müssen wir Einschränkungen machen, die es jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie aufzufordern, auf diese Rechte zu verzichten. Aus diesen Einschränkungen folgen bestimmte Verantwortlichkeiten für Sie, wenn Sie Kopien der Software verbreiten oder sie verändern.

Wenn Sie zum Beispiel Kopien eines solchen Programmes verbreiten, ob umsonst oder gegen Bezahlung, so müssen Sie den Empfängern alle Rechte gewähren, die Sie selbst haben. Sie müssen sicherstellen, daß auch sie den Quellcode erhalten oder erhalten können. Und Sie müssen ihnen diese Bedingungen zeigen, damit sie ihre Rechte kennen.

Wir schützen Ihre Rechte in zwei Schritten: (1) wir stellen die Software unter ein Copyright und (2) wir bieten Ihnen diese Lizenz an, die Ihnen die rechtliche Erlaubnis gibt, die Software zu kopieren, zu verbreiten und/oder zu modifizieren.

Um den Autor und uns selbst zu schützen, möchten wir sicherstellen, daß jeder versteht, daß es keine Garantie für diese freie Software gibt. Wenn die Software von jemand anderem modifiziert und weitergegeben wird, möchten wir, daß die Empfänger wissen, daß sie nicht das Original erhalten haben, damit Probleme, die von anderen hervorgerufen wurden, nicht die Reputation des ursprünglichen Autors schädigen.

Schließlich ist jedes freie Programm durch Software-Patente bedroht. Wir möchten die Gefahr ausschließen, daß Distributoren eines freien Programmes individuelle Patente erhalten mit dem Effekt, daß das Programm proprietär wird. Um dies zu verhindern, haben wir klar gemacht, daß jedes Patent die freie Benutzung von jedem erlaubt oder gar nicht lizenziert werden darf.

Die präzisen Begriffe und Bedingungen für das Kopieren, Distribuieren und Modifizieren folgen:

GNU GENERAL PUBLIC LICENSE

BEGRIFFE UND BEDINGUNGEN FÜR DAS KOPIEREN, VERTEILEN UND MODIFIZIEREN

0. Diese Lizenz gilt für jedes Programm oder jede andere Arbeit, die einen Vermerk des Copright-Inhabers enthält, der besagt, daß die Arbeit unter den Bestimmungen dieser General Public License verbreitet werden darf. Der Begriff ,,Programm`` steht im folgenden für jedes derartige Programm und für jede derartige Arbeit und der Begriff ,,auf dem Programm basierende Arbeit`` meint entweder das Programm oder jegliche abgeleitete Arbeit im Sinne der Copyright-Gesetze: Das bedeutet eine Arbeit, die das Programm oder einen Teil dessen enthält, entweder wörtlich oder mit Modifikationen und/oder übersetzt in eine andere Sprache. (Im folgenden wird die Übersetzung ohne Einschränkung als ,,Modifikation`` verstanden). Jeder Lizenznehmer wird im folgenden als ,,Sie`` angesprochen.

Andere Aktivitäten als Kopieren, Verteilen und Modifizieren werden nicht von dieser Lizenz abgedeckt; sie sind außerhalb ihres Gültigkeitsbereichs. Der Vorgang des Ablaufenlassens des Programmes ist nicht beschränkt, und die Ausgabe des Programmes unterliegt dieser Lizenz nur, wenn der Inhalt eine auf dem Programm basierende Arbeit darstellt (unabhängig davon, daß die Ausgabe durch ein Laufenlassen des Programmes erfolgte). Ob dies zutrifft, hängt davon ab, was das Programm tut.

1. Sie dürfen wörtliche Kopien vom Quellcode des Programms anfertigen und verbreiten, so wie Sie ihn erhalten haben, auf jedem Medium, vorausgesetzt, daß Sie mit jeder Kopie einen entsprechenden Copyright-Vermerk sowie einen Haftungsausschluss veröffentlichen; lassen Sie alle Vermerke, die sich auf diese Lizenz beziehen, intakt, sowie alle Vermerke, die auf die nicht vorhandene Garantie hinweisen; geben Sie weiterhin allen Empfängern des Programmes eine Kopie dieser Lizenz zusammen mit dem Programm.

Sie dürfen für den eigentlichen Kopiervorgang eine Gebühr verlangen und Sie dürfen auf Ihren Wunsch eine Garantie für das Programm gegen Entgelt anbieten.

2. Sie dürfen Ihre Kopie des Programmes oder eines Teils davon modifizieren, wodurch eine auf dem Programm basierende Arbeit entsteht; Sie dürfen derartige Modifikationen unter den Bestimmungen von Abschnitt 1 kopieren und verbreiten, vorausgesetzt, daß zusätzlich alle folgenden Bedingungen erfüllt werden:

a).
Sie müssen dafür Sorge tragen, daß die veränderten Dateien einen auffälligen Vermerk tragen, daß sie von Ihnen verändert wurden, sowie das Datum jeder Änderung.

b).
Sie müssen dafür sorgen, daß jede Arbeit, die Sie verbreiten oder veröffentlichen, und die ganz oder in Teilen von einem Programm oder Teilen davon abgeleitet ist, Dritten gegenüber als ganzes unter den Bedingungen dieser Lizenz ohne Lizenzgebühren zur Verfügung gestellt wird.

c).
Wenn das modifizierte Programm normalerweise beim Lauf interaktiv Kommandos einliest, müssen Sie dafür sorgen, daß es, wenn es auf gewöhnlichem Wege für solch eine interaktive Nutzung gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen geeigneten Copyright-Vermerk enthält sowie einen Hinweis, daß es keine Gewährleistung gibt (oder daß Sie Garantie leisten), und daß Benutzer das Programm unter diesen Bedingungen weiter verbreiten dürfen; der Benutzer muß auch darauf hingewiesen werden, wie er eine Kopie dieser Lizenz lesen kann. (Ausnahme: Wenn das Programm selbst interaktiv arbeitet, aber normalerweise keine derartige Meldung ausgibt, muß Ihre auf dem Programm basierende Arbeit auch keine solche Meldung ausgeben).

Diese Anforderungen betreffen die modifizierte Arbeit als ganzes. Wenn identifizierbare Abschnitte der Arbeit nicht von dem Programm abgeleitet sind und vernünftigerweise selbst als unabhängige und eigenständige Arbeiten betrachtet werden können, dann erstrecken sich diese Lizenz und ihre Begriffe nicht auf diese Abschnitte, wenn sie als eigenständige Arbeiten verbreitet werden. Wenn Sie jedoch die selben Abschnitte als Teil eines Ganzen verteilen, das eine auf dem Programm basierende Arbeit ist, dann muß die Verteilung des Ganzen nach den Bedingungen dieser Lizenz erfolgen, wobei die Rechte weiterer Lizenznehmer auf das gesamte Programm ausgedehnt werden, und damit auf jeden Teil des Ganzen, unabhängig davon, wer diesen Teil geschrieben hat.

Somit ist es nicht die Absicht dieses Abschnittes, Rechte für Arbeiten in Anspruch zu nehmen oder zu beschneiden, die komplett von Ihnen geschrieben wurden; stattdessen ist es die Absicht, die Rechte zur Kontrolle der Verteilung von Arbeiten, die auf anderen Programmen oder einer Zusammenstellung basieren, auszuüben.

Weiterhin führt ein einfaches Zusammenstellen einer anderen Arbeit, die nicht auf dem Programm basiert, zusammen mit dem Programm oder einer auf dem Programm basierenden Arbeit auf einem Speicher- oder Verteilmedium nicht dazu, daß die andere Arbeit den Regeln dieser Lizenz unterliegt.

3. Sie dürfen das Programm (oder eine darauf basierende Arbeit wie in Abschnitt 2) als object code oder in ausführbarer Form unter den Bedingungen von Abschnitt 1 und 2 kopieren und verteilen, vorausgesetzt, daß Sie eines der folgenden Dinge tun:

a).
Liefern Sie zusätzlich den kompletten zugehörigen maschinenlesbaren Quellcode auf einem Medium, das üblicherweise für den Datenaustausch verwendet wird, wobei die Verteilung unter den Bedingungen der Abschnitte 1 und 2 erfolgen muß; oder

b).
Liefern Sie das Programm mit einem schriftlichen Angebot, das mindestens drei Jahre lang gültig sein muß, daß Sie jedem Dritten eine komplette maschinenlesbare Kopie des Quellcodes zur Verfügung stellen, wobei keine weiteren Kosten als für den physikalischen Kopiervorgang anfallen dürfen und der Quellcode unter den Bedingungen der Abschnitte 1 und 2 auf einem Medium verteilt wird, das üblicherweise für den Datenaustausch verwendet wird; oder

c).
Liefern Sie das Programm mit der Information, die Sie erhalten haben, daß der korrespondierende Quellcode angeboten ist. (Diese Alternative gilt nur für nicht-kommerzielle Zwecke und nur, wenn Sie das Programm als object code oder in ausführbarer Form mit einem entsprechenden Angebot erhalten haben, in Einklang mit Unterabschnitt b oben).

Der ,,Quellcode einer Arbeit`` ist die Form der Arbeit, die vorzugsweise verwendet wird, um Modifikationen durchzuführen. Für ein ausführbares Programm bedeutet der Quellcode: Der Quellcode aller Module, die das Programm beinhaltet, zusätzlich alle zugehörigen Schnittstellen-Definitions- Dateien, sowie die Scripten, die die Kompilierung sowie die Installation des ausführbaren Programmes kontrollieren. Als spezielle Ausnahme jedoch muß der verteilte Quellcode nichts enthalten, was normalerweise (entweder als Quellcode oder in binärer Form) mit den Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.) verteilt wird, unter dem das Programm läuft, außer diese Komponente selbst begleitet das ausführbare Programm.

Wenn die Verteilung eines ausführbaren Programmes oder des object codes dadurch erfolgt, daß eine Stelle zur Verfügung gestellt wird, von der kopiert werden kann, so gilt das zur Verfügung stellen einer äquivalenten Stelle zum Kopieren des Quellcodes als Verteilen des Quellcodes, selbst wenn Dritte nicht dazu gezwungen sind, die Quellen zusammen mit dem object code zu kopieren.

4. Sie dürfen das Programm nicht kopieren, modifizieren, lizenzieren oder verbreiten außer ausdrücklich unter dieser Lizenz. Jeder anderweitige Versuch, das Programm zu kopieren, modifizieren, lizenzieren oder zu verbreiten ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz. Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte unter dieser Lizenz erhalten haben, nicht beendet, solange diese die Lizenz voll anerkennen und befolgen.

5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die Erlaubnis, das Programm oder von ihm abgeleitete Arbeiten zu modifizieren oder zu verbreiten. Diese Handlungen sind gesetzlich verboten, wenn Sie diese Lizenz nicht anerkennen. Wenn Sie also das Programm (oder eine darauf basierende Arbeit) modifizieren oder verbreiten, erklären Sie damit Ihr Einverständnis mit dieser Lizenz und allen ihren Begriffen und Bedingungen zum Kopieren, Verbreiten und Modifizieren des Programms oder einer darauf basierenden Arbeit.

6. Jedes Mal, wenn Sie das Programm (oder eine auf dem Programm basierende Arbeit) weitergeben, erhält der Empfänger automatisch vom originalen Lizenzgeber die Lizenz, das Programm gemäß dieser Begriffe und Bestimmungen zu kopieren, zu verbreiten und zu modifizieren. Sie dürfen keine weiteren Einschränkungen der Durchsetzung der hierin zugestandenen Rechte des Empfängers vornehmen. Sie sind nicht dafür verantwortlich, Dritte zur Anerkennung dieser Lizenz zu bewegen.

7. Wenn aufgrund eines Gerichtsurteils oder wegen patentrechtlicher Schwierigkeiten oder aus irgendwelchen anderen Gründen Umstände auftreten (ob durch Gerichtsbeschluß, Vergleich oder amderweitig), die den Bestimmungen in dieser Lizenz entgegensprechen, so befreien Sie diese Umstände nicht von den Bestimmungen in dieser Lizenz. Wenn Sie das Programm nicht unter gleichzeitiger Beachtung der Bedingungen in dieser Lizenz und Ihrer anderweitigen Verpflichtungen verbreiten können, dann können Sie als Folge das Programm überhaupt nicht verbreiten. Wenn zum Beispiel ein Patent nicht die gebührenfreie Weiterverbreitung des Programmes durch diejenigen erlaubt, die das Programm direkt oder indirekt von Ihnen erhalten haben, dann besteht der einzige Weg, das Patent und diese Lizenz zu befolgen, darin, ganz auf die Verbreitung des Programmes zu verzichten.

Wenn irgendein Teil dieses Abschnittes für ungültig oder unter irgendwelchen bestimmten Umständen für undurchsetzbar gehalten wird, soll die Grundaussage dieses Abschnittes gelten; der ganze Abschnitt soll unter den übrigen Umständen Gültigkeit haben.

Es ist nicht der Zweck dieses Abschnittes, Sie dazu zu bringen, irgendwelche Patente oder andere Rechtsgüter anzufechten oder die Gültigkeit irgendwelcher solcher Güter zu bestreiten; dieser Abschnitt hat den einzigen Zweck, die Integrität des Verbreitungssystems der freien Software zu schützen, das durch praktizierte öffentliche Lizenzen verwirklicht wird. Viele Leute haben großzügige Beiträge zum weiten Bereich der mit diesem System verbreiteten Software gemacht im Vertrauen auf die konsistente Anwendung dieses Systems; es liegt am Autor/Geber zu entscheiden, ob er die Software mittels irgendeines anderen Systems verbreiten will und ein Lizenznehmer hat auf diese Entscheidung keinen Einfluß.

Dieser Abschnitt ist dazu gedacht, klar zu machen, was als Konsequenz aus dem Rest dieser Lizenz betrachtet wird.

8. Wenn die Verbreitung und/oder die Benutzung des Programmes in bestimmten Staaten entweder durch Patente oder durch Copyright-geschützte Schnittstellen eingeschränkt ist, kann der originale Copyright-Inhaber, der das Programm unter diese Lizenz gestellt hat, eine explizite geographische Begrenzung der Verbreitung angeben, indem diese Staaten ausgeschlossen werden, so daß die Verbreitung nur in und unter den Staaten erlaubt ist, die nicht ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die Beschränkung, als wäre sie in diesem Text niedergeschrieben.

9. Die Free Software Foundation kann von Zeit zu Zeit überarbeitete und/oder neue Versionen der General Public License veröffentlichen. Solche neuen Versionen werden vom Geist her der gegenwärtigen entsprechen, können aber im Detail abweichen, um neuen Problemen und Anforderungen gerecht zu werden.

Jede Version hat eine eindeutig unterscheidbare Versionsnummer. Wenn das Programm angibt, welche Version auf es zutrifft und ,,any later version``, so haben Sie die Wahl, entweder den Begriffen und Bedingungen dieser Version zu folgen oder denen jeder beliebigen späteren Version, die von der Free Software Foundation veröffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, können Sie eine beliebige Version wählen, die je von der Free Software Foundation veröffentlicht wurde.

10. Wenn Sie den Wunsch haben, Teile des Programmes in anderen freien Programmen zu verwenden, deren Bedingungen für das Verbreiten anders sind, schreiben Sie an den Autor, um ihn um die Erlaubnis zu bitten. Für Software, die unter dem Copyright der Free Software Foundation steht, schreiben Sie an die Free Software Foundation; wir machen zu diesem Zweck manchmal Ausnahmen. Unsere Entscheidung wird von folgenden zwei Zielen geleitet: Dem Erhalten des freien Status von allen abgeleiteten Arbeiten unserer freien Software und der Förderung der Verbreitung und Nutzung von Software generell.

KEINE GEWÄHRLEISTUNG

11. Da das Programm ohne jegliche Kosten lizenziert wird, besteht keinerlei Gewährleistung für das Programm bis zu dem Maß, wie es durch geltende Gesetze zugestanden wird. Außer wenn anderweitig schriftlich bestätigt, stellen die Copyright-Inhaber und/oder Dritte das Programm so zur Verfügung, ,,wie es ist``, ohne irgendeine Gewährleistung, weder ausdrücklich noch implizit, einschließlich, aber nicht begrenzt auf, die Tauglichkeit und Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit des Programmes liegt bei Ihnen. Sollte das Programm fehlerhaft sein, übernehmen Sie die Kosten für notwendigen Service, Reparatur oder Korrektur.

12. In keinem Fall, außer durch geltendes Recht gefordert oder schriftlich zugesichert, ist irgendein Copyright-Inhaber oder irgendein Dritter, der das Programm wie oben erlaubt modifiziert oder verbreitet hat, Ihnen gegenüber für irgendwelche Schäden haftbar, einschließlich jeglicher genereller, spezieller, zufälliger oder Folgeschäden, die aus der Benutzung des Programmes oder der Unbenutzbarkeit des Programmes folgen (einschließlich, aber nicht beschränkt auf, Datenverluste, fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen getragen werden müssen, oder einen Fehler des Programms, mit irgeneinem anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter über die Möglichkeit solcher Schäden unterrichtet worden war.

ENDE DER BEGRIFFE UND BESTIMMUNGEN

Anhang: Wie wenden Sie diese Begriffe auf Ihre neuen Programme an

Wenn Sie ein neues Programm entwickeln und wollen, daß es für größtmöglichen Nutzen für die Allgemeinheit ist, dann ist der beste Weg, dies zu erreichen, es zu freier Software zu machen, die jeder unter diesen Bestimmungen weiterverbreiten und verändern kann.

Um dies zu erreichen, fügen Sie die folgenden Anmerkungen zu Ihrem Programm hinzu. Es ist am sichersten, sie an den Anfang einer jeden Quelldatei zu stellen, um den Gewährleistungsausschluß möglichst deutlich darzustellen; außerdem sollte jede Datei mindestens eine ,,Copyright``-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die vollständige Lizenz gefunden werden kann.

<eine Zeile mit dem Programmnamen und einer kurzen Beschreibung > Copyright (C) <year> <Name des Autors >

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Fügen Sie auch eine kurze Notiz hinzu, wie Sie postalisch (normal und per Email) erreichbar sind.

Wenn Ihr Programm interaktiv ist, sorgen Sie dafür, daß es nach dem Start einen kurzen Vermerk ausgibt:

Gnomovision version 69, Copyright (C) <year> name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.

Die hypothetischen Kommandos `show w' und `show c' sollten die entsprechenden Teile der GPL anzeigen. Natürlich können die von Ihnen verwendeten Kommandos anders heißen als `show w' und `show c'; es könnten auch einfach Mausklicks sein - was immer am besten in Ihr Programm paßt.

Wenn nötig, sollten Sie auch Ihren Arbeitgeber (wenn Sie als Programmierer arbeiten) oder Ihre Schule dazu bringen, einen Copyright-Verzicht für das Programm zu unterschreiben. Hier ist ein Beispiel mit geänderten Namen:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon >, 1 April 1989 Ty Coon, President of Vice

Diese General Public License erlaubt es nicht, das Programm in proprietäre Programme einzubinden. Wenn Ihr Programm eine Bibliotheksfunktion ist, kann es sinnvoller sein, das Binden proprietärer Programme mit dieser Bibliothek zu gestatten. Wenn Sie dies tun wollen, sollten Sie die GNU Library General Public License anstelle dieser Lizenz verwenden.

Über dieses Dokument ...

Implementierung eines Tutorials für OpenGL-Objekte (glut) mit Interpreter

Benutzerdokumentation

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -local_icons user_doc.tex

The translation was initiated by Andreas Volz on 2003-06-08


next_inactive up previous
Andreas Volz 2003-06-08