Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 Uhr.
Seite 2 von 3     12 3      

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