fließende Flüsse

Für Fragen von Einsteigern und Programmieranfängern...
landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

Hab die Unit dglOpenGl nun in dasselbe Verzeichnis wie die im Demo verwendete veraltete Unit GL kopiert (als PAscal Code und kompiliert)
und mit USES im Beispiel eingebunden (im code halt einfach statt uses GL -> uses dglOpenGL) .

Die Form wird wenigstens aufgebaut :shock: aber innerhalb dieser wird grafisch nichts dargestellt.
Bricht dann mit Fehlermeldung ab und warnt vorher schon sogar vor "Data corruption".

Das Beispiel (kennt ihr vllt ,da rotiert halt ein Würfel mit Texturen drauf vor wiederum rotierendem Hintergrund) müsste doch eigentlich mit der dglOpenGL anstatt der GL genauso funktionieren !, vorausgesetzt die dglOpenGL ist abwärtskompatibel.

Mehr fällt mir momentan dazu leider nicht ein :(

Gruss Landvogt

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: fließende Flüsse

Beitrag von Mathias »

Ich kann dir am Abend ein Beispiel-Code von mir reinstellen, in dem dglOpenGL und OpenGL 3.3 verwendet wird.

Willst du nur ein Windows-Programm oder muss es auch unter Linux laufen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: fließende Flüsse

Beitrag von Mathias »

Hier der versprochene Code, welcher gut demonstriert, wie man eine Shader lädt.
Auch sieht man gut wie dies mit den VAO und VBO funktioniert.

Ich hoffe das führt dich einen Schritt weiter.
Dateianhänge
Tutorial 01-3 - Quad and Triangle - Color - Shader.zip
(883.85 KiB) 77-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

Dankeschön, schau ich mir gleich mal an !

Unter WIndows würde mir schon genügen...

Gruss Landvogt

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: fließende Flüsse

Beitrag von Mathias »

Unter WIndows würde mir schon genügen...
Dann kannst du auf LazOpenGLContext verzichten und den Context mit Windows-Funktionen erzeugen, so wie in meinem Beispiel.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

Projekt kann nicht kompiliert werden:

glGetProgramInfoLog(ProgramObject, InfoLogLength, InfoLogLength, @Str[1]);

unit1.pas(133,68) Error: Incompatible types: got "LongInt" expected "PGLsizei"

InfoLogLength ist aber als integer definiert.

kannst du mir vllt noch deine version der dglopen anhängen ?

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: fließende Flüsse

Beitrag von soerensen3 »

Hallo,

kein Grund das Rad neu zu erfinden. Guck dir mal OpenGL Core an. Das sind ein paar Units die gerade das Erstellen von Fenstern und dergleichen vereinfachen sollen. Für mich kam das alles ein bischen zu spät, da ich das jetzt alles selber geschrieben habe (und auch vorhabe das wenn es etwas nutzerfreundlicher ist als open source zu veröffentlichen), habe deshalb auch nicht versucht damit zu arbeiten aber sieht bisher ganz brauchbar aus.
Die Units findest du hier:
http://www.delphigl.com/forum/viewtopic ... 13&t=11151

Die Palettenanimation würde ich mit 2 Texturen in einem Shader machen, das ist effizient weil nur Texture Lookups gemacht werden, was relativ schnell ist.
Dazu findest du unter pallette animation glsl in Google einiges. Zum Beispiel hier:
http://gamedev.stackexchange.com/questi ... -in-opengl

Gruß Johannes

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: fließende Flüsse

Beitrag von Mathias »

glGetProgramInfoLog(ProgramObject, InfoLogLength, InfoLogLength, @Str[1]);

unit1.pas(133,68) Error: Incompatible types: got "LongInt" expected "PGLsizei"
Die Zeile kannst vorübergehen auskommandieren, die kommt nur zur Geltung, wen ein Fehler im Shader ist.

Ich habe die neuste dglOpenGL probiert, da kommt dein Fehler auch bei mir.

Mit der Version im Anhang sollte es gehen.
Dateianhänge
dglOpenGL.pas
(1.03 MiB) 68-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Soner
Beiträge: 729
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: fließende Flüsse

Beitrag von Soner »

Für diese Projekt brauchst du eigentlich kein OpenGL. Ich würde das alles mit Lazarus-Canvas machen. Bei einem Spiel nimmt Spiellogik, AI usw. viel Zeit, Grafikteil kannst du mit LCL schneller entwickeln. Ich würde dann später wenn das Spiel fertig, gut und lohnenswert ist, in OpenGl umsetzen. Nur du mußt achten dass du Spielteile von LCL trennst, also nicht alles in einem Formular.
Mit LCL würde ich das so machen.
1. Normale Karte zeichen.(Hintergrund)
2. Mit Grafikprogramm alles außer Flüsse Transparent machen (Transparente Stellen mit eine Farbe malen). Dann:
a) Entweder die Flüssekarte als 256-Farben Bitmap speichern und Palettenanimation machen,
b) oder von der Flüssekarte mit verschiedenen Blautönen mehrere Versionen abspeichern und später zufällige Teile von der Flüssekarten auf Hintergrund(Normale Karte) malen.

landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

Danke an alle, habs nun endlich zum laufen gebracht und auch schon experimentiert mit Primitiven und Texturen unter Verwendung der dGlopenGL.

THX

Gruß Landvogt

landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

Eine abschließende Frage noch:

Brauch noch nen kleinen Mapeditor, würde gerne Städte, Straßen etc(also einfach nur bytewerte) auf einer 2D matrix/Feld eintragen.

Welches Element würdet ihr da empfehlen ?

Bin ich da mit TStringGrid oder TDrawGrid auf dem richtigen Dampfer?

Hab hier bei der Forumsuche leider nichts unter "Feld", "Matrix" oder "Mapeditor" gefunden ...

Gruß Landvogt

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2818
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: fließende Flüsse

Beitrag von m.fuchs »

TDrawGrid dürfte dafür das Richtige sein. Wirf doch mal einen Blick in diesen Thread: http://www.lazarusforum.de/viewtopic.php?f=10&t=8107

Ich habe da auch ein Beispiel für das DrawGrid beigefügt, welches in die Richtung geht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

landvogt
Beiträge: 13
Registriert: So 9. Nov 2014, 22:55

Re: fließende Flüsse

Beitrag von landvogt »

OK, danke

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: fließende Flüsse

Beitrag von Komoluna »

Hi,

Wenn du Bytewerte in einer 2D Tabelle abspeichern willst, kannst du auch einfach ein Bitmap nehmen.
Dann kannst du bis zu 3 Bytes pro Feld speichern.
Außerdem sind lade und speicherroutinen bereits vorhanden.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: fließende Flüsse

Beitrag von Mathias »

Wenn du Bytewerte in einer 2D Tabelle abspeichern willst, kannst du auch einfach ein Bitmap nehmen.
Das würde ich auch so machen, die verschiedene Farben stellen dann die Objekte dar.
Du darfst die Bitmap nur nicht Verlustbehaftet abspeichern.
Dann kannst du bis zu 3 Bytes pro Feld speichern.
Theoretisch ist mehr möglich, nur ist es dann nicht mehr übersichtlich.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten