Freeminer - Vorschau

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Freeminer - Vorschau

Beitrag von MAC »

Hallo.
Ich arbeite zum Teil an einem Spiel namens Freeminer . Es ähnelt Minecraft - mit dem Ziel den Benutzer alles machen und verändern zu lassen.

Das Tolle am Spiel ist es, dass mit ein paar Klicks so ziemlich alles verändert werden kann was es gibt.
Das aussehen der Blöcke - die texturen - der Spieler (nur multiplayer) - das verhalten der blöcke.
Wenn man wil kann man die Blöcke, klein größ - dreieckig -wie auch immer gestallten.

Allerdings ist das eine Entwicklungsversion , also erwartet nicht allzu viel.
Wie die Lazarus snapshots Seite sagt , gilt auch hier:
If they destroy your project files, crash your machine, and eat your disk: Tough luck!
Betriebssystem ist Windows only - da ich unter linux lazarus nicht zum laufen bekomme :shock:
außerdem kennt ihr sicherlich , dass 64 bit software nicht unter 32 bit systemen funktioniert - bei diesem Programm ist das andersherum , wie ich vor kurzem festgestellt habe.
Eine 64 bit version funktioniert einwandfrei - die 32bit version stürtzt ab... Wenn es bei euch anders ist , gebt bitte bescheid.

Bearbeitet werden diese Dateien im von mir entwickelten EHTF-Format. ich plane übrigens dieses unter eine OpenSource Lizenz zu stellen.

Nur zur information- es gibt den magischen Schwarz komisch aussehenden block. Per makieren und dann klick auf "m" verwandelt dieser sich in einen zufallig gewählten anderen block. Außerdem zerstört man mit diesem extrem schnell. Allerdings verbraucht man dabei auch diesen Block. Das tolle an diesem 2 Zeilen Programmcode ist jedoch, dass diese in der externen DLL waffe.dll gespeichert sind und somit entwicklern die möglichkeit geben alles irgendwie zu ändern...

Viel spaß.

PS: wenn ihr ins blaue nichts springt - dann müsst ihr im Debug-hilfe fenster die sprungkraft erhöhen :)
Dateianhänge
Freeminer64.zip
64 Bit Variante
(3.46 MiB) 110-mal heruntergeladen
Freeminer32.zip
32 Bit variante
(3.35 MiB) 113-mal heruntergeladen
Bild
Bild

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

Welche Grafik-API nutzt du? Wie leistungsfähig ist deine Engine? Wie groß können die Welten werden, ohne dass es lagt?

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

Ich nutze OpenGL, deshalb hab ich auch vor das auf Linux zu porten- das geht leider nicht, da bei mir Lazarus und ubuntu 10.10 irgendwie hängt. Ich werds wohl neuinstallieren wenn ne neue Version raus kommt, also in (6 Monaten) , ähhm Morgen.
Meine Engine ist relativ einfach. Ich zeichne einfach die Befehle , welche in den Dateien gestehen. Ich will aber auch die Dll's rendern lassen.
Auf meinen Computer laufen Welten mit 256*256*64 . Ich hab durchgehend 60 FPS (max , da Bildschirm nur 60 zeigt).
Das war so auch meinem 2005er aldi PC - jetzt hab ich aber ein 2011 pc mit gerforce 560 Ti
Das Programm benutzt multithreading.

Code: Alles auswählen

Signatur := nil;

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Freeminer - Vorschau

Beitrag von pluto »

schade. Ich dachte der Soruce-Code sei dabei. Dann hätte ich ihn mal unter Linux Kompilieren können. Das Bild sieht recht gut aus finde ich.

ps: Wenn du mir den Soruce-Code gibst, könnte ich ihn mal unter KUbuntu 10.10 Kompilieren.
MFG
Michael Springwald

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

MAC hat geschrieben:Meine Engine ist relativ einfach. Ich zeichne einfach die Befehle , welche in den Dateien gestehen. Ich will aber auch die Dll's rendern lassen.
Sicher, dass du das Ding wirklich selbst geschrieben hast? Also ich hab noch nie einen Befehl gezeichnet, der in einer Datei gestand.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

ich habe nicht vor den Source-Code in nöchster Zeit zu veröffentlichen- wohl aber so eine Art Entwicklungs-Kit. In der einige klassen ,(darunter die Hauptklasse) sowie das EHTF format befindet . Dessen Proceduren aber zum größten teil leer sind.

Ja, ich habe das selbst geschrieben :)
Es wird interpretiert ...
Die Datei lautet encodet ca so:

0 bild1.tga 7
2 0 0
1 0 1 0
2 1 0
1 1 1 0

Dabei ist die erste Zahl die aufgabe an sich und die anderen Variablen
ich habe also eine Case abfrage
case wert[0] of
0: // lade das bild in den Speicher und benutze glbegin(7) // die 7 steht für vierecke - ich könnte auch dreiecke zeichenen wenn ich will ...
2: // verwende die texturkoordinaten 0 0
1: // zeichne an den Punkt 1 1 0.

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

:o du liest Dateien während des Rendervorgangs?
:o du nutzt den Immediate Mode?

Naja, den Sourcecode solltest du besser nicht offen stellen, das könnte peinlich werden ;)

Aber solange du das mit der Performance zu deiner Zufriedenstellung hinbekommst, nur zu.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

was auch immer ein Immediate Mode ist aber ich lese Daten während des Rendervorgangs :DDD
ich les die einmal am anfang und speicher die in einem Array :P

edit: ich glaub laut Wikipedia, benutze ich genau das gegenteil von Immediate Mode ..:)

Code: Alles auswählen

Signatur := nil;

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Freeminer - Vorschau

Beitrag von pluto »

Naja, den Sourcecode solltest du besser nicht offen stellen, das könnte peinlich werden
Jeder macht Fehler. Selbst ich vertausche hin und wieder gerne x und y oder top und left und wundere mich dann das es nicht geht oder es gibt ein anderen Fehler. Wo ich dann Stunden lang suche und die Ursache Praktisch auf der Hand liegt.

Wichtig ist nur: Das man solche Fehler erkennt und beheben kann. Egal wie der Code auch aussehen mag *G*.
ich les die einmal am anfang und speicher die in einem Array
Das ist schon mal nicht schlecht. Ich würde eine TObjectListe nehmen. Vereinfacht einiges. Aber es kommt auf den Zweck an.
MFG
Michael Springwald

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

MAC hat geschrieben:edit: ich glaub laut Wikipedia, benutze ich genau das gegenteil von Immediate Mode ..:)
Soweit ich deine vorangegangenen Posts gelesen habe, benutzt du glBegin, und das ist nunmal der Immediate Mode.

Stell dir mal vor, jemand würde Models für dein Spiel machen, da gäbe's doch so schöne Kombinationen von Zahlenpaaren, die man hineinstecken könnte und die die OpenGL-Statemachine schön durcheinanderbringen könnten ;)

Versuch mal, davon wegzukommen, OpenGL-Befehle direkt vom Nutzer (in dem Fall das Model) ausführen zu lassen. Damit nimmst du dir jegliche Optimierungs-Flexibilität.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

@carli, ich wollte dir schon beinahe recht geben , da bin ich auf das hier gestoßen :D
Anstatt wie im Immediate-Modus alle Befehle und Vertexdaten in jedem Frame über die passenden Funktionen (z.B. glVertex) an die GPU zu senden, erstellt man in einer Initialisierung eine Displayliste
Da ich Displaylisten erstelle in denen Die daten, leicht optimiert (du hast recht, da die Daten sehr flexibel sind , kann man da recht wenig optimieren)´gespeichert werden.
VBO könnte ich eigentlich auch verwenden. Allerdings brauch man dafür schon OpenGL 1.5 :)

brauch ich eine Objectliste ? Da die Daten nur einmal am anfang erstellt werden. danach ordne ich jedem Block auf der Karte eine Zahl zu dem index des Arrays zu.
Ich hab auch überlegt einen Pointer zu verwenden , aber die zahlen kann man besser vergleichen, was ich manchmal brauche...

Edit: Ich hab mein Programm nun mit 512 * 128 * 512 laufen gelassen --> nur noch 18 FPS - allerdings sind beine 4 kerne nur teilweise ausgelastet. Die grafikkarte war auch nur 20% beansprucht. Ich glaube es liegt an meinen schlechten Sortieralgorithmus :oops:

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

Nein,

es gibt gewisse Tricks, wie man aus der Grafikkarte noch etwas herauskitzelt:

- keine FFP nutzen (stattdessen moderne Shader-Architektur mit OGL 2.1)
- Vertexbuffer sind schneller als Immediate oder Displaylisten
- häufige Texturenwechsel vermeiden
- häufige FBO-Wechsel vermeiden
- keine Matrix-Befehle benutzen (stattdessen Matrix selber ausrechnen und als uniform in den shader hochladen)
- Mehrere gleichartige Objekte via Instanced Drawing (GL_ARB_INSTANCING) in einem draw-Call abarbeiten

und vieles mehr.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

vielen dank, gibt es da irgendwo eine liste it diesem Tricks ?
Das Texturewechsek und Matrix-Befehle vermeiden hab ich mittlerweile schon von selbst rausgefunden ...
Aber vor allem das letztere sieht interessant aus , da mein spiel ja auch objekten basiert welche alle gleich aufgebaut sind...

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Freeminer - Vorschau

Beitrag von carli »

Nunja für die höheren OpenGL-Versionen siehts mau aus mit Tutorials, aber lies dir doch mal die Specs durch:

http://www.khronos.org/opengles/2_X/" onclick="window.open(this.href);return false;

das ist z.B. OpenGL ES 2.0
wenn du das befolgst, hast du eine effiziente Architektur.

OpenGL ES 2.0 ist eine Teilmenge der alten OpenGL-Befehle (nur die schnellen sind übrig) und ich hab auch n Demo-Prog dafür mal angelegt:
https://bitbucket.org/carli/gles-headers" onclick="window.open(this.href);return false;

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Freeminer - Vorschau

Beitrag von MAC »

So, wer Will kan mit dem Editor , den es hier zum Downloiad gibt: http://www.lazarusforum.de/viewtopic.php?f=29&t=4962" onclick="window.open(this.href);return false;
die Dateien bearbeiten und anpassen wie er es halt möchte :)
Ich arbeite gerade an einer Linuxversion, allerdings weis weder ich noch google wie ich unter ubuntu SwapBuffers(HDC) ersetze. Das HDC hab ich schon per unit LCLtype implementiert...
Der Befehl wird für doppelt gepufferte Bilder genommen, dieser vertauscht die vorder und rückseite eines Bildes ( die vorderseite sieht dann der benuzer , während auf der rückseite gezeichnet wird, sonnst hätte man so ein flackern...)

Code: Alles auswählen

Signatur := nil;

Antworten