Moderne OpenGL-Programmierung
Vor zehn oder fünfzehn Jahren war die OpenGL-Welt noch bodenständig und auch für Anfänger schnell und einfach zu erschließen. Vor einigen Jahren hat die Khronos Group, die das Projekt managed, viele Dinge als "deprecated" markiert und aus dem eigentlichen Bibliothekskern entfernt. Über einen Kompatibiliätsmodus sind die überholten Funktionen zwar noch verfügbar (als Erweiterung), aber es wird allgmein empfohlen, nicht mehr darauf zuzugreifen. Sowohl Neueinsteiger als auch Programmierer, die mit den alten Funktionen vertraut waren (wie ich), stehen nun vor der Aufgabe, sich auf einer viel elementareren Ebene in die ohnehin nicht triviale Materie einzuarbeiten.
Um es gleich direkt zu sagen: Es ist schon ein harter Brocken. Während man beim alten ("unmodernen") Umgang mit OpenGL nur wenige Tage Einarbeitung benötigte, sind es nun etliche Wochen. Der Grund für die Konzentration auf den elementaren Funktionskern ist wohl der, dass dadurch mehr Flexibilität und im Endeffekt mehr Performance erzielt wird. Letztlich geht es wohl auch darum, das Microsoft-Produkt DirectX nicht davonziehen zu lassen. Mir kommt es ein wenig so vor, als würde ein Autohersteller die Autos grundsätzlich nur noch ohne Räder ausliefern. Der Käufer kann dann ganz flexiblel damit umgehen: Er kann selbst Räder konstuieren, aber auch Kufen, wenn er das Gefährt in der Antarktis einsetzen will. Und so steht man erst mal vor der Herausforderung, 4 Räder herzustellen und an den Autorumpf anzupassen - eine mühselige Angelegenheit.
Das Beispiel ist natürlich völlig übertrieben, denn wenn man sich mit etwas Beharrlichkeit um Verständnis und Übersicht bemüht, dann verflüchtigen sich die anfangs unüberwindlich erscheinenden Probleme, und man bekommt mehr und mehr das Gefühl, nun ein überaus mächtiges (und verstandenes!) Werkzeug in der Hand zu halten, mit einem gewaltigen Potential an Möglichkeiten, die bei Bedarf noch erschlossen werden können. Wichtig in der Lernphase ist es, gute Unterstützung zu erhalten. Es gibt viel Literatur und viele Tutorials, die sich mit der modernen OpenGL-Programmierung befassen. Eine Hilfestellung, die in jeder Hinsicht zufriedenstellend ist, habe ich allerdings noch nicht gefunden. Wie oft bei sehr komplexen Problemstellungen ist man auf mehrere Hilfequellen angewiesen, die sich irgenwie ergänzen müssen. Insofern macht es keinen Sinn, an dieser Stelle alles aufzuführen, was ich bemüht habe. Ich möchte stattdessen nur eine Quelle herausgreifen, die für mich persönlich besonders hilfreich war und dafür gesorgt hat, dass ich einige fest verankerte Stolpersteine beiseite räumen konnte. Es handelt sich um das Buch "Anton's OpenGL 4 Tutorials" von Anton Gerdelan.
Anton Gerdelan ist Softwareentwickler und lehrt an der Trinity University in Dublin [1]. Bei seinen Ausführungen hat er seine Studenten im Blick; er kennt deren Probleme und weiß um die Fallstricke, über die besonders Anfänger immer wieder stolpern. So bemängelt er vor allem die abgehobene Art, wie gestandene Mathematiker die Phänomene beschreiben. Typisch seine einleitenden Worte zum Kapitel über Quaternionen. Das sind Datentypen, die zugestandenermaßen nur schwer zu begreifen sind (da nicht vorstellbar). Ich zitiere:
The first problem that I find with quaternions, is that they are usually explained by hard-core mathematicians, who have a total inability (as a species) of conveying a small amount of information in a simple way, and tend to start with extended proofs (which we don't usually care about), and end there without any human-readable explanation (yes, I just implied that mathematicians are inhuman).
So wie Gerdelan sich von dem abgehoben-abstrakten Stil vieler "Experten" distanziert, so achtet er immer wieder auf Verständlichkeit, ohne jedoch in bedenkliche Vereinfachungen zu verfallen. Für mich jedenfalls war und ist das Buch eine wertvolle Hilfe. Überhaupt, unabhängig vom speziellen Fokus seines Buches, treffen sich viele seiner Ansichten mit den meinigen:
- Gerdelan verwendet für seine Beispiele C-Code anstatt C++-Code. Es war schon immer meine Ansicht, dass großartig anglegte Klassen in Bibliotheken und Codebeispielen nichts zu suchen haben. Es geht dabei nur um die Funktionalität; das Strukturieren in Form von Klassen ist Aufgabe des jeweiligen Programmierers, der sich dabei an seinem individuellen Projektziel orientieren kann und muss.
- Gerdelan unterliegt nicht der Versuchung, den Beispielcode mit Code aus allen möglichen Fremdbibliotheken "anzureichern", um das Nachvollziehen zu erleichtern. In Wirklichkeit erschwert solcher Ballast nur das Lernen. Bei Gerdelan ist alles linear und elementar in der Main-Funktion untergebracht. Dinge, die im jeweiligen Kapitel nicht mehr neu sind, werden in gl_utils ausgelagert.
- Gerdelan empfiehlt dringend, sich die Zusammenhänge durch Skizzen u.ä. zu veranschaulichen, und er geht mit gutem Beispiel voran. In seinem Buch finden sich an etlichen Stellen handgezeichnete Übersichten und Schemata. So etwas lebt und schafft Unmittelbarkeit.
- Überall dort, wo Gerdelan bei seinen Studenten Fehlerursachen und Verständnisprobleme festgestellt hat, geht er besonders gründlich und kleinschrittig vor. Das hilft.
Natürlich gibt es auch an Anton's Tutorials einiges zu kritisieren. Aber ich will hier keine Rezension abgeben, sondern nur eine für mich hilfreiche Unterstützung weiterempfehlen.
Ich wünsche allen Lesern viel Erfolg beim Erlernen von OpenGL, auf welche Weise auch immer.
[1] Interessanterweise hat auch der "Erfinder" der Quaternionen, Sir William Rowan Hamilton, an der Trintity University gewirkt.