Es gibt viele Dinge, aus denen Sie lernen können. Hier ist meine Meinung zu jedem Thema aus der Perspektive eines OpenGL-Neulings.
OpenGL-Beispiele
Es gibt viele Beispielcodes, die Sie lesen können. Die Beispiele von G-truc sind ziemlich umfangreich und decken viele erweiterte Funktionen ab.
Wenn Sie jedoch ein Anfänger sind , ist das Lernen aus Beispielen eine schreckliche Möglichkeit, um zu lernen. Das Lesen von Code, den Sie nicht wirklich verstehen, bringt Ihnen nicht bei, warum er funktioniert. In der Tat besagt der Text auf der oben verlinkten Seite ausdrücklich und zu Recht, dass die Beispiele nicht für Anfänger gedacht sind.
Aus nacktem Quellcode zu lernen, ist keine leichte Sache, es sei denn, es ist stark kommentiert (an welchem Punkt es sich um ein Tutorial handelt). Der Versuch, dies zu tun, fördert das Programmieren im Frachtkultstil und das Kopieren und Einfügen. Es ist sehr einfach, sich davon zu überzeugen, dass Sie verstehen, wie etwas funktioniert, wenn Sie nur Code von einem Ort zum anderen kopieren. Möglicherweise können Sie Dinge mischen und aufeinander abstimmen, aber es ist schwierig, ein wirkliches Verständnis zu erzielen , wenn Sie nicht über das richtige Lehrmaterial verfügen.
OpenGL-Bücher
Es gibt eine ganze Reihe von tatsächlich erhältlichen Büchern für die OpenGL-Entwicklung. Ich werde meine Gedanken über die beiden größten hier abdecken.
OpenGL Redbook
Dieser ist aus rein praktischer Sicht etwas problematisch. Siehe, die 7. Ausgabe behandelt GL 3.0 und 3.1. Welches ist ziemlich alt. Seitdem wurden OpenGL viele nützliche Funktionen hinzugefügt, die die Art und Weise, wie Sie Dinge schreiben, ändern. Und nicht alle von ihnen sind Hardwarefunktionen.
Die 8. Ausgabe kommt "bald" und wird 4.1 behandeln. Es gibt kein Wort darüber, ob es sich um alte Sachen mit festen Funktionen handelt.
Ich würde sagen, dieses Buch ist in Ordnung. Das größte Problem dabei ist die Organisation von Informationen. Es ist eher ein umfassendes Nachschlagewerk als ein Lernbuch. Hier ist was ich meine.
Eines der wichtigsten Dinge, die man beim Unterrichten tun sollte, ist, den Schüler nicht mit unwichtigen Informationen zu überladen. Aber das Redbook macht genau das. Beim Einbringen von Material wird viel Material eingebracht . Vieles davon ist für die anstehende Aufgabe überflüssig.
Worüber Sie sprechen und wann Sie darüber sprechen, ist entscheidend, um Ihr Buch zu einer guten Lernressource zu machen. Das Redbook speichert Informationen erst zu einem angemesseneren Zeitpunkt. Wenn es um das Zeichnen von Dreiecken und Primitiven geht, geht es um alles auf einmal. Es deckt jede Option, jede Funktion, jeden Parameter usw. ab.
Das ist einfach keine gute Organisation von Informationen.
OpenGL Superbible
Die fünfte Ausgabe dieses Buches behandelt nur den Kern GL 3.x, also keine feste Funktion.
Die allgemeine Organisation des Buches ist jedoch mehr oder weniger identisch mit der Organisation der vierten Ausgabe. Dies scheint unmöglich zu sein, da die 4. Ausgabe eine feste Funktion verwendete und erst viel später Shader einführte.
Die Art und Weise, wie dies erreicht wurde, ist meine Hauptbeschwerde über das Buch. Im Wesentlichen baute der Autor eine Bibliothek, die eine Form von OpenGL mit festen Funktionen implementiert. Es umfasst VAOs, Pufferobjekte, Shader und verschiedene andere Dinge, sodass er Objekte, Matrixmathematik und Texturen zeichnen kann, ohne über Dinge wie die Funktionsweise der GL-Pipeline im Detail sprechen zu müssen.
Durch das Verbergen all dieser Details wird das Material leichter verdaulich. Aber Sie werden oft Leute sehen, die sich vom Superbible entfernen, ohne zu wissen, wie man tatsächlich ohne die Bibliothek funktioniert. Sie verstehen nicht wirklich, wie Shader sich mit Pufferobjekten verbinden, wie Daten die Pipeline hinauffließen usw.
Es ist ein brauchbares Buch, mehr als das Redbook. Wenn alles andere fehlschlägt, erledigt es den Job. Aber ich denke, es könnte besser sein.
Nach Ansicht einiger Rezensenten scheinen bestimmte nützliche Informationen, wie das Packen von Attributdaten unter Verwendung normalisierter Werte und dergleichen, zu fehlen.
OpenGL Online-Materialien
Es gibt viele Online-Materialien, aus denen man lernen kann.
NeHes Tutorials
Die Tutorials von NeHe sind , wie bereits erwähnt, äußerst veraltet. Sie konzentrieren sich auf OpenGL mit festen Funktionen. Es wird oft gesagt, dass es einfach ist, GL mit festen Funktionen zu lernen, was zutrifft. Das macht es aber nicht zu einer guten Idee.
Es ist schwer zu verstehen, wie die Pipeline mit festen Funktionen wirklich funktioniert. Ich würde sogar sagen, dass es schwieriger ist, Shader zu lernen. Sobald Sie es bekommen, sind Shader einfach. Das Verstehen der Feinheiten von Texturen, Combinern und so weiter ist sehr schwierig und erfordert häufige Besuche von Referenzdokumenten, um sicherzustellen, dass alles richtig eingerichtet ist. Selbst wenn Sie alles richtig verstehen, ist es leicht, einen kleinen Fehler zu machen, der dazu führt, dass alles kaputt geht.
Der Unterschied besteht darin, dass Sie feste Funktionen ausführen können, ohne sie zu verstehen. Dies fördert die Frachtkultprogrammierung. Es macht es möglich, etwas auf den Bildschirm zu bringen, ohne wirklich zu wissen, was man tut. Drüben in den OpenGL.org-Foren sehen wir ständig Fragen zu Details rund um feste Funktionen, von Leuten, die nicht wissen, wie gluLookAt funktioniert, über Schwierigkeiten mit der Beleuchtung bis zu Leuten, die versuchen, einen bestimmten Effekt für die Arbeit mit der Texturumgebung zu erzielen.
Also nein, ich denke nicht, dass NeHe eine gute Möglichkeit ist, OpenGL zu lernen.
Der obige Kommentar kann für alle nicht auf Shadern basierenden Tutorials wie Swiftless , Lighthouse usw. verwendet werden.
Wikibooks OpenGL-Programmierung
Das Wikibook OpenGL Programming ist wahrscheinlich das moderne Äquivalent zu NeHe. Sie deckt die GL-Version 2.1 ab, da sie für mobile Plattformen relevant bleiben soll. Wenn dir das wichtig ist, dann schau auf jeden Fall hier.
Das andere Problem bei NeHe und damit bei diesem Wikibook ist der große Fokus auf Quellcode. Das Verhältnis von Text zu Code ist sehr klein. Es gibt viel Code, aber der Text erklärt nicht wirklich, wie das alles funktioniert.
Schauen Sie sich als Beispiel das Ende von Tutorial 2 an. Es führt in das Mischen ein. Es heißt nicht, wie das Mischen funktioniert. Es sagt nicht, was es glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
eigentlich bedeutet oder tut. Es heißt nur: "Hier ist ein Code, der die Dinge transparent macht."
Das ist nicht die beste Lernumgebung.
Unvollständige Tutorials
Swiftless verfügt über eine Reihe von OpenGL 4.x-Tutorials . Durian Software hat auch einige Shader-basierte OpenGL-Tutorials . Und es gibt die "OpenGLBook.com" -Anleitungen .
Allen gemeinsam ist, dass sie unvollständig und verlassen sind. Sie haben alle ungefähr 4-5 Tutorials in und wurden dann fallen gelassen. Keiner von ihnen erreichte Texturierung, Beleuchtung oder ähnliches. Nun, Durian hat die Texturierung getroffen, aber nicht die Beleuchtung.
Man kann viel von ihnen sehen, aber es fehlt auch viel.
Schamlose Eigenwerbung
Es wäre ein schrecklicher Interessenkonflikt, meine eigenen Tutorials für moderne 3D-Grafiken zu lesen . Stattdessen werde ich mich ausführlich mit der Organisation befassen und erklären, warum sie meiner Meinung nach gut sind.
Oh und ja, ich arbeite an Tutorial 17. Das Projekt ist nicht tot.
In den ersten drei Kapiteln geht es wirklich darum zu lernen, wie die OpenGL-Pipeline funktioniert. Das Superbible schlug fehl, weil es versuchte, Details zu verbergen. Stattdessen versuche ich, diese Details wirklich, wirklich gut zu erklären. Wiederholt. Die Einleitung erklärt die Pipeline im Klartext. Das erste Tutorial erklärt es mit Codebegleitung. Und das zweite Tutorial besucht es noch mehr.
Von dort gehe ich natürlich zur Positionierung von Objekten über. Dadurch werden Uniformen eingeführt, aber ich wollte nicht gleichzeitig Uniformen und perspektivische Projektionen verwenden. Also habe ich die beiden Konzepte getrennt. Nach der Projektion schien die Tiefenpufferung ein vernünftiger nächster Schritt zu sein, gefolgt von der Funktionsweise von Transformationen und Matrizen. Danach Kameras. Rotation mit Quaternionen war eine späte Ergänzung, aber ich halte es für eine wichtige Sache, über die der angehende Grafikprogrammierer sprechen musste.
Die Licht-Tutorials bauen wieder aufeinander auf. Diffuse, dann fragmentarische, dann spiegelnde Beleuchtung. Der dynamische Bereich war eine interessante Wahl. Das meiste Einführungsmaterial versucht, sich davon fernzuhalten, aber ich begrüße es. Sie sind heutzutage kein Grafikprogrammierer, wenn Sie glauben, dass die Lichtintensität immer im Bereich [0, 1] liegt. Und Sie sind heutzutage kein Grafikprogrammierer, wenn Sie nicht wissen, wie eine lineare Farbpipeline verwaltet wird.
Das letzte Mal bei der Beleuchtung von Betrügern war ein seltsames. Ich versuche, Tutorials zu entwerfen, die Probleme lösen und nicht nur einige OpenGL-Funktionen zeigen, insbesondere im weiteren Verlauf des Buches. So viel von meinem Tutorial-Design ist darauf zurückzuführen, dass ich Wege gefunden habe, über bestimmte Themen zu sprechen und sie dennoch zu echten Problemen zu machen. "Wir lernen jetzt X." Geometrie-Shader sind eine schwierige Aufgabe, da sie nicht wirklich viele Probleme lösen.
Betrüger stellten ein Problem dar, für dessen Lösung die GS tatsächlich nützlich waren. Außerdem konnte ich über andere, weniger genutzte Dinge wie das discard
Ändern der Tiefe eines Fragments sprechen . Und es zeigt wirklich die Macht der Shader: Sie können ein flaches Quadrat zu einer Kugel machen.
Interessant sind auch die Texturierungs-Tutorials. Einer der Gründe, warum ich es aufgeschoben habe, über diffuse Farbtexturen zu sprechen, war, eine Weile über sRGB-Texturen zu reden. Auf diese Weise konnte ich über die grundlegenden Probleme mit Texturen (Laden von Daten, Versetzen in Shader, Filtern, Klemmen usw.) sprechen, ohne mich mit linearen Problemen befassen zu müssen. Dann könnte ich ein ganzes Tutorial nur zu diesem Thema ausgeben. Dadurch konnte ich wirklich betonen, wie wichtig die Aufrechterhaltung einer linearen Farbpipeline ist.
Es ist eines meiner Lieblingsstücke.