Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
hobbyfrickler hat geschrieben:
Ich würde dann mein oben genanntes Template verwenden und somit folgendes Abhandeln, nur mal so als grobe Inhaltsangabe: -Installation von SDL2 und der dglOpenGL.pas in Lazarus und Delphi unter Windows -Das Erstellen des SDL-Fensters, des OpenGL 3.3 Kontext, die Initialisierung von OpenGL mithilfe der dglOpenGL.pas sowie die Ereignisbehandlungsroutine von SDL -VBO's & VAO's, wozu sind die da und wie krieg ich da meine Daten rein? -Wie render ich den ganzen Kram denn nun? -Shader, oder warum seh ich nun immer noch nix?
Ich würde die Installation von SDL weglassen und hinschreiben, dass wir SDL benötigen und benutzen. Infos findet ihr "hier" (link auf SDL). Du kannst gern auch einen kleinen Artikel der sich dem Thema, "Einrichten des Workspace" wittmet, schreiben und verlinken.
Der Rest klingt gut. Ansonsten als Tipp: Ließ dir nochmal die Tutorials 1 und 2 von Phobeus durch. Da bekommst du ein gefühl für Umfang und Schreibstil. (Lieber etwas lockerer als zu detailiert. Lieber etwas kürzer als zu umfangreich.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Hier habe ich die wichtigsten Funktionen für Matrixmanipulation. Link
Das habe ich schon gesehen und finde es wirklich toll das mal jemand sowas vorzeigt. Leider war das für mein Problem nicht brauchbar, da ich damit ja z.B. keine Projektionsmatrix erstellen kann. Also nicht falsch verstehen bitte, ich will deine Arbeit nicht schmälern, nur zur Erklärung warum ich erstmal die VectorGeometry.pas benutzt habe. Was dabei nicht so schön war, ist, das diese noch 2 andere Units benutzt (VectorTypes.pas, GLCrossPlatform.pas) und ich in letzterer etwas entfernen musste, die benutzt dann nämlich wieder die LCL/VCL. Übrigens ist eine Vorgängerversion (geometry.pas) davon im DGLSDK enthalten.
Und ich gebe Dir grundsätzlich Recht, daß das benutzen von Fremdbibliotheken nicht immer eine gute Wahl ist. Man muß halt abwägen ob es sich lohnt was eigenes zu schreiben, außerdem muss man natürlich überhaupt die Fähigkeit haben das Benötigte schreiben zu können. Da ich in Hinsicht auf Matrizen (und diesen ganzen Matheformalismus) überhaupt keine Ahnung habe bleibt mir bloß die Möglichkeit eine Library zu benutzen, die möglichst alles enthält was ich brauche. Und das Problem mit den verzerrten Objekten habe ich mittlerweile gelöst, es lag an SDL, bzw. wie ich es benutzt habe, nicht an der Projektionsmatrix.
@Flash: Soll denn garnichts zu SDL2 erklärt werden? Also auch nicht die Erstellung von Fenster/Kontext oder der Ereignisbehandlung? Also rein auf OpenGL konzentrieren um den geneigten Leser nicht mit einem zu großen ersten Tutorial abzuschrecken? Dann würde ich auch vorschlagen das ich das Quadrat entferne und nur das Dreieck zeichne. Passt dann auch besser zum Titel des ersten Tutorials, den glAwesome vorgeschlagen hat - "Das erste Dreieck"
@all: 1.) Kann mir jemand sagen wie ich einen Fehler beim linken des Programmobjektes erzeugen kann, nachdem die Shader gebunden wurden? Ich würde gerne meine aktualisierte Funktion, um das InfoLog bei einem solchen Fehler auszulesen, testen. Also, ich habe das hier:
2.) Gibt es jemanden der mit FreePascal/Lazarus unter Linux arbeitet? Ich habe mir jetzt einen abgebrochen und bekomme SDL2 nicht installiert. Wenn es jemanden gäbe könnte ich mir weitere Fummelei ersparen und würde dann nochmal mein aktualisiertes Template zum testen bereitstellen.
_________________ Die Benutzung von Web 2.0+ mithilfe eines Brain 1.0 wird wegen unzureichender Security-Updates NICHT empfohlen. Bitte upgraden Sie auf Brain 2.0, jetzt für Sie exklusiv noch lieferbar!
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Einen Linkerfehler zu erzeugen, ist einfach. Du musst nur einen Fragmentshader schreiben, der eine Variable vom Vertexshader erwartet, die er aber nicht bekommt. Z.B. ein
Code:
invec4 vf_Color;
im Fragmentshader, aber kein
Code:
outvec4 vf_Color;
im Vertexshader. Wichtig ist dabei, dass vf_Color auch eine Auswirkung auf das Ergebnis des Fragmentshader hat, sonst optimiert der Compiler das weg.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
hobbyfrickler hat geschrieben:
@Flash: Soll denn garnichts zu SDL2 erklärt werden? Also auch nicht die Erstellung von Fenster/Kontext oder der Ereignisbehandlung?
Ich glaube, da hast du dich verlesen: Flash schrieb "Installation", nicht "Initialisierung". Die Erstellung von Fenster und Kontext gehören auf jeden Fall ins Tutorial, finde ich.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
glAwesome hat geschrieben:
hobbyfrickler hat geschrieben:
@Flash: Soll denn garnichts zu SDL2 erklärt werden? Also auch nicht die Erstellung von Fenster/Kontext oder der Ereignisbehandlung?
Ich glaube, da hast du dich verlesen: Flash schrieb "Installation", nicht "Initialisierung". Die Erstellung von Fenster und Kontext gehören auf jeden Fall ins Tutorial, finde ich.
Ganz genau. Initialisierung und Fenster aufmachen gehört ins Start Tutorial. Alles was man halt braucht um ausgehend von einem fertig eingerichteten Workspace ein Farbiges Bild auf den Bildschirm zu bekommen. (Also z.B. das klassische Dreieck aus dem Tut#1)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: So Aug 08, 2010 08:37 Beiträge: 460
Programmiersprache: C / C++ / Lua
Zitat:
2.) Gibt es jemanden der mit FreePascal/Lazarus unter Linux arbeitet? Ich habe mir jetzt einen abgebrochen und bekomme SDL2 nicht installiert. Wenn es jemanden gäbe könnte ich mir weitere Fummelei ersparen und würde dann nochmal mein aktualisiertes Template zum testen bereitstellen.
<--- arbeitet damit unter Linux (Fedora). Sowohl Lazarus, als auch SDL 2 (ich hab schließlich die Header geschrieben ^_^).
_________________ offizieller DGL Compliance Beauftragter Never run a changing system! (oder so)
Ich würde für den Anfang ganz auf SDL verzichten, und nur auf OpenGL eingehen. Als Anfänger würde mich SDL abschrecken, ich will möglichst einfach mit OpenGL beginnen.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Die Seite Tutorial GL3+ existiert nun, so dass fertige Tutorials dort eingetragen werden können. Die empfohlenen Links zum Erlernen von Programmiersprachen sollten überprüft und ggf. ergänzt werden (auch für andere Programmiersprachen).
Edit: Ich beginne nun mit einem kurzen Artikel zur Installation von SDL2. Sobald ich fertig bin, wird das hier gepostet.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Am Tutorial SDL2 Installation arbeite ich nun nicht mehr. Ich habe mich jedoch nur um den Part für C++-Entwickler unter Windows mit Code::Blocks gekümmert. Für andere Zielgruppen, insbesondere Pascaler, sollten noch weitere Abschnitte hinzugefügt werden.
Edit: Übrigens, hobbyfrickler, ich glaube du hast das SDL_Quit in deinem Code vergessen.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
@glAwesome: Ich habe deinen Tipp befolgt, leider ohne Erfolg, bekam immer einen Compilerfehler. Nochmal gesucht und dann ausgehend von dieser Seite http://www.khronos.org/opengles/sdk/doc ... rogram.xml ein paar der aufgeführten Fehlermöglichkeiten nachgestellt, leider immer nur Compilerfehler. Bis mir dann die Idee kam, mal die Abfrage nach einem Compilerfehler zu deaktivieren - und dann geht es auch. Compilerfehler = Programmende = *kopfklatsch*
Hat schon wieder gefühlt eine halbe Ewigkeit gedauert, langsam ahne ich worauf ich mich da eingelassen habe Dein neuer Artikel "Tutorial SDL2 Installation" hat sein übriges dazu getan - ich hätte da so gefühlt 6 Zeilen zu geschrieben. Ich seh mich schon endlos mein Geschreibsel umschreiben/korrigieren/vervollständigen... Dein Artikel gefällt mir aber sehr gut, auch die neue Seite für die GL3+ Tutorials.
Das vergessene SDL_Quit habe ich dann auch mal hinzugefügt, Danke für den Hinweis.
@all: Ich möchte nochmal etwas richtigstellen: Ich habe geschrieben das ich für das Template den Migrationguide von SDL2 zu Rate gezogen habe, dies ist falsch. Ich habe da etwas durcheinandergebracht - das Template basiert auf einem Sample der Pascal-Header von end. Ich hatte angefangen ein vorhandes SDL1-Template mit dem Migrationguide umzuarbeiten, habe dann aber die Samples von end in die Finger bekommen und das dann weiter verwendet. Ich habe das mal im Code vermerkt und hoffe das stellt kein Problem dar? Nicht, daß das in 10 Jahren auffliegt und ich einen meiner nicht vorhandenen Doktortitel loswerde
Zum Wiki: Ich bin nochmal meine Funktion zum Auslesen des Infologs durchgegangen und habe mir nochmal im Wiki den Artikel zu glGetProgramInfoLog angesehen. Entgegen der Aussage des Artikels kann ich für den Parameter length nicht den Wert Nil verwenden = Error: Incompatible types: got "Pointer" expected "LongInt". Keine Ahnung ob ich da was falsch mache oder bei den Parametern mal etwas geändert wurde. Ist kein wirkliches Problem, ich übergebe einfach eine passende Variable, obwohl ich den Wert nicht wirklich benötige.
Wenn ich sehe wieviel Zeit da schon für draufgegangen ist (und ich hab mich bisher nur um den Programmcode gekümmert), läßt das meinen Respekt für die Autoren der schon vorhandenen Artikel/Tutorial nochmal anwachsen.
Nun ja, dafür ist der Code jetzt fertig, habe ihn jetzt nochmal angehängt, könnte jetzt mal unter Linux getestet werden. Natürlich könnt ihr euch den auch einfach mal angucken und mir Bescheid geben ob der jetzt so bleiben kann. Würde ihn nämlich ungerne nochmal ändern, wenn ich mit dem Schreiben des Tutorials angefangen habe.
Zitat:
Ich würde für den Anfang ganz auf SDL verzichten, und nur auf OpenGL eingehen. Als Anfänger würde mich SDL abschrecken, ich will möglichst einfach mit OpenGL beginnen.
Wenn wir kein SDL benutzen, müssten wir mehrere Templates erstellen, jeweils für LCL/VCL. Und ich vermute mal, die meisten die mit OpenGL anfangen, wollen in die Spiele-Richtung, da ist SDL dann eindeutig die bessere Wahl, da man damit auch gleich Tastatur, Joystick/Pad, Sound und Texturen laden abdecken kann.
_________________ Die Benutzung von Web 2.0+ mithilfe eines Brain 1.0 wird wegen unzureichender Security-Updates NICHT empfohlen. Bitte upgraden Sie auf Brain 2.0, jetzt für Sie exklusiv noch lieferbar!
glDeleteShader(FShaderObject);// Shaderobjekte werden nicht mehr benötigt,
glDeleteShader(FShaderObject);// sind jetzt über Programmobjekt verfügbar
Hier hat sich ein kleiner Fehler eingschlichen, du gibst 2 mal FShaderObject frei.
Ich habe auch ein kleines Programm vorbereitet, welches ohne SDL arbeitet.
Der grösste Unterschied, ich arbeite mit ganzen Face(Dreiecken) in der VertexArray, ich finde dies viel übersichtlicher, aber dies ist wohl Geschmacksache.
Zeile 38: "Ein VAO's" ist grammatikalisch etwas unschön
Zeile 47 enthält einen echten Fehler: SDL_Init gibt im Fehlerfall einen negativen Code zurück!
Zeile 139: Das @Result[1] sieht komisch aus, könnte aber richtig sein. Beginnt das Array/der String wirklich bei 1? (Das gleiche in Zeile 145)
Zeile 278: Ich würde das Wort "Menge" durch "Anzahl" austauschen. Umgangssprachlich ist das zwar das gleiche, aber für mich (und wahrscheinlich für alle, die was mathematisch-technisches studieren) nicht.
In der Funktion LoadShader hantierst du sehr umständlich mit Zeigern herum. Ich würde das folgendermaßen machen:
// genau so mit dem Fragmentshader und LinkerStatus
// ...
end
Es ist fraglich, ob die Variable exepath wirklich notwendig ist. Normalerweise kann man einfach eine Datei "shader.vert" laden, ohne das Verzeichnis anzugeben. Es wird dann automatisch das Verzeichnis genommen, in dem das Programm ausgeführt wird.
Schließlich wäre es ratsam, im Shaderquelltext eine konsequente Namenskonvention anzuwenden. Den Namen fragmentColor finde ich für eine Variable zwischen Vertex- und Fragmentshader unglücklich gewählt. Es besteht die Gefahr der Verwechslung mit outputColor. Bei meinen Shadern bin ich inzwischen zu folgendem Namensschema übergegangen (du kannst natürlich auch was anderes verwenden, aber es sollte ein System erkennbar sein, finde ich):
Variablen zwischen Vertex- und Fragmentshader beginnen mit "vf_", zwischen Vertex- und Geometryshader mit "vg_", usw.
uniform-Variablen beginnen mit "u_"
in-Variablen im Vertexshader beginnen mit "in" und out-Variablen des Fragmentshaders mit "out"
@glGetProgramInfoLog: nil übergeben müsste eigentlich klappen. Dass es nicht klappt, liegt offenbar am DGL-Header (die Parameter stimmen dort nicht). Hier habe ich eine korrigierte Version des Headers hochgeladen, die du erstmal verwenden kannst.
@SDL2: Ich denke, dass wir SDL2 verwenden, ist inzwischen entschieden (jedenfalls waren die Berfürworter in der Mehrheit). Ich will mich nicht mit dem ehemaligen Kanzleramtsminister auf eine Ebene stellen und die Diskussion für beendet erklären, aber die Diskussion wäre in einem anderen Thread besser aufgehoben, denke ich. Wir müssen aufpassen, dass wir hier nicht zu viele Themen gleichzeitig diskutieren. Der Sinn des Threads war ja schließlich Koordination statt Chaos.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Danke für das Feedback, ich werde mich dann nochmal um den Code kümmern.
Zu SDL2: Ich möchte auf jeden Fall SDL2 benutzen, es könnte ja alternativ einen entsprechenden Artikel zu LCL/VCL geben, vorausgesetzt jemand schreibt einen solchen.
Momentan bin ich grad am Artikel "Tutorial SDL2 Installation" dran und beschreibe die Schritte für Delphi/Lazarus unter Windows. Ich erstelle das erstmal als Textfile und denke daß das jemand gegenlesen sollte. Soll ich das fertige Textfile hier als Anhang dranhängen?
Nachdem ich mir den Artikel durchgelesen habe, weiß ich auch garnicht mehr wie ich das in 6 Zeilen schaffen wollte
_________________ Die Benutzung von Web 2.0+ mithilfe eines Brain 1.0 wird wegen unzureichender Security-Updates NICHT empfohlen. Bitte upgraden Sie auf Brain 2.0, jetzt für Sie exklusiv noch lieferbar!
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Wenn du dich sicherer fühlst, wenn du das alles erst in ein Textfile schreibst, kannst du das gerne machen.
hobbyfrickler hat geschrieben:
Nachdem ich mir den Artikel durchgelesen habe, weiß ich auch garnicht mehr wie ich das in 6 Zeilen schaffen wollte
Es kommt halt drauf an, wie sehr man ins Detail geht. Für einen erfahrenen Entwickler würde bereits das, was du als Kommentar im Code stehen hast, mehr als ausreichen. Aber es geht hier ja um potenzielle 13jährige, die einen Taschenrechner programmieren können. Daher bin ich selbst auf das Entpacken des tar.gz-Archivs nochmal eingegangen.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Mitglieder in diesem Forum: 0 Mitglieder und 95 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.