![]() |
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: ![]() 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. |
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Zitat:
Der Rest dürfte sich ja dann wohl ergeben. OpenGL Tutorials -> Google -> "NeHe" DirectX Tutorials -> Google Zitat:
|
Re: Eigene 2dEngine basierend auf DX oder OpenGL
|
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Zitat:
|
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:
|
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Ok, dann wurschtel ich mich da durch, hab schon n schönes PDF Dokument gefunden!
![]() 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! |
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.
|
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. |
Re: Eigene 2dEngine basierend auf DX oder OpenGL
|
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 ^^ |
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. |
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? |
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: ![]() OpenGL: ![]() |
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? |
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Zitat:
Zitat:
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: ![]() Für das Thema Direct3D/DirectX 9 mit Delphi das folgende Buch: Zitat:
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. |
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 :) |
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! |
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Normalerweise benötigst Du keinen Timer sondern führst deine Methoden im OnIdleEvent aus.
Quelle ![]()
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; |
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). |
Re: Eigene 2dEngine basierend auf DX oder OpenGL
Danke euch beiden!
Zitat:
|
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 : ![]() Ist alles in Englisch, aber ich denk es ist zu verstehen. |
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.
|
Re: Eigene 2dEngine basierend auf DX oder OpenGL
2D = 3D mit einer fixen Ebene
|
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
|
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