2012-06-06 7 views
8

Ich versuche OpenGL zu lernen. Ich habe Erfahrung mit C und C++, baue eine Umgebung und all diesen Jazz auf, aber ich versuche, einen guten Ausgangspunkt zu finden.OpenGL Core und Kompatibilität

Ich kenne die feste Funktion Pipeline, die in OpenGL < = 2.1 prominent war, und es scheint relativ einfach zu beginnen mit. Das Kernprofil, das OpenGL in OpenGL> = 3.1 schiebt, lässt mich jedoch wegen der Abwertung vom FFP wegbleiben. Aber ich bin verwirrt darüber, wie alles in 3.1 und höher funktioniert. In 2.1 und darunter hast du dein glBegin (GL_WHATEVER) und glEnd(), wenn du Formen zeichnest. Das erste, was ich beim Durchsehen der Core-Profil-API bemerkt habe, ist, dass diese beiden Funktionsaufrufe weg sind. Mir ist klar, dass es wahrscheinlich einen einfachen Ersatz gibt, aber es ist ziemlich schockierend, etwas (scheinbar Nützliches) zu sehen, das aus solch einer grundlegenden Aufgabe herausgenommen wurde. Es scheint fast so, als würde man printf() von der c-Standardbibliothek ablehnen. Und wenn ich das neueste Red Book durcharbeite, benutzen sie immer noch den alten veralteten Code, der mein Denken weiter verwirrt.

Beim Durchlesen verschiedener Antworten auf ähnliche Fragen sehe ich den typischen "Shader-basierten" oder "es ist alles mit Shadern gemacht" usw. Wenn ich ein einfaches weißes Quadrat auf einen schwarzen Hintergrund zeichnen möchte (das erste Beispiel in der neustes Red Book), ich verstehe nicht, wie ein Shader für das Zeichnen einer Box relevant ist. Sollten sie das nicht tun ... nun .. Schattierung? Ich habe mir vorgenommen, das Orange Book und das Blue Book zu kaufen, aber ich möchte kein Geld mehr für etwas ausgeben, das alles hinter einer Bibliothek (dem Blue Book) verbirgt oder etwas, das über die Programmierung eines Shaders spricht um eine Beleuchtungsaufgabe in einer 3D-Umgebung auszuführen (das Orange Book).

Also wo fange ich an? Wie zeichne ich eine Box (oder einen Würfel oder eine Pyramide oder was auch immer) nur mit dem Kernprofil. Ich frage nicht nach einem Code-Schnipsel hier, ich suche nach einem ausdehnenden Tutorium oder einem Buch oder etwas, auf das jemand mich verweisen könnte. Wenn dies zuvor beantwortet wurde und ich es nicht gefunden habe, leiten Sie mich bitte um.

+4

Ich würde Ihnen empfehlen, ein gutes "Buch" über moderne OpenGL zu holen. Meine erste Empfehlung wäre http://www.arcsynthesis.org/gltut/, die online und kostenlos ist. Das sollte dich beginnen. – Bart

+1

Sie können die programmierbare Pipeline auch in 2.0 verwenden. Fixed-Funktion ist unabhängig von der Version beschissen und ineffizient. –

+0

@CatPlusPlus Das ist das ERSTE Mal, dass ich von jemandem gehört habe, der die Pipeline mit festen Funktionen als ineffizient bezeichnet. :) Vielleicht möchten Sie dieses Wort noch einmal überdenken.Crappy - stimme ich zu. – Ani

Antwort

11

Der Grund für die plötzliche "Komplexität" im Kernprofil ist die Tatsache, dass die Pipeline mit fester Funktionalität nicht repräsentativ dafür war, was die GPU tatsächlich für Sie tut. Ein großer Teil der Funktionalität wurde auf der CPU ausgeführt, und nur die eigentliche Zeichnung wurde auf der GPU ausgeführt. Das andere Problem mit der festen Pipeline ist, dass es eine verlorene Schlacht ist. Die feste Pipeline hat soooooo viele Knöpfe und Schalter! Es ist also nicht nur schmerzhaft kompliziert, es wird auch niemals mit der endlosen Nachfrage nach neuen Wegen zum Zeichnen von Szenen Schritt halten. Geben Sie GLSL ein, und Sie können der GPU genau sagen, wie Sie Ihre Szene zeichnen möchten. Dies verlagert die Macht auf den Entwickler und befreit alle davon, auf OpenGL-Updates für neue Schalter/Knöpfe warten zu müssen.

Jetzt, in Bezug auf Ihre Frustration mit dem plötzlichen Verlust von glBegin und glEnd ... gibt es einfache Frameworks, die ihr Verhalten auf dem neuen Kernprofil nachahmen, und das ist eine gute Sache. Auch hier wird den Entwicklern die Entscheidung überlassen, wie sie sich der Pipeline nähern. Es ist jedoch nichts falsch daran, 3D auf dem FFP zu üben. Sie müssen zuerst 3D Mathematik und Konzepte lernen. Diese Konzepte gelten unabhängig von der API. (Matrix Math wird Ihr Leben sowohl in OpenGL als auch in Direct3D retten.) Also üben Sie zuerst mit einfachen Dreiecken und Farben. Dann bewegen Sie sich auf Texturen (mit Texturkoordinaten). Dann füge man Normalen hinzu (mit Beleuchtung). Nachdem Sie all diese Konzepte verstanden haben, hören Sie auf, glBegin/glEnd zu verwenden, und Sie beginnen große Mengen von Vertexdaten in Puffer zu puffern. Sie werden glDrawElements nicht so gut verstehen, wenn Sie glBegin/glEnd sowieso nicht verstehen. Also ist es in Ordnung, auf diesen Tools zu lernen.

+0

i zustimmen, ich denke, die Art und Weise der rote Buch liest durch die erste Ausgabe ist zu gehen (1993 Ich denke,) dann springe in das neuste orangebuch oder was auch immer die 2015-hitze ist ... gut, basics aus einer zeit zu lernen, als opengl nur 120 funktionen hatte. –

+0

Vielen Dank dafür; es ist eine der besten Antworten, die ich je gesehen habe. Für eine lange Zeit habe ich ehrlich gesagt schon gefragt, wie die gesamte OpenGL-Community seine Meinung verloren zu haben scheint: jeder gedankenlos das Mantra zu wiederholen „die feste Pipeline war schlecht, sollten Sie es nicht verwenden“, während eine viel kompliziertere Alternative mit einer unglaublich befürworten steile Lernkurve und absolut keinen offensichtlichen Vorteil für die überwiegende Mehrheit der Benutzer. Dies ist die erste Sache, die ich je gelesen habe, dass ein Blick auf dem gibt, was könnte in der Tat um die feste Pipeline problematisch sein, und Sie ein klares und vernünftiges Gesamtbild ergeben. –

+0

Gern geschehen. Froh, dass ich helfen konnte. – TheBuzzSaw