Gute Ressourcen zum Erlernen von modernem OpenGL (3.0 oder neuer)? [geschlossen]

73

Ich stolpere über die Suche nach einer guten Ressource, um mit OpenGL (3.0 oder höher) zu beginnen. Nun, ich habe viele Bücher gefunden, aber keines davon kann als eine gute Ressource angesehen werden!

Hier zwei Beispiele:

OpenGL Programming Guide (7. Ausgabe) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Dies ist VOLL von veraltetem Material! Fast jedes Kapitel beginnt mit einer Notiz darüber.

OpenGL Superbible (5. Ausgabe) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 In diesem Buch wird eine vom Autor erstellte Bibliothek verwendet, um die Hauptargumente zu erläutern und zu verbergen, was Sie lernen möchten. Ich möchte nicht lernen, wie man Ihre Bibliothek benutzt! Ich möchte OpenGL lernen!

Ich hoffe, Sie verstehen, dass dies nicht die gleiche Frage ist wie "Hey, ich kann Google nicht verwenden ... sagen Sie mir, wie man OpenGL lernt". Ich habe gerade eine umfassende Suche abgeschlossen, kann aber keine gute und vollständige Ressource zum Erlernen der "neuen" OpenGL finden, wobei veraltete Themen vermieden werden.

Kann mich jemand in die richtige Richtung lenken? Ich kenne C ++ und habe 10 Jahre Erfahrung in der Entwicklung ... wo finde ich eine gute Ressource ?! Ich möchte Zeit damit verbringen und ich möchte tief lernen.

MatterGoal
quelle

Antworten:

69

Ich stimme den obigen Büchern mit ein paar Anmerkungen zu:

  • Die 8. OpenGL-Programmieranleitung ist erschienen und wurde für modernes OpenGL 4.3 überarbeitet.

  • Die SuperBible 5th Edition bietet Ihnen zwar eine Krückenbibliothek zum Einstieg, aber wenn Sie das Buch durcharbeiten, implementieren Sie die Funktionalität dieser Bibliothek erneut, sodass Sie am Ende des Kurses bereits über umfassende Kenntnisse verfügen sollten. Ich empfehle außerdem dringend, OpenGL-Inhalte in etwas zu packen, wenn Sie eine objektorientierte Sprache verwenden. Ich arbeite zum Spaß an meiner eigenen Bibliothek, was der richtige Weg zu sein scheint. Ich implementiere sie selbst. Ich verstehe alle Vor- und Nachteile und muss nur die Teile einfügen, die ich tatsächlich benutze. Außerdem können Sie einige Dinge, wie das Senden von Daten an Shader, abstrahieren (ist nicht viel schöner als shinyMaterial.setColor (Red)). Auf diese Weise können Sie auch einige Dinge zurückportieren, indem Sie ältere Alternativen bereitstellen. Es gibt auch Oglplus .

Das Hauptproblem beim Erlernen von modernem 'Kern'-OpenGL besteht darin, dass Sie Folgendes verstehen müssen, um eine grundlegende Pipeline zum Laufen zu bringen, selbst wenn Sie nur einen Würfel zeichnen möchten:

  • Matrixoperationen (verwenden Sie GLM, wenn Sie mit C ++ arbeiten, benötigen Sie hier auch eine Version des MatrixStack OpenGL Unofficial SDK , oder meine einfache hier .)
  • GLSL-Shader-Programmierung.
  • Binden von Daten an Shader und Vertex-Pufferobjekte. Wenn Sie nur echtes Kernprofil lernen wollten, mussten alle gleichzeitig implementiert werden, und wenn etwas kaputt ist, sehen Sie einfach nichts und haben fast keine Ahnung, wo es schief gelaufen ist. Dies gilt auch nicht für grundlegende Beleuchtungsaufgaben (bei denen Sie zusätzlich zur Programmiersprache die Schattierungsalgorithmen erlernen müssen).

Sie müssen jedoch nicht mit dem Kernprofil im Deepend beginnen. Verwenden Sie zu Beginn einige der veralteten Funktionen, die von fast allem noch unterstützt werden, und modernisieren Sie sie dann.

Ein weiteres Problem ist, dass sich "modernes" OpenGL wirklich auf drei Dinge beziehen kann:

  • Die erste ist die programmierbare Shader-Pipeline im Gegensatz zur festen Funktionspipeline. Die wichtigsten 'modernen' Techniken waren möglich, seit OpenGL 2.0 im Jahr 2004 veröffentlicht wurde, als Shader eingeführt wurden (die Tutorials wurden nur nicht aktualisiert). Außerdem verfügte 1.5 über Vertex Buffer Objects, die ein weiterer Eckpfeiler des modernen OpenGL sind. Ein Problem ist, dass OpenGL-Entwickler selbst heute noch nicht einmal in der Lage sind, all das zu nutzen. Es gibt viele beschissene Netbooks mit Intel-Chipsätzen, die nur OpenGL 1.5 unterstützen, und Handys wie ältere iPhones / Android-Geräte, die nur diese unterstützen OpenGL ES 1.1. Der einzige wirkliche Unterschied zwischen diesem Zeug in OpenGL 2.0 und OpenGL 3.x / 4.x ist, dass es jetzt für das Kernprofil obligatorisch ist.

  • Modernes OpenGL könnte auch auf die neuen Inhalte in 3.x, 4.x verweisen. Dinge wie Vertex-Array-Objekte , Framebuffer-Objekte , Uniform-Buffer-Objekte / std140 , Layout-Qualifikatoren , GLSL-Subroutinenund so weiter. Viele von denen, die ich gefunden habe, machen es viel schöner, damit zu programmieren. Sie können auch subtil Ihre gesamten Motorleitungen ändern. Sie sind auch Dinge, die Sie mit ein wenig Aufwand zurückportieren können, indem Sie Hilfsfunktionen usw. erstellen. (Schreiben Sie beispielsweise ein generisches Shader-Manager-Objekt, mit dem Sie Uniformen festlegen können, wenn UBOs unterstützt werden.) Verwalten Sie andernfalls das manuelle Hochladen der Werte in Shader , vielleicht ein bisschen Shader rewriting, um es zu automatisieren). Dieses Zeug läuft nur auf neuen Grafikkarten. Netbooks, die es unterstützen, oder Videospielkonsolen der aktuellen Generation werden nicht angezeigt (sie verwenden ihre eigene Teilmenge von OpenGL, die OpenGL ES ähnelt). Die neuesten OSX haben nur 3.

  • Das ultramoderne nextgen OpenGL. OpenGL 4.3 wurde gerade veröffentlicht. Es enthält Compute-Shader, glMultiDrawElementsIndirect und Shader-Speicherpuffer. Dies ermöglicht eine grundlegend andere Pipeline, in der Sie alle Scheitelpunktdaten auf die GPU hochladen und dann mithilfe von Compute-Shadern berechnen, was gezeichnet werden soll, anstatt dies in Ihrem Programm zu tun. Leider ist dies sehr neu, so dass ich keine anständigen Tutorials dazu kenne. Schauen Sie sich den OpenGL 4.3-Test an, der einen Überblick darüber gibt, wie dies funktioniert. Als brandneues Produkt wird es zu diesem Zeitpunkt nirgendwo unterstützt (es sei denn, Sie verwenden eine neuere NVIDIA-Karte mit Betatreibern). Möglicherweise können Sie OpenCL / CUDA verwenden, um einige davon zu implementieren.

Ich würde glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix und so weiter überspringen. Beginnen Sie stattdessen mit dem Lernen von Vertex-Pufferobjekten ohne Shader. Versuchen Sie an dieser Stelle nicht 3D, sondern nur ein flaches weißes Dreieck, damit Sie nicht mit 3D-Operationen unter Verwendung von Matrizen arbeiten müssen (Sie müssen ja bald lernen, sie an Shader zu binden es macht keinen Sinn, auf alte Weise zu lernen). Als nächstes müssen Sie in den Shadern ändern, wie Ihre Vertex-Pufferobjekte gebunden werden, da Sie nun Vertex-Attribute verwenden möchten. Erfahren Sie, wie Sie ihnen Eigenschaften über Uniformen mitteilen. Lernen Sie dann die Matrixoperationen mit GLM, binden Sie die Matrizen an die Shader und bringen Sie 3D in Schwung. Sobald Sie das getan haben, ist es im Grunde nur fortgeschrittene Dinge wie Texturierung zu lernen,

Einige allgemeine moderne Online-OpenGL-Tutorials, die sich mit der Shader-Programmierpipeline befassen, von denen die meisten mit OpenGL 2.0+ funktionieren:

Für andere allgemeine Lernressourcen. OpenGL ES könnte ein guter Ausgangspunkt sein. OpenGL ES hat alle veralteten Inhalte entfernt. OpenGL 4.1 ist vollständig mit OpenGL ES kompatibel. Daher sollte es möglich sein, ein OpenGL ES-Programm zu verwenden und in OpenGL 4.1 auszuführen. Und die Grundprinzipien sind für beide gleich.

Einige Dinge zu beachten ist, dass OpenGL ES 3.0 soeben veröffentlicht wurde, aber da es neu ist, wird es noch keine Tutorials oder Hardware-Unterstützung geben. Es scheint keine wesentlichen grundlegenden Änderungen zu geben (wie der Unterschied zwischen fester Pipeline und Shader-Modell, den wir mit OpenGL ES 1.0-> 2.0 gesehen haben). Sie werden also wahrscheinlich kein veraltetes Zeug lernen.

Außerdem verwendet OpenGL ES häufig EGL, sodass Sie einen anderen Weg zum Öffnen eines Fensters erlernen müssen, der jedoch nicht zu schwierig sein sollte. Ansonsten gibt es ein paar OpenGL ES-Wrapper / Emulatoren, oder Sie können auf Android / iPhone lernen, wenn Sie einen haben (oder versuchen, deren Emulatoren zu verwenden).

Es gibt das Addison Wesley OpenGL ES 2.0-Programmierhandbuch, das dem Red Book entspricht.

Sie können sich auch Dinge ansehen, die sich auf GLSL-Shader konzentrieren, da hier die meisten modernen OpenGLs leben. Sie müssen nur sicherstellen, dass das, was Sie lernen, die „Klebeseite“ der OpenGL-Bindung abdeckt.

Lesen Sie die OpenGL Shading Language 2nd Edition (Orange Book).

Das OpenGL 4.0 Shading Language-Kochbuch behandelt einige der aktuellsten OpenGL-Themen, ist jedoch selbst kein umfassendes Tutorial. Es ist auf jeden Fall einen Blick wert, um sich mit den neuesten OpenGL-Praktiken in der Praxis vertraut zu machen, z. B. mit einheitlichen Pufferobjekten und GLSL-Subroutinen.

Schließlich können Sie sich WebGL ansehen, obwohl es in JavaScript etwas anders und viel schwieriger zu debuggen sein wird.

David C. Bishop
quelle
3
+1, wow. Die einzige kleine Änderung, die ich vorschlagen würde, wäre die Verwendung clientseitiger Vertex-Arrays am Anfang, da diese einen einfacheren Weg zu VBOs darstellen, jedoch ohne einige der Bärenfallen, in die Anfänger geraten können.
Maximus Minimus
1
Ich dachte, es wäre am besten, nicht speziell zu lernen / veraltete Funktionen zu verwenden, da dies Dinge wären, die man nicht lernen sollte. Die anderen Dinge, die ich als veraltet empfehle, sind Dinge, die OpenGL standardmäßig tun wird, wie das Rendern ohne Verwendung eines Shaders und die Annahme, dass das Vertex-Attribut 0 die Position ist, die beide beim Einschalten des Kernprofils explodieren sollten.
David C. Bishop
2
Die 6. Ausgabe der SuperBible wurde gerade veröffentlicht und ist VIEL besser als die 5. Ausgabe. Ich kann es nur wärmstens empfehlen, es ist einfach, modernes OpenGL zu lernen.
Philip
2
Die Arcsynthesis gltut-Site ist nicht mehr verfügbar, das Tutorial kann jedoch weiterhin von bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
15

Vergessen Sie Bücher, bis die 8. Ausgabe des Programmführers herauskommt.

Neben dem erwähnten Tutorial empfand ich diese Seite als hilfreich, da es ziemlich schnell über die Grundlagen hinausgeht. Sie sind beide eine großartige Einführung in modernes OpenGL. Sobald Sie sich daran gewöhnt haben, benötigen Sie nur noch die Dokumentation. OpenGL ist einfach zu verwenden, sobald Sie sich daran gewöhnt haben. Der Rest ist Computergrafiktheorie und Mathematik.

dreta
quelle
11

Ich war in genau der gleichen Situation wie Sie und habe endlich gefunden, was ich brauchte, um loszulegen.

Zunächst einmal hier: http://www.arcsynthesis.org/gltut/ . Diese Seite ist fantastisch, gut funktionierende Beispiele und eine ausführliche Erklärung dessen, was vor sich geht. Obwohl der Code in C ++ geschrieben ist, benutze ich dies, um mir das Schreiben von OpenGL-Demos in Lisp beizubringen. Es ist auch völlig frei von der alten Art und Weise, Dinge zu tun, so dass Sie sich nicht darum kümmern müssen, schlechte Gewohnheiten aufzuheben.

Ich möchte betonen, dass ich, obwohl es nur eine andere Website ist, keine Bücher gefunden habe, die eine so klare und prägnante Erklärung der Grundlagen liefern, wie dies der Fall ist.

Sobald Sie die obige Site durchlaufen haben, haben Sie bereits ein grundlegendes Verständnis für Shader und vieles, was Sie wissen müssen, kann jetzt gegoogelt werden. oder in der opengl wiki site zu finden. Letzteres ist fürchterlich kryptisch, wenn Sie die Grundlagen der Arcsyntheseseite nicht im Griff haben, aber recht hilfreich, wenn Sie ungefähr wissen, wonach Sie suchen.

Auch für einen wirklich tiefen Einblick in GLSL, werfen Sie einen Blick auf: OpenGL Shader Language (The Orange Book) Ich arbeite mich sehr langsam durch, werde Ihnen aber das Schreiben von Shadern näher bringen, damit Sie dieses Streben weiter verfolgen können. Ich warne Sie, dass dieses Buch nach den Worten eines Rezensenten "200 Seiten hochwertigen Inhalts in einem Buch mit 600 Seiten" enthält, aber der zusätzliche Verlauf und die zusätzlichen Informationen können den Kontext liefern, den Sie benötigen, um die Routen von OpenGL zu verstehen als standard ist runter gegangen (naja es hilft mir sowieso!)

Ich hoffe, das hilft und viel Glück, ich freue mich darauf, Ihre Arbeit in der Zukunft zu sehen / zu spielen!

AKTUALISIEREN

Es scheint arcsynthesis leider offline ist, aber die Stelle umgewandelt wurde pdf hier und der Code wurde gespiegelt hier über .

Auch in den wenigen Jahren seit meiner ursprünglichen Antwort ist learnopengl.com/ absolut genial geworden. Während ich arcsynthesis immer noch empfehle, um die Einführung in modernes OpenGL zu vereinfachen, deckt die learnopengl-Site weitaus mehr als die von arcsysthesis ab und verwaltet sie mit ansprechbarer Sprache. Wir haben Beispiele und Open Source-Code erstellt. Grundsätzlich ist es verdammt gut, schau es dir an!

In Bezug auf Bücher bin ich mit dem orangefarbenen Buch nicht weit gekommen, kann aber die dritte Ausgabe von 'Real-Time Rendering' empfehlen . Sobald Sie für die technischen Dinge bereit sind, ist dieses Buch eine Goldmine.

Baggers
quelle
2
OH MEIN GOTT! Der erste Link ist fantastisch!
MatterGoal
Die gltut-Seite ist nicht mehr verfügbar, aber das Tutorial kann immer noch von bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken 20.07.15
Guter Punkt, ich werde meinen Beitrag auch mit zusätzlichen Empfehlungen aktualisieren.
Baggers
8

Schauen Sie sich auch Open.gl an . Es hat Tutorials mit modernen Open GL

anirudhrata
quelle
5

Zwei Websites, die mir sehr geholfen haben, sind: http://www.arcsynthesis.org/gltut/ und http://ogldev.atspace.co.uk/

Außerdem ist das OpenGL-Wiki eine äußerst gute und aktuelle Ressource.

Sobald Sie diese abgeschlossen haben, empfehle ich dringend, in die Kugel zu beißen und die OpenGL-Spezifikation zu lesen. Dann bist du ein Profi.

Sean
quelle
Ja, ich finde die Online-Tutorials viel nützlicher als die meisten Bücher. Die SuperBible 5th Edition ist äußerst enttäuschend.
Philip
Die gltut-Seite ist nicht mehr verfügbar, aber das Tutorial kann immer noch von bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken 20.07.15
4

Das beste Buch, das ich je über "modernes" OpenGL gelesen habe, ist http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Obwohl es sich um ein "Kochbuch" handelt, werden Sie durch die notwendigen Schritte zum Einrichten des Renderns und durch die Arten der benötigten Companion-Bibliotheken (image lib, vector math lib) geführt.

Darüber hinaus werden alle gängigen Dinge behandelt, für die Sie OpenGL verwenden möchten, ohne zu tief in irgendetwas hineingraben zu müssen (wie bei Schatten werden auch die Schattenzuordnung und das Filtern von Schattenzuordnungen behandelt, jedoch keine weiteren komplexe Shadow-Mapping-Methoden).

Ich empfehle auch das orange Buch.

Jari Komppa
quelle
Vielen Dank, dass Sie @Jari. Geht es nicht "nur" um Shader? Führt dieses Buch sowohl in OpenGL-Techniken als auch in Shader ein?
MatterGoal
2
@MatterGoal: Modernes OpenGL basiert fast vollständig auf Shadern. Dieses Buch behandelt die OpenGL-Bindungsseite der Dinge. Ich empfehle dieses Buch auch, aber als Begleiter für etwas anderes, es ist nicht wirklich für das Kernlernbuch, zeigt aber einige großartige reale Verwendungen von Moddrn-Praktiken.
David C. Bishop