Beginnen Sie mit OpenGL, wenn die meisten Tutorials nicht mehr aktuell sind.


16

Ich bin sicher, es gibt bereits eine Reihe solcher Fragen, aber die ständige Aktualisierung der OpenGL-Bibliothek wirft sie alle weg, und in ein oder zwei Monaten werden die Antworten hier wieder wertlos sein.

Ich bin bereit, mit der Programmierung in OpenGL unter Verwendung von C ++ zu beginnen. Ich habe einen funktionierenden Compiler (DevCpp; bitte mich NICHT, zu VC ++ zu wechseln, und frage mich nicht warum). Jetzt bin ich nur auf der Suche nach einem soliden Tutorial zum Programmieren mit OpenGL. Mein Assistent hat das von NeHe Productions bereitgestellte Tutorial gefunden, aber wie ich herausgefunden habe, ist es VERLAUF! (obwohl ich ein einfaches Fenster zusammengezogen habe, um eine OpenGL-Zeichenfläche zu unterstützen)

Dann bin ich online gegangen und habe die OpenGL SuperBible gefunden, die anscheinend Freeglut verwendet? Ich würde aber gerne wissen, ob SuperBible 5th Edition nicht mehr aktuell ist. Der Vorschlag zu freeglut, den ich fand, sagte, dass die neueste Version 2.6.0 war, aber jetzt ist es 2.8.0!

  • Ist die OpenGL SuperBible immer noch ein guter und ziemlich aktueller Startpunkt?
  • Gibt es einen besseren Ort, um OpenGL zu lernen?
  • Darf ich freeglut einfach im DevCpp-Include-Verzeichnis (möglicherweise im GL) speichern, oder gibt es eine wichtige Prozedur?
  • Gibt es Kommentare oder Vorschläge, die ich nicht gefragt habe, da ich gerade erst anfange?

@dreta hat einige Dinge für mich geklärt, daher habe ich jetzt eine bessere Vorstellung davon, was ich fragen soll:

Ich denke, ich möchte mit OpenGL beginnen, indem ich eine Wrapper-Bibliothek verwende, anstatt direkt auf OpenGL zuzugreifen.
Ich denke nur, dass es für einen Anfänger einfacher wäre, gute Ergebnisse zu programmieren und zu erzielen, obwohl ich noch nicht alle schmutzigen Details verstehen muss (wie @stephelton erwähnt).

Das Problem ist, ich kann keine Bibliothek finden, die keine undefinierten Verweise auf nicht mehr unterstützte Funktionen enthält. Freeglut klingt betriebsbereit, verwendet aber immer noch GLU.
Weiß jemand, was ich tun kann?
Außerdem habe ich versucht, die erste SuperBible-Quelle zu kompilieren, aber es sind Fehler aufgetreten, da GLAPI nicht als Typ definiert wird. Der Fehler stammt aus der GLU-Bibliothek.

Ich würde gerne die SuperBible verwenden, aber ich weiß nicht, wie ich das beheben soll.


2
Sie sollten zu GCC wechseln.
notlesh

DevCpp ist nur eine IDE; das läuft GCC (mingw um genau zu sein). Aber da es erwähnt wurde, wäre Eclipse CDT vorzuziehen, da es in den letzten 10 Jahren nicht mehr aufgegeben wurde.
Casper Beyer

4
@Casper Der Erbe des DevCpp-Erbes war Code :: Blocks und wird weiterhin regelmäßig aktualisiert.
Alex Shepard

1
Wenn Sie eine Wrapper-Bibliothek für OpenGL benötigen, empfehlen wir Ihnen, SFML zu verwenden . SFML bietet die üblichen Funktionen wie Fenstererstellung, Zeitgeber usw. und ermöglicht Ihnen das Zeichnen von Text und einfachen Formen. Sie können jederzeit "raw" OpenGL verwenden, um SFML-Funktionen und Raw-API-Aufrufe zu mischen.
Oskar N.

1
Sie können eine Frage nicht "schließen", indem Sie dem Titel "{CLOSED}" hinzufügen. Die Fragen werden von den Moderatoren geschlossen oder wenn genügend Benutzer abgestimmt haben, um die Frage zu schließen. Ich werde Ihre Änderungen
zurücksetzen

Antworten:


19

Unser Resident Nicol Bolas unterhält ein Online-Buch über moderne Grafikprogramme . Es verwendet modernes OpenGL, alles wird in einem einfach zu konsumierenden Tempo eingeführt, es ist ein guter Anfang. Ich habe es benutzt, um modernes OpenGL zu lernen und es hat mir in den letzten 2 Monaten Wunder gebracht.

Daneben gibt es hier und da ein bisschen Wissen. Das OpenGL-Wiki ist recht gut gepflegt. Der Code ist kein "Best Practice" und manchmal gibt es Unklarheiten in Bezug auf die OpenGL-Version, aber außerhalb dieser seltenen Fälle ist er eine großartige Ressource.

Wenn Sie mehr über GLSL erfahren möchten, gibt es das GLSL Core Tutorial von lighthouse3D. Obwohl dies das einzige Kernwissen ist, dem ich auf der Website "vertrauen" würde, ist der Rest in der Regel veraltet.

Sobald Sie verstehen, wie modernes OpenGL funktioniert, können Sie problemlos nach bestimmten Informationen suchen, veralteten Code herausfiltern und vor allem die Spezifikation lesen. Sie müssen nur irgendwo anfangen.

Die meisten, wenn nicht sogar alle verfügbaren OpenGL-Bücher sind veraltet. Die neue SuperBible ist eine Art Freak und ich würde sie niemandem empfehlen. Das OpenGL-Programmierhandbuch für OpenGL 4.1 erscheint am 16. September. Leider verwendet die 7. Ausgabe veralteten Code.

Natürlich können Sie hier jederzeit Fragen stellen.


1
Warum schlagen Sie die SuperBible nicht vor?
Codesmith

3
@AUTO Die 5. Ausgabe der SuperBible verwendet einen benutzerdefinierten Wrapper um OpenGL, um sie "zugänglich" zu machen. Viele der Beispiele verwenden den benutzerdefinierten Wrapper übermäßig. Es lehrt Sie nicht, was es voraussetzt, was die OpenGL-Kernspezifikation ist. So wie ich es sehe, wenn Sie nicht explizit veraltetes OpenGL lernen müssen, dann vergessen Sie einfach, dass es überhaupt existiert. Es macht keinen Sinn, es zu lernen. Die Kernspezifikation ist viel klarer und leistungsfähiger.
Dreta

@AUTO Die Kernspezifikation ist am Anfang viel anspruchsvoller, das ist eine gute Sache. Es zwingt Sie, sich um den größten Teil des Renderprozesses zu kümmern, und gibt Ihnen das volle Verständnis und die Kontrolle darüber. Es eröffnet viel, viel mehr Möglichkeiten als der veraltete Code. Wenn Sie danach die API Ihres Betriebssystems kennenlernen und OpenGL darunter ausführen können, ohne überladen zu sein, sind Sie im Wunderland.
Dreta

OK, lassen Sie mich Ihnen eine wichtige Frage stellen: Die GLU-Bibliothek scheint veraltet zu sein und wird nicht mehr unterstützt. Erhalte ich mithilfe der Spezifikation direkten Zugriff, ohne die GLU zu benötigen? Auf diese Weise würde ich keine Linker-Fehler mehr für nicht vorhandene Funktionen erhalten, auf die die GLU-Bibliothek verweist.
Codesmith

@AUTO GLU ist völlig unnötig, ich habe es während des Grafikprogrammierkurses nur mit einem 10-Fuß-Stab berührt (wir mussten veralteten Code verwenden, es war schmerzhaft, die Standards ändern sich schneller als das Unterrichtsprogramm, denke ich). Es ist nur eine Bibliothek, die mit dem veralteten Code hilft. Wenn Sie Ihren Code mit GLU eingerichtet haben, stinkt es wahrscheinlich.
Dreta

1

Es ist schon eine Weile her, dass diese Frage gestellt wurde, aber ich hoffe, dass dies Menschen hilft, die die gleiche Frage haben wie Sie.

Ich habe mit OpenGL angefangen, indem ich ein Minibook gelesen habe arcsynthesis.org. Ich bin mir nicht sicher, wer es geschrieben hat. Es sieht so aus, als ob die Registrierung der Website abgelaufen ist oder so, aber Sie sollten sie hier finden können: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Es verwendet OpenGL 3.3, sodass Sie die moderne Pipeline und alle damit verbundenen Methoden verwenden, jedoch nicht mit Tesselations- oder Compute-Shadern konfrontiert werden.

Eine andere Seite, die einen Blick wert ist, ist https://open.gl/ . Es scheint SEHR anfängerorientiert zu sein und deckt die Dinge nicht annähernd so gründlich ab wie das obige Material, aber es könnte ein guter Ausgangspunkt für Leute sein, die gerade erst anfangen.

Denken Sie daran, das OpenGL-Wiki zu lesen und Ihre Funktionsnamen zu googeln, wenn Sie Hilfe benötigen. Einige der Seiten im Wiki sind völlig nutzlos, andere sind sehr hilfreich, sowohl als Referenz als auch als Lernmaterial.


1
Die in der akzeptierten Antwort erwähnte Person schrieb es Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

Diese alten Tutorials sind für Anfänger immer noch sehr relevant. In der Tat würde ich vorschlagen, dort anzufangen, anstatt mit neueren Versionen von OpenGL. In neueren Versionen wurden einige der einfacheren Methoden zum Zeichnen von Geometrie (nämlich das Zeichnen im Sofortmodus) verworfen.

In neueren Versionen müssen Sie Arrays von Scheitelpunkten vorbereiten und senden und der Grafikkarte mitteilen, wie Ihre Scheitelpunkte in dem von Ihnen bereitgestellten Array angeordnet sind. Diese Dinge sind umständlich zu debuggen.

Bei einigen Versionen (insbesondere OpenGL ES 2.x) müssen Sie Ihre eigenen Beleuchtungsgleichungen (in Form von Fragment-Shadern) bereitstellen und Ihre eigenen Scheitelpunktdaten so transformieren, dass sie auf dem Bildschirm landen, auf dem Sie sie haben möchten (Scheitelpunkt-Shader). Dies ist noch schwieriger zu debuggen und (meiner Meinung nach) kein Ort für Anfänger.

Daher würde ich vorschlagen, dass Sie zu diesen NeHe-Tutorials (usw.) zurückkehren und dort beginnen. Sie mögen "veraltet" sein, aber sie funktionieren immer noch. Wenn Sie verstehen, was in der Rendering-Pipeline in OpenGL wirklich passiert, und ein Gefühl für einige der mathematischen Konzepte bekommen, mit denen diese Dinge funktionieren, können Sie sich mit einigen der aktuelleren Methoden von befassen Rendern in OpenGL.


Eigentlich arbeiten sie NICHT. Deshalb habe ich diese Frage gestellt. Sie verwenden die Funktion gluPerspective, die veraltet ist, und es gibt keinen absoluten Ersatz.
Codesmith

1
Das ist keine OpenGL-Funktion. Es ist eine separate Dienstprogrammfunktion, die von einer anderen Bibliothek bereitgestellt wird. Sie können den Code leicht finden - es ist nicht sehr schwierig.
notlesh

Danke, aber ich habe nur einen unvollkommenen Ersatz gefunden, den ich nicht benutzen kann. Es akzeptiert ein Argument "float * matrix", während das alte eine interne Matrix verwendet. Was lege ich dann dafür?
Codesmith

Das erste Mal auf Google nach "gluPerspective Implementation" gesucht. Es ruft glFrustum auf, das in einigen neueren Versionen von OpenGL nicht verfügbar ist (ES 2.x enthält es nicht). Auch das ist nicht schwer zu finden.
notlesh

0

Wie andere gesagt haben, sind die meisten Bücher entweder veraltet oder zu weit fortgeschritten. Trotzdem würde ich die 5. Ausgabe der SuperBible empfehlen, aber nur, um einen schnellen Überblick darüber zu bekommen, was in OpenGL möglich ist, und um sich mit Dingen wie der Ansicht / Projektion usw. vertraut zu machen.

Wenn Sie sofort in das moderne OpenGL eintauchen, werden Sie möglicherweise zuerst überfordert. In den jetzt veralteten Versionen sollten Sie einige grundlegende Dinge lernen.

Ich möchte auch eine Seite mit guten Tutorials hinzufügen, die ich kürzlich gefunden habe: http://ogldev.atspace.co.uk/


Danke, ich werde dieses Tutorial überprüfen; Aber um die OpenGL SuperBible zu benutzen, bleibt meine Frage: Wie behebe ich GLU, da freeglut darauf basiert?
Codesmith

@AUTO: FreeGLUT basiert nicht auf der GLU. Einige FreeGLUT-Funktionen rufen GLU auf. Wenn Sie diese Funktionen jedoch nicht aufrufen, treten keine Probleme auf.
Nicol Bolas

Aber ist es nicht wahrscheinlich, dass die SuperBible diese Funktionen aufruft? Und wenn ja, ich kann nicht verwenden es .
Codesmith

Wirklich, meine Meinung ist, sich nicht um den Quellcode zu kümmern, der mit der SuperBible geliefert wird. Lesen Sie es, aber versuchen Sie, alles von Grund auf neu zu machen. Ich gehe davon aus, dass Sie Ihre Bibliotheken bei Problemen mit GLU nicht richtig konfiguriert / installiert haben. Laden Sie die neueste Version von MinGW herunter. Laden Sie auch die neueste Version von freeglut herunter und kompilieren Sie sie oder suchen Sie eine vorkompilierte Bibliothek. Wie auch immer, Sie sollten anfangen, etwas zu lernen, anstatt so viel Zeit damit zu verbringen, zu planen, wie Sie anfangen sollen.
Grieverheart

@AUTO: Warum nennt die SuperBible sie wahrscheinlich? Wenn es sie aufrief, würde der Code der SuperBible nicht funktionieren. Welches ist, warum es sie nicht nennt.
Nicol Bolas

0

arcsynthesis.org (die in der akzeptierten Antwort erwähnte Seite) scheint leider ausgefallen zu sein. (BEARBEITEN: es ist unter diesem Link verfügbar !).

Anton Gerdelans Tutorials für OpenGL 4 sind ab Mitte 2014 sehr gut lesbar und aktuell. Die ersten sind kostenlos, der Rest ist bei Amazon erhältlich, wo es großartige Reviews gibt, und das zu einem kleinen Preis. Bisher habe ich mich gefreut.

Weitere kostenlose Tutorials für OpenGL 3.3+ finden Sie unter http://www.opengl-tutorial.org/ . Sie stammen aus dem Jahr 2012, können aber auch als Ergänzung für andere Quellen dienen.


OGLDev ist aktuell, ausführlich und kostenlos. ogldev.atspace.co.uk/index.html
Yattabyte


Schön zu sehen, dass es verfügbar ist! Ich werde diese Materialien auch überprüfen.
iHateCamelCase
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.