Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wie der Titel schon erahnen lässt, geht es um das OpenGL3 Tutorial, welches ich aktuell im wiki schreibe.
Da aktuell sehr viele Bekannte aus ICQ, IRC, DGL Forum anfangen sich mit OpenGL3 auseinander zu setzen und immer wieder die Frage nach OpenGL3 Tuts kommt aber aktuell einfach nur 2 im Netz zu finden sind(google hat meines im dgl wiki und das aus dem nehe wiki indiziert). Das vom nehe wiki kümmert sich nur darum, wie man ein OpenGL3 GC erstellt und das war es dann auch schon. Ich habe neben den GC auch schon einiges zu den änderungen, Backgroundwissen und zur Pipeline eingebaut.
Es kam heute die Frage, ob ich nicht vieleicht noch ein bischen mehr nach den OpenGL Tuts, aus unserem Wiki, gehen könnte.
Nun ist die Frage: "Was wollt ihr in dem OpenGL3 Tut gerne sehen und was ist z.B. nicht so wichtig ?"
So wäre es recht häftig die GLSL1.4 Specs durch zu kauen allerdings braucht man ja nun auch GLSL, sonnst kann man garnicht zeichnen.
Verzweigen auf das 1. GLSL Tut von Sascha zu verweisen geht auch nicht mehr, da die Specs sich wie bei OpenGL3 verhalten und vorige Freiheiten nun als Pflicht enthält und auch dort deprecated zugeschlagen hat.
Ein weiteres Problem sind Vektorrechnung, wie weit soll ich da eingehen, da in OpenGL3 man sich selber um die Berechnung von ModelView, OrthoView und ProjectionView kümmern muss.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Ein weiteres Problem sind Vektorrechnung, wie weit soll ich da eingehen, da in OpenGL3 man sich selber um die Berechnung von ModelView, OrthoView und ProjectionView kümmern muss.
Ich denke wenn du überhaupt eine Chance haben willst, es in vernünftigem Rahmen zu halten, dann solltest Du dich darauf beschränken, anzugeben wies gemacht wird, ohne groß zu kommentieren warum. Im Wiki haben wir ja einiges dazu und das darf dann gerne erweitert werden, aber solange wie wir wollen, daß auch relative Einsteiger hinterherkommen, sollte da nicht zu sehr drauf rumgeritten werden. Wahrscheinlich ist eine wiederverwendbare Unit sinnvoll, die ala glTranslate und glRotate Matrizen bastelt und einem den Spaß erst einmal abnimmt. Und die dies eh schon besser können, wissen wies geht und brauchen deshalb keine allzugroßen Details
Zitat:
So wäre es recht häftig die GLSL1.4 Specs durch zu kauen
Würde hier auch sagen... EIn paar nützliche Programme anbieten und Details in extra Tutorias verwursten, sonst läufts auf ein Buch hinaus.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Wie wärs denn so:
Im Tutorial Nr.1 beschränkt man sich wirklich nur darauf, wie man den Rendering Context herstellt. Da ergibt sich nämllich schon die Frage, soll man sich nur auf ein OS beschränken? Selbst das könnte dann schon ausufern.
Das Tutorial Nr.2 liegt auf der Hand: Wie zeichne ich das berühmte OpenGL Dreieck, noch ganz ohne irgendwelche Texturen oder Animationen.
Zitat:
aber solange wie wir wollen, daß auch relative Einsteiger hinterherkommen, sollte da nicht zu sehr drauf rumgeritten werden.
Öhm, ich finde schon, dass die Leute wissen sollten, was auf sie zukommt. Alle schreien "Hurra, OpenGL3", aber wenn sie wissen was das WIRKLICH bedeutet, wirds ein paar lange Gesichter geben.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Opengl3 macht einfach extrem viel arbeit und ich denke alles in einem Tutorial abzureißen ist utopisch, denn Dinge die in OpenGl2 noch ganz einfach automatisch funktionierten sind jetzt selbst zu erstellen. Deshalb würde ich eine Tutorial-Reihe vorschlagen die erst nach dem letzten Tutorial erst ein Bild darstellt.
Jeder von uns kennt den Aufwand, den sollte man Einsteigern im ersten Tut auch erklären, so nach dem Motto "wer noch nie OpenGl benutzt hat, sollte hier weiterlesen, wer nur umsteigt von OpenGl2 kann den nächsten Absatz überspringen".Den Aufbau der Reihe könnte man im etwa so gestalten:
1. Erklärung zu Opengl3, für Fortgeschrittene auch Änderungen zu OpenGl2
2. Erstellen des Opengl3 Context inklusive Renderloop und frameratecounter (nur als variable, nicht optisch dargestellt)
3. Erklärungen zur Vektor-Mathematik in OpenGl (wer da kein Bock drauf hat, sollte direkt darauf verwiesen werden, dass er sich gerade ein falsches Hobby sucht ). Aufbau von Klassen und Funktionen um diese Mathematik zu betreiben gehört da natürlich mit hinein.
4. ProjektionsMethoden und Implementierung ( Die wichtigsten wären da wohl die Perspektivische und die Orthogonale, als Anhang kann man dann ja auch noch andere Vorstellen, wie Isometrisches Fake3d )
5. Erklärung zum Thema Rasterizer und Shader. Ich denke es reicht an der Stelle wenn man einen Shader entwirft, der anhand der ProjektionsMatrizen simple Geometrie mit diversen Farben darstellen kann. Texturen kann man dann ja seperat in ein Tutorial schmeißen, wenn man zunächst das erste Fenster am Laufen hat. Eine Kompendium für die aktuellen unterstüzten Glsl Spielzeuge kann man dann ja später noch erstellen und dort verlinken.
6. Die Buffer Funktionsweise. Hauptsächlich um gefärbte Geometrie darzustellen. Das verlangt also mindestens ein FBO und ein VBO.
Vielleicht habe ich da etwas vergessen. Es ist aber trotzdem schon eine ganze Menge geworden, allerdings sind viele Dinge, wie die Mathematik, immer noch gleich geblieben. Man kann da also viel übernehmen von dem was es schon bei uns zu finden gibt. Außerdem kann man diese Bereiche ja auch verschiedene Personen verteilen, so das Tak dann evtl. noch einmal drüber liest und das dann zusammen flickt. Immerhin handelt es sich hier nicht mehr um eine kleine OpenGl-neuerung sondern um ein ganz anderes System und ich denke da sollte man dann auch den Ehrgeiz haben das ausführlich zu betreiben. Immerhin gibt es noch nicht viele OpenGl3 tuts, wie Tak schon sagte, und wenn von uns eine vernünftige Serie dazu herrauskommt, ist das nur positiv für das Forum. Man darf jetzt nur nicht den Zug verpassen.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Erstmal der Link zum Artikel, damit man sieht, wie es aktuell Aufgeglieder ist und was schon an Inhalt drin steckt.
Ich habe heute früh ein bishen weiter gemacht und ich versuche möglichst viel auf bestehende Wiki Artikel zu verweisen aber einige sind einfach so stark auf OpenGL<3 ausgelegt, dass sie nicht für OpenGL3 brauchbar sind. So kann man z.B. nicht auf Shader Artikel wie das von Sascha verweisen, da der Dinge enthält, die es in OpenGL3 nicht gibt.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich denke, es ist sinnvoll, das ganze erstmal in einem Guss zu schreiben und dann an psychologisch sinnvollen Stellen in mehrere Teile aufzutrennen. Ich denke auch, dass vieles nicht detaillierter erläutert werden sollte, gerade Mathematische Aspekte nicht unbedingt. Ein Einsteiger will nicht unbedingt von sowas erschlagen werden und jemand, der Mathe studiert hat (utopisch) und nun mit GL3 anfangen will, wird davon nur genervt. Ich würde daher in dieser Stufe noch keine detaillierteren Erläuterungen beim "Warum" machen sondern das auf "Stage 2" verschieben. Stage 2 könnte daraus bestehen, die bestehenden Artikel auf GL3 zu upgraden und nach und nach als Zusatzmaterial im Tutorial zu verlinken. Anfangen würde ich mit den Sachen, die am wichtigsten sind und wo der Unterschied am größten ist.
Dinge wie das Mathe-Vektor-Matrix-Tutorial kann man ja sicherlich so verlinken, da dort ja praktisch OpenGL-Frei erklärt wird. Vielleicht kann man für einige Dinge (bspw. Projektionsmatrix) auch auf Funktionsartikel (glOrtho oder so) verlinken, mit dem Hinweis, dass diese Funktion zwar nicht mehr aktuell ist und nicht verwendet werden sollte, man sich in diesem Artikel aber gerne die Matrix anschauen darf.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich finde den klassischen Ansatz von Traude gut. Bei uns hat sich dieses Vorgehen bei den alten Einsteiger Tutorials bewährt.
Man führt die Anfänger in ein Thema ein und am Ende eines jeden Tutorials haben sie etwas neues Lauffähiges zur Verfügung.
Zu diesem Zweck sollte im ersten Tutorial erklärt werden was OpenGL3.0 eigentlich ist, wie es sich zu 2.x und 1.x verhält und was das für Konsequenzen hat.
Im zweiten Tutorial sollte dann ein basis Template angeboten werden. Dabei ist es wichtig den Anfängern eine Codebasis an die Hand zu geben die ihnen auch später weiterhilft. Ziel ist hier das berühmte Dreieck.
Im dritten Tutorial geht es dann um die Bewegungen.
Im vierten sollten Texturen für Vortgeschrittene erklärt werden. Die Prinzipien (UV Mapping etc.) sind ja gleich mit den alten Tutorials.
Allgemein haben die Prinzipien aus den alten Tuts ihren Wert ja nicht verloren. Die Kernideen bleiben bestehen, nur die Art der Umsetzung ist anders.
Die Sachen aus dem bestehenden OpenGL30 Tutorial würde ich entsprechend auf die hier vorgeschlagenen Tuts verteilen. Die sollten nebenbei vom Umfang her auch nicht zu lange werden. Wenn man inklusive ausprobieren/nachcoden 1-1,5h beschäftigt ist, dann geht das in Ordnung. Wenn man allerdings schon >1h lang ließt, dann finde ich das etwas viel.
Wie seht ihr das?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ich denke die entscheidendere Frage wäre was das erste sein sollte. Am sinvollsten wäre es hier wieder ein einzelnes dreieck darzustellen, allerdings sollte der Vertexshader erst einmal nur Die Daten untransformiert durchreichen. Für den Fragmentshader reicht es wenn eine Farbe ungleich der clearcolor gesetzt wird.
Entscheidend ist für das erste programm eigendlich nur das die VBOs und rendervorgänge so im plementiert werden das sie der OpenGL3.x spezifikation ohne irgend welche rückwärtkompatibilität entsprechen. Auf keinen fall sollte hier irgend etwas in viele klassen gekapselt werden...
IN einem zweitem Tutorial könnte man zeigen wie mit uniform variablen gearbeitet werden kann, und vorallem wie der Matrixstack ersetzt werden kann.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hab nun fest vor genommen jeden Tag eine Stunde in die Tutorial Reihe zu stecken.
Das Problem an der Thematik ist, dass man es nicht wie ein normales Tutorial angehen kann, sondern eine komplette Reihe benötigt und da in einigen Bereichen auch die bisherigen Tutorials veraltet, nicht mehr korrekt oder schlicht was fehlt auch diese als eine neue Auflage in OpenGL3 umgesetz werden müssen.
Ich hab nun eine neue Liste der einzelnen Artikel gemacht.
Inhalt:
1.OpenGL3 und die Vorgeschichte
2.Lineare Algebra
3.Erstellen eines Grafik Kontext
4.Das Objekt System von OpenGL3
5.Vertex Buffer Object
6.Verfügbare Geometrie=gl_QUADS,TRIANGLES,... ; wie funktioniert das in der Pipeline; das erste 3eck zeichnen; der benötigte vertex und fragmentshader wird einfach nicht erklärt und vorgegeben
7.GLSLang=zwar ein bischen zu spät, da schon zuvor es einmal eingestzt wurde aber das Thema ist recht Anspruchsvoll und man sollte schon wissen was VBO und Geometry ist
8.Geometryshader
9.Transform Feedback=ein neuer Bestandteil von ogl3 und wird nach dem vertex shader aktiv
10.Texturen
11.Frame Buffer Object
12.Scissor/Clipping
13.Instancing
14.Oclussion Query
15.Conditional Rendering
Aktuell arbeite ich an 2. Lineare Algebra.
Vektor:
a)was ist ein vektor
-mathematische darstellung
-c++ code
b)Addition
c)Subtraktion
d)Multiplikation
e)Division
f)Magnitude
g)Skalarprodukt
h)Kreuzprodukt
i)Normalisieren
(b-i haben immer die mathematische darstellung, grafik, beschreibung und c++ Code)
Matrix:
a)was ist eine matrix
-mathematische darstellung
-c++ code
b)Transponieren
c)Multiplikation
c)1)Vektor
c)2)Matrix
----fehlt noch
d)Translate Matrix konstruieren
e)Rorations Matrix konstruieren
f)Scale Matrix konstruieren
----
g)Exkurs in die Operimierung<-Absolut wichtig, seit OpenGL3 da man die Lineare Algebra nun selber implementieren muss
-CPU extension(sse,mmx,...)
-vorteile von templates/generics
-Performance tracking
Ich versuche soviel wie möglich aus den bereits existierenden Tutorials zu verwenden, allerdings mehr den Inhalt, da mein Schreibstiel eigentlich immer abweicht und vieles(ausser Lineare Algebra) schon ziemlich veraltet ist.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du solltest nicht das Rat neu erfinden. Wir haben vieles aus dem mathematischen Bereich bereits in eigenen Artikeln stehen. Reiss die einzelnen Punkte nur an und verweise auf die vorhanden Tutorials bzw. Artikel im Wiki.
Mach dir nicht zuviel Arbeit. Du musst die Grenzen des Tutorials etwas enger ziehen und einfach Beschreiben, was du vorraussetzt.
Du kannst nicht alles beschreiben. Siehe auch hier.
Die Themen des Tutorials sehen aber sehr vielversprechend aus. Ich hoffe damit kann man dann vernünftig in die neue OpenGL Version starten, ohne "Friss oder Stirb" Ansätze.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Das hatte ich im ersten Versuch auch so gemacht aber die qualität, vollständigkeit ist stark unterschiedlich und ist wenig hilfreich, von tut zu tut zu springen, etwas nochmal lesen zu müssen und dann noch zu lesen, dass es ein glTranslate gibt und später heisst es nein gibt es nicht, das ist verwirrend.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Nein ich will das in mehrere Artikel verpacken jede Nummer wäre ein Artikel, so dass man es schön in ruhe über längere zeit lernen kann und nicht immer in einen hin und her springt.
Ich schau mir gerade an, was du da schreibst und bin verwirrt:
Ist das "Produkt" zweier Vektoren nicht eine Zahl und sozusagen in deinem Fall die Summe der Komponenten des Ausgangsvektors c? Also, wie du später schreibst, das Skalarprodukt?
Und auch die Division zweier Vektoren habe ich noch NIE gehört.
Edit: Davon abgesehen gefällt mir das Tutorial sehr! Fand es richtig Schade, dass das interessante leider noch ausgespart ist.
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Also was da im Quellcode steht, verwirrt mich auch. Skalar- und Kreuzprodukt sind ja noch einzeln aufgeführt, aber die seperaten Multiplikationen und Divisionen sind keine Skalierungen, wie ich zuerst annahm, sondern tatsächliche Multiplikation und Division von Zwei Vektoren Wert für Wert
Was jetzt dabei rauskommt, wenn man v1.x/v2.x, v1.y/v2.y und v2.z/v2.z dividiert .. keine ahnung
Würde mich jetzt auch mal spontan fragen, wo man das braucht und was da bei herauskommt
Mitglieder in diesem Forum: Google [Bot] und 18 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.