AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Eigene einfache 2D Grafik Engine
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene einfache 2D Grafik Engine

Ein Thema von ferby · begonnen am 6. Okt 2006 · letzter Beitrag vom 15. Nov 2006
Antwort Antwort
Seite 2 von 3     12 3      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 10:34
Naja, was soll deine Engine denn leisten? Nur, dass sie nicht direkt auf die PaintBox zeichnet, sondern erst auf ein Bitmap? Dafür brauchst du keine Engine
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 10:37
Also ich hab mir vor kurzem (für meine Firma) eine recht performante Engine gebastelt die wie folgt funktioniert.

Ich habe eine Anzeigefläsche (Display) worauf später das fertige Bild kommt.
Wenn irgend ein Object neu gezeichnet werden muss teilt dieses Object dem Display mit das es neu gezeichnet werden müsste.
Das Display hat einen Timer in dem geprüft wird ob seit dem letzten malen 40ms vergangen sind und prüft ob überhaupt ein neuemalen erforderlich ist (ob also irgend ein Object das malen Flag gesetzt hat).
Nur wenn mindestens 40ms vergangen sind und das Malenflag gesetzt ist ruft das Display von allen Objekten die Malen-Methode auf und übergibt ein Bitmap worauf gemalt werden muss.
Wenn also kein Object ein neu malen braucht bleibt das Display auch unverändert und die cpu-last sinkt auf 0%.
Zusätzlich wird im Paint des Displays noch das Bitmap (worauf die Objecte gemalt haben) ausgegeben.
Auf diese Art und Weise habe ich locker über 100 Frames pro Sekunde geschaft (die 40ms heruntergesetzt zum test).

Das war jetzt nur grob umrissen wie man sowas machen kann. In meinem speziellen Fall sorgt das Display auch dafür das ebenen welche auf der Z-Achse weiter hinten leigen als erstes gemalt werden etc.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#13

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 10:41
Image32 ist auch noch ein bissel schneller, gab hier in Forum schon ein paar Anwenungen die das benutzt hattenund gut liefen

mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 11:44
Zitat von SirThornberry:
Das Display hat einen Timer in dem geprüft wird ob seit dem letzten malen 40ms vergangen sind
Wie machst du denn so einen Timer? Nach Standard-Timer hört es sich nicht an und du hörst dich auch nicht gerade wie ein Fan von OnIdle an.

Zitat von SirThornberry:
Auf diese Art und Weise habe ich locker über 100 Frames pro Sekunde geschaft (die 40ms heruntergesetzt zum test).
Hm? Versteh ich nicht. Wenn nur alle 40 ms was passiert kannst du doch keine 100 fps erhalten
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 12:47
[quote="Cöster"]
Zitat von SirThornberry:
Zitat von SirThornberry:
Auf diese Art und Weise habe ich locker über 100 Frames pro Sekunde geschaft (die 40ms heruntergesetzt zum test).
Hm? Versteh ich nicht. Wenn nur alle 40 ms was passiert kannst du doch keine 100 fps erhalten
Deswegen hatte ich ja geschrieben
Zitat:
(die 40ms heruntergesetzt zum test)
Das Problem was die meisten haben ist das sobald sich ein Object ändert sie das Bild auf die Canvas ausgeben. Wenn man jetzt mehrere Objecte hat welche alle 40 ms ein neuzeischnen auslösen wird nicht alle 40 ms ein neue Zeischnen ausgelöst sondern jedes Object löst ein neu zeischnen aus was das ganze so langsam macht.
Es geht also nur darum das man die Ausgabe auf den Bildschirm aufs nötigste begrenzt und nicht bei jeder miniänderung gleich das gesammte Bild ändert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#16

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 13:08
Zitat von ferby:
der große Unterschied bei meinen Spiel ist es, das sich nicht nur die Spielfigur bewegt (also bei dir der Wurm),
sondern auch das Spielfeld.
Das sieht nur so aus, als ob nur das Würmchen neu gezeichnet wird...
Da sich die CPU ohnehin so gelangweilt hat, war ich damals zu faul, da eine Optimierung einzubauen
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#17

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 13:09
ich mache das so:
ich habe eine paintbox und eine liste alle objekte die ich zeichnen muss/möchte nun habe ich eine draw procedure die in zwei hälfe aufgeteilt ist:
isdraw auf drue wird alle komplet neu gezeichnet.

ist istDraw auf false wird nur noch das neugezeichet was sich geändert hat.

und ich verwende nur noch windows botschaften und habe dort eine zeitschleife eingebaut so habe ich es geschaft das die listbox die ich gezeichnet habe fast in "echtzeit" reagiert und das bei minimaler cpu auslastung*freu*.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#18

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 13:57
Ansonsten ist es auch möglich mit der Scanline Eigenschaft zu arbeiten.
Da kriegst Du die Speicheradresse des Canvas Objektes und kannst dort direkt zeichnen.
Is meiner Erfahrung nach die schnellste Methode...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#19

Re: Eigene einfache 2D Grafik Engine

  Alt 7. Okt 2006, 14:06
Zitat von atreju2oo0:
Ansonsten ist es auch möglich mit der Scanline Eigenschaft zu arbeiten.
Da kriegst Du die Speicheradresse des Canvas Objektes und kannst dort direkt zeichnen.
Is meiner Erfahrung nach die schnellste Methode...
Äh? Du meinst die Speicheradresse der DIB Bitmap.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#20

Re: Eigene einfache 2D Grafik Engine

  Alt 12. Nov 2006, 16:00
Hallo,

Also nach euren Antworten habe ich mich entschieden einfach mal meine eingene kleine Engine zu Basteln und schaun was rauskommt.

Das Ergebniss war super


Die eigene Engine funktioniert ganz simpel:
Auf einen Bitmap wird im Hintergrund alles gemalt und dann wird alles auf eine PaintBox kopiert.

Ich habe euch alle 3 Versionen zum Testen bereitgestellt.

Achtung: Das Spiel Ferby-Speed Version 8 ist noch eine Alpha Version,
ich hab es nur zum Testen der Grafikengine raufgestellt, das Spiel selbst ist noch nicht fertig und kann noch Bugs haben.
Ich bitte nur um Kritik zur Grafik Leistung nicht zum Eigentlichen Spiel.


Version 8 Alpha 1:
Diese Version funktionirt mit Images, ohne Double Buffered

Version 8 Alpha 1.1
Diese Version funktioniert mit Images, mit Double Buffered

Version 8 Alpha 2
Diese Version funktioniert mit einen Bitmap und PaintBox


EDIT: Entzipt die Datei, öffnet die Exe, geht auf LEVEL LADEN, wählt Level 10. Da sieht man am besten den Unterschied.

Fazit:
Die eigene Engine hat sich gelohnt, fast kein Geschwindigkeitsverlust und die Grafiken ruckeln nicht mehr.
Angehängte Dateien
Dateityp: zip ferby-speed_8_alpha_2_567.zip (448,2 KB, 46x aufgerufen)
Dateityp: zip ferby-speed_alpha_1.1_142.zip (458,5 KB, 18x aufgerufen)
Dateityp: zip ferby-speed_alpha_1_150.zip (458,2 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz