Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Eigene 2dEngine basierend auf DX oder OpenGL (https://www.delphipraxis.net/111281-eigene-2dengine-basierend-auf-dx-oder-opengl.html)

.chicken 1. Apr 2008 15:20


Eigene 2dEngine basierend auf DX oder OpenGL
 
So, im Moment flute ich das Forum ja mal wieder. Ständig neue Ideen und so, hab wohl im Moment einfach zuviel Zeit ^^
Ich hoffei hr lasst euch von der Länge des Textes, die nun doch entstanden ist nicht abschrecken :)

Nagut, hier meine Idee. Ich habe bisher ja einige kleine Spiel programmiert, wie Snake, Pong oder mein kleines Rocket. Zugegebenermaßen sehr kleine Projekte. Deswegen würde ich mich gerne mal an etwas größerem versuchen und zwar ein kleines 2D Spiel entwickeln, vielleicht sogar mit einer kleinen Story oder so. Einfach etwas, dass mehr als aus einer einzigen Handlung besteht.

Ich hätte jetzt die Möglichkeit dabei auf Andorra2D oder sowas zurückzugreifen. Allerdings würde ich mir lieber selber die Arbeit machen und eine eigene kleine Engine basteln. Alleine aus Gründen des Lernens, ich möchte gerne Verstehen was hinter der Sache passiert (z.B. wie und warum DX und OpenGl performanter sind).

Ich würde also gerne, basierend auf oben genanntem eine kleine Engine für 2dSpiele basteln. Habe folgenden Thread hier im Forum gefunden: Klick mich!
So, das hat mir schonmal einige Anrgegungen gegeben:
- Kamera
- Hintergrund/(transparenter) Vordergrund mit Bewegung
- Objekte natürlich
- Effekte auch
Dann fänd ich es furchtbar cool, die Spielart von GodOfWar, also das Tastendrücken im richtigen Moment in Verbindung mit einer Animation, einzubringen. Man macht also zB eine Spezialattacke und dann wird eine Animation eingespielt, in der man im richtigen Moment spezielle Tasten drücken muss, um erfolgreich anzugreifen, bzw mehr Schaden zu machen.

Ich bin mir allerdings ziemlich sicher, dass ich das ganze ohne eine kleine Anleitung oder einen "Wegweiser" nicht hinbekomme. Ich weiß ehrlich gesagt nichtmal wo ich anfangen soll. Was gehört alles dazu, und wie setze ich das um? Wie z.B. mache ich Animationen und Effekte? Bisher habe ich sowas mit einer TTimer Komponente gemacht, wobei es ja sehr kompliziert ist, mit einer einzigen Komponente, getrennte Animationen abzuspielen. Nebenbei scheint die Timer-Komponente ja nicht gerade die beste Lösung zu sein (nach dem was ich bisher gelesen habe).

Ich könnte jetzt hier zu allen Einzelheiten Fragen stellen, aber das würde den Rahmen sprengen. Gibt es nicht im Internet Literatur dazu, die sich speziell mit sowas auseinandersetzt? Kann auch gerne allgemein gehalten, also nicht Delphi-spezifisch sein.

Dann wäre ich euch noch sehr dankbar, wenn ihr mir kurz erklärt, was genau alles zu so einer Engine gehört und wie man sie aufbaut!
- Leveleditor denke ich mal
- Charaktereditor vielleicht? Mit verschiedenen Animationen und sowas? Gibt man in so einem Editor dann auch schon verschiedene Attacken an? Oder dient der nur zum äusseren des Charakters?
Wird das eigentliche Spiel denn dann programmiert? Oder baut man die Engine so auf, dass man das Spiel hinterher "zusammenklicken" kann? Ich kann mir nicht wirklich vorstellen wie sowas bei einem größeren Projekt aussehen würde. Für jedes Level eine eigene Unit? Bei Pong zB habe ich einfach ein paar Variablen oder Klassen in einer Unit, vielleicht noch einen Controller in der anderen und auf der Form wird alles gezeichnet.


Ok, lange Rede, kurzer Sinn: Könnt ihr mir irgendwie sagen wo ich anfangen soll? Ich denke ihr seht was ich vor habe und wo meine Probleme liegen.

Edit: Da fallen mir gleich noch ein paar Sachen ein. SlowMotion zB wäre schön.

turboPASCAL 1. Apr 2008 21:25

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Zitat:

Ok, lange Rede, kurzer Sinn: Könnt ihr mir irgendwie sagen wo ich anfangen soll?
Am Anfang. OpenGl oder DirectX lernen. Wobei DirectX besser für Vista ist.
Der Rest dürfte sich ja dann wohl ergeben.

OpenGL Tutorials -> Google -> "NeHe"
DirectX Tutorials -> Google

Zitat:

Ich denke ihr seht was ich vor habe und wo meine Probleme liegen.
Beim lernen ? :stupid:

mkinzler 1. Apr 2008 21:44

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
www.delphigl.com
www.delphigl.de

bitsetter 1. Apr 2008 22:01

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Zitat:

Zitat von turboPASCAL
Wobei DirectX besser für Vista ist.

Und warum ist DirectX besser für Vista, welche Vorteile hat man denn damit. Würde mich auch interessieren.

turboPASCAL 1. Apr 2008 23:24

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Nur die Leistungsunterstützung.

Vista (Oberfl.-darstellung) basiert auf DirectX. OpenGl wird desswegen nicht direkt dargestellt
sondern wird erst Zwischengepuffert.

Man kann nun mal keinen OpenGl-Rendercontext auf dem DirectX-Rendercontext ertellen.

Zitat:

Zitat von bitsetter
welche Vorteile hat man denn damit

Eine höhere Frame rate.

.chicken 2. Apr 2008 05:20

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Ok, dann wurschtel ich mich da durch, hab schon n schönes PDF Dokument gefunden!
http://snip.sourceforge.net/dX-programmierung.pdf

Könnt ihr mir denn trotzdem noch erklären wie sowas dann aufgebaut ist? So eine Engine? Das wird jawohl kaum bei DirectX erklärt sein. Also ich hab zB zwei Editoren für Level und Charakter, und meine ganzen Funktionen zum zeichnen, Bewegen und so weiter. Und dann, wird dann weiter alles so programmiert unter Einbindung der Units?
Also zB für alle Ereignisse im Level und Fähigkeiten des Charakters werden dann eigene Units erstellt?

Aaah ich hab überhaupt keine Ahnung wie sone Engine aufgebaut ist, hab auch die ganze Zeit schon gegoogelt aber nix brauchbares dazu gefunden!

mkinzler 2. Apr 2008 05:36

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Das Problem mit OpenGL besteht aber nur beim Fenstermodus mit aktiviertem Aero. Für Vollbildanwendugen besteht es nicht.

.chicken 2. Apr 2008 15:51

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Abgesehn von meiner oben gestellten Frage, könntet ihr mir wohl noch sagen wo es gute Informationen zu DreictX in Verbindung mit Delphi gibt? Also, wenn ich nun immer noch von C++ (was ich nicht beherrsche) auf Delphi schliessen musst, wird die Sache doch sehr kompliziert, und zu Delphi und 2D mit DirectX finde ich irgendwie nichts vernünftiges.

Edit: Nebenbei bin ich verwirrt ob ich auch Tutorials für ältere DX Versionen wie 8 oder so verwenden kann, oder ob sich in den neueren DX Versionen schon wieder zuviel geändert hat.

mkinzler 2. Apr 2008 16:03

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Tutorial:
http://www.delphi-treff.de/tutorials...ter-directx-8/

Forum:
http://www.delphidev.de/forum/

Wrapper:
http://www.abernichtdoch.de/xordx8/de/index.shtml
http://www.clootie.ru/

.chicken 2. Apr 2008 19:47

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Direct3D ist also nicht nur für 3D Anwendungen? Würde ungern das halbe Tutorial durcharbeiten und dann merken dass das schon 3d ist, womit ich mich eigentlich erst später beschäftigen möchte...

Achso, und dann deine letzten Links:
Habe Wrapper gegooglet und das folgendermaßen verstanden...es ist sone Art "Vereinfachung" der DirectX Methoden, auf Delphi spezialisiert? Brauch ich sowas oder kann ich auch direkt mit DirectX arbeiten? Wenn ichs falsch verstanden habe bitte aufklären :)


Grüße und danke für die Links :) Ich fang an zu lesen ^^

mkinzler 2. Apr 2008 20:02

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Direct3D ist ja nur ein Teil von DirectX.
Der Wrapper von Clootie ist eine Übersetzung der Direct-API nach Delphi.

.chicken 2. Apr 2008 20:05

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Ich hab nach Direct3D gefragt, weil das Tutorial im DelphiTreff sich damit beschäftigt oder nicht? Und da steht immer zB Bewegung von "3DObjekten".
Ich möchte aber 2D programmieren!?
Hat jemand dazu Literatur?

Und zu den Wrappern: Ich kann aber auch die DirektAPI nutzen?

igel457 3. Apr 2008 17:10

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Direct3D und OpenGL sind nur für 3D Anwendungen. Allerdings umfasst der 3D-Raum auch den 2D-Raum, bietet jedoch eine Dimension mehr. So ist es mit meinem Andorra 2D auch kein Problem 3D-Grafiken darzustellen, da es auf den oben genannten Schnittstellen aufsetzt. Den funktionierenden Direct3D/OpenGL Code für meine 2D-Engine findest du hier, da kannst du dich ja inspirieren lassen:
Direct3D: http://andorra.cvs.sourceforge.net/a...iew=markup#l_1
OpenGL: http://andorra.cvs.sourceforge.net/a...iew=markup#l_1

.chicken 3. Apr 2008 18:14

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Also deine Engine basiert auf Direct3D? Ist das auch sinnvoll oder macht es die ganze Sache nur unnötig komplizierter?
Da du ja selbst eine Engine programmiert hast, kannst du mir vll ein paar Denkanstöße geben wo ich anfangen soll?

igel457 3. Apr 2008 20:04

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Zitat:

Zitat von .chicken
Also deine Engine basiert auf Direct3D?

Meine Engine lässt sich wählbar mit Direct3D oder OpenGL betreiben.

Zitat:

Zitat von .chicken
Ist das auch sinnvoll oder macht es die ganze Sache nur unnötig komplizierter?

Die Frage, ob die Verwendung einer solchen 3D-Renderingengine nicht alles komplizierter macht, ist nicht ohne weiteres zu beantworten.
Sobald man es hinbekommen hat, über die 3D-Schnittstelle ein einzelnes Bild zu zeichnen, ist man nur noch 1 Befehl davon entfernt dieses Bild zu rotieren, kippen, stauchen, überblenden etc. Dabei erfordern diese Transformationen kaum Leistung, wenn sie auf der Grafikkarte ausgeführt werden, was nur durch Verwendung der 3D-Schnittstelle erreicht werden kann.

Außerdem lassen sich über die Verwendung der 3D-Hardware Effekte realisieren, die ohne nur mit sehr viel Aufwand zu erreichen wären (Shader, 3D-Transformationen, Beleuchtung, Kameras etc.).

Natürlich ist die Programmierung mit Direct3D/OpenGL ein großer Overhead, wenn du nur einen 2D-Snake-Klon schreiben möchtest.

Für den Einstieg in die (2D)-Programmierung mit OpenGL empfehle ich dir das folgende Tutorial:
http://wiki.delphigl.com/index.php/Tutorial_2D

Für das Thema Direct3D/DirectX 9 mit Delphi das folgende Buch:
http://www.amazon.de/exec/obidos/ASIN/3833408359/delphipraxis-21

Zitat:

Zitat von .chicken
Da du ja selbst eine Engine programmiert hast, kannst du mir vll ein paar Denkanstöße geben wo ich anfangen soll?

Du musst damit Anfangen dir zu überlegen, was genau deine Grafikengine machen soll. Dabei darfst du die Funktionalitäten der Grafikengine nicht mit den Inhalten des Spiels, das du schreiben möchtest vermischen. Du solltest dir außerdem Überlegen, wie du deine Engine später verwenden willst - also wie das Interface deiner Bibliotheken/Klassen aussieht. Die grundlegende (2D-)Grafikengine benötigt meiner Meinung nach folgende Abstraktionsebenen:

Erste Abstraktionsebene:
- Schnittstellen Abstraktionsebene, die Zugriff auf die gewählte Grafikschnittstelle bietet, ohne dass die spätere Anwendung etwas davon mitbekommt. Tauschst die diese Abstraktionsebene aus, so kann deine Engine mit einer anderen Grafikschnittstelle betrieben werden.

Zweite Abstraktionsebene:
- Zeichenflächenobjekt, das die grundlegende Zeichenoberfläche repräsentiert
- Bilderobjekt, das Bilder auf die Zeichenfläche zeichnet
- Bilderlistenobjekt, das die Bilder verwaltet

Dritte Abstraktionsebene:
- Spritenengine, die sich um Animationen, Bewegungen, Kollisionen etc. kümmert
- GUI-System

Vierte Abstraktionsebene:
- Anwendungsschicht (Spiel)

Ich hoffe, dass dir diese Informationen ein wenig geholfen haben,
Andreas

EDIT: Ehrlich gesagt habe ich auch wie du angefangen an meiner 2D-Engine zu schreiben ohne vorher kaum eine Zeile DirectX oder OpenGL geschrieben zu haben. Allerdings hatte ich schon sehr genaue Vorstellungen davon, was ich möchte und hatte das Buch (siehe oben) über DirectX zur hälfte gelesen.

.chicken 4. Apr 2008 16:46

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Hm, ok 35Euro scheinen mir ziemlich viel, dafür dass ich nicht sicher bin ob ich das ganze selbst realisieren kann ^^
Aber ich denk da mal drüber nach!
Was meinst du mit dem GUI-System? Ein Objekt für zB Lebensanzeige?

Hm...muss mich nochmal genauer damit beschäftigen wie so eine Engine aufgebaut ist!

Danke soweit :)

.chicken 7. Apr 2008 19:49

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Ok, also das Buch wird heute Abend bestellt, dann werde ich mich darein lesen.

Nun noch ein-zwei (oder auch drei ;-)) Fragen:
-zuerst immernoch was du mit dem GUI-System meinst?
-dann zur 1.Abstraktionsebene: z.B. ->ich schreibe quasi die von DirectX gegebenen Zeichenfunktionen in meine eigene DelphiFunktion, damit ich hinterher ueber meinen eigenen Befehl mit evtlen Änderungen darauf zugreifen kann? Du sagst sie soll austauschbar sein. Da ich mich aber nur mit DirectX beschäftige, wie soll ich wissen ob ich eine OpenGL Funktion mit den gleichen Parametern aufrufen kann? Oder meintest du das ganz anders?
-was meinst du mit dem Interface der Bibliotheken und Klassen?Ein Interface für eine Unit? Sorry, versteh ich nicht.
-brauche ich nicht noch einen Timer?
-wie realisiere ich Animationen der Sprites? Für jede einen eigenen Timer schreiben? Einen globalen Timer? Schleifen?

Aufbau der Spriteengine muss ich mir nochmal ansehn. Mach ich vll am Beispiel von Andorra :)

Wenn sich oben genannte Fragen durch Lesen des Buches eruebrigen werden, dann weisst mich bitte drauf hin ^^ Danke soweit :)

Grüße!

busybyte 7. Apr 2008 21:31

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Normalerweise benötigst Du keinen Timer sondern führst deine Methoden im OnIdleEvent aus.
Quelle http://wiki.delphigl.com Skybox

Delphi-Quellcode:
  TGLScreenForm = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    ...

procedure TGLScreenForm.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
DrawScene;
end;

igel457 8. Apr 2008 11:55

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Hallo,

mit der Abstraktionsebene meine ich das schon so ähnlich. Jedoch solltest du nicht jede einzelne Funktion getrennt kapseln, sondern immer funktionelle Gruppen: Code zur Schnittstellen Initialisierung, Code zum zeichnen von Vertices, Code zum setzen einer Lichtquelle, etc.

Mit "Interface" meinte ich (mehr oder weniger) wirklich den Interface-Abschnitt deiner 2D-Engine-Units. Du musst dir (bevor du anfängst zu Programmieren) überlegen was du später von deiner Engine erwartest und dementsprechend Klassen/Prozeduren schreiben.

Achja, das Buch beschäftigt sich nicht mit dem Programmieren einer 2D-Engine sondern nur mit der allgemeinen Verwendung von DirectX (Direct3D/DirectInput/DirectSound).

.chicken 8. Apr 2008 15:02

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Danke euch beiden!

Zitat:

Achja, das Buch beschäftigt sich nicht mit dem Programmieren einer 2D-Engine sondern nur mit der allgemeinen Verwendung von DirectX (Direct3D/DirectInput/DirectSound).
Das weiss ich, und das könnte auch Probleme bringen, denn ich habe keine Ahnung wie so Engines aufgebaut sind.

NickelM 9. Apr 2008 07:23

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Hm....
Ich kann, wenn es dich interessiert, eine Seite sagen, wo eine OpenGl 3D Engine zum download ist.
Aber so wie ich es verstanden habe, willst du ja eine selbst machen. Ich stell mir das ganz ährlich schwer vor, wenn ich mir die 3D Engine PAS Datein von der programmierten Engine anschaue.

Trotzdem mal den Link zum Downloadseite der Engine :
GL Scene Seite

Ist alles in Englisch, aber ich denk es ist zu verstehen.

.chicken 9. Apr 2008 15:12

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Danke, soll aber eine 2d Engine werden. Ich seh mir vielleicht mal an, wie die Andorra Engine aufgebaut ist.

mkinzler 9. Apr 2008 15:13

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
2D = 3D mit einer fixen Ebene

.chicken 9. Apr 2008 15:40

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
Ja, ich kann mir aber trozdem besser die Andorra Engine ansehn, denn die verwendet auch DirectX ;-) :P

.chicken 10. Apr 2008 18:53

Re: Eigene 2dEngine basierend auf DX oder OpenGL
 
So, also ihc hab das Buch heute bekommen und bin bisher bis zu Seite 77 oder so gekommen. Habe gerade das Dreieck fertiggestellt.

Generell gefällt mir das Buch bisher gut, wobei einige Sachen ein bisshcne undeutlich sind und ich hoffe, dass das mit den Vertexen, Vektoren und Matrizen noch ein bisschen verständlicher wird, das find ich bisher noch etwas kompliziert.
Wird noch ein bisschen was zur 2D Programmierung angesprochen?

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz