Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Rotation von Grafiken, Transparenz, Radar (https://www.delphipraxis.net/162403-rotation-von-grafiken-transparenz-radar.html)

qduda 21. Aug 2011 18:02

Rotation von Grafiken, Transparenz, Radar
 
Hallo Community,

kurz zu mir. Ich habe vor einigen Jahren mit Delphi gearbeitet, bin dann aber quasi komplett auf C++ .net bzw c# .net umgestiegen. Es war erstmal interssant zu sehen, dass Delphi jetzt nicht mehr zu Borland gehört...

Wie dem auch sei, ich habe folgendes Problem. Ich möchte auf einem VCL Formular eine Art "Radar" zeichnen. So etwas wie in diversen Filmen, ein Kreis in dem quasi eine Linie (radius) rotiert und dann so Punkte bei Ortung aufpoppen. Hintergrund ist eine kleine Idee von mir und ein Minispiel. :-D
Ich hoffe ihr könnt euch vorstellen was ich meine und will.

So also jetzt habe ich zunächst mit den Standard Delphi Komponenten expiermentiert und musste feststellen, dass z.B. ein TImage nicht mal methoden zur Rotation vorgesehen hat. Hier auf dem Forum bin ich schnell fündig geworden --> Graphics32 (eine open source library) bietet erweitere "Grafikkomponenten", so enthält z.B. die Klasse TImage32 (aus der Graphics32 lib) Methoden zur Rotation und zur Transparenz. Nach etwas gefriemel und dem einen oder anderen Work-arround (Das mit den Transparenzen funktioniert nur halb-gar) musste ich dann feststellen, dass die Visualisierung zwar mit dieser Lib möglich ist, aber das ganze dann leider nicht performant genug ist. Es werden mehrere Grafiken übereinander gelegt, rotiert und Linien und Punkte eingemalt. Die Bitmaps werden quasi vor dem Neuzeichnen ge-cleared. Das sorgt dafür, dass es zu unerwünschtem "Blicken" der Zeichenfläche kommt, die Animation wirkt also alles andere als Homogen...

Einige Stunden später habe ich dann Kapituliert und musste einsehen, dass diese Library für meine Zwecke wohl nicht geignet ist. Einige Google Anfragen und durchgelesene Threads später schien mir DirectX bzw Direct2D die Lösung zu sein. Damit habe ich auch schon mit C++ gearbeitet. Jetzt musste ich feststellen dass es diverse Projekte (z.B. Project Jedi) gab die sich mit der Portierung der API Header auf Delphi beschäftigt hatten. Viele der Projecte gibt es nicht mehr. Somit gibt es auch keine aktuellen Header für z.B. DirectX10 oder 11 für Delphi. Auch habe ich Foren/Communitys gefunden, die sich quasi genau mit der Thematik DirectX für Delphi beschäftigten, diese sind aber irgendwie tot.
Folglich scheint mir DirectX auch nicht die Lösung zu sein die ich suche.

Was aber nun tun? Das Projekt verwerfen? Auf C++ ausweichen? Das würde ich ungern, denn meine Idee war ein altes Delphi Projekt von mir zu erweitern und dieses "Radar" einzubauen...

Stoße ich hier gerade an die Grenzen von Delphi? (Klar mit entsprechendem Aufwand kann ich mir die API Header auch selber portieren usw... Aber da ich die Sache hier in meiner Frezeit mache, und die iser leider begrenzt :shock:).

Vielleicht übersehe ich etwas, und hier hat jemand einen guten Tipp für mich wie ich vorgehen kann. Gibt es evtl. Libs die für mich geeignet sind? Oder irgendwelche alternativen Technologien?

Danke euch für die Tipps im Vorraus!

Cheers,

Q

Namenloser 21. Aug 2011 18:11

AW: Rotation von Grafiken, Transparenz, Radar
 
Graphics32 ist eigentlich sehr performant (natürlich nicht so schnell wie hardwarebeschleunigte APIs wie OpenGL oder DirectX) und kann auch mit Transparenzen ordentlich umgehen. Keine Ahnung, was du machst...

Was das Geflicker beim Neuzeichnen angeht: Ich habe mit den visuellen Gr32-Komponenten lange nicht gearbeitet, weil ich nur Turbo Delphi 2006 habe, wo man keine Komponenten installieren kann, aber du könntest versuchen im FormCreate-Ereignis folgendes hinzuzufügen:
Delphi-Quellcode:
MyImage32.ControlStyle := MyImage32.ControlStyle + [csOpaque];
. Wenn das nichts hilft, würde ich statt des TImage32 einfach eine stinknormale Paintbox sowie ein TBitmap32 nehmen, und im OnPaint-Ereignis das Bitmap auf die Paintbox zeichnen.

Jens01 21. Aug 2011 18:33

AW: Rotation von Grafiken, Transparenz, Radar
 
die GR32_lines ist eine gute Ergänzung zu Graphics32
http://angusj.com/delphi/

Guck Dir mal die Demos dazu an.

ehX 21. Aug 2011 21:24

AW: Rotation von Grafiken, Transparenz, Radar
 
Schau dir mal Andorra 2D oder GLScene an (zweiteres basiert auf OpenGL)....damit sollte ein Radar ohne Performance-Probleme zu schaffen sein.

Es liegt aber generell nicht am "Limit von Delphi", sondern wohl eher an deinem implementierten Algorithmus, warum es mit GR32 nicht richtig funzt.
Wie bereits gesagt, unterstützt GR32 Transparenz nicht halbgar, sondern ziemlich gut, und die Performance ist normalerweise auch sehr gut...
Von dem her: Hast du evtl. ein Code-Schnippsel von deinem Radar-Code? Dann kann man hier sicher gemeinschaftlich optimieren :-)

Btw....bezüglich DirectX: Für ein Radar brauchst du ganz sicher keine Erweiterungen von DX10 oder DX11...und DX9-Header findest du sicher noch genug :-)

terence14 29. Mär 2013 06:52

AW: Rotation von Grafiken, Transparenz, Radar
 
Um dem nervenden Flackern beizukommen, gerade wenn ein TTimer
Komponente mitwirkt, die Linien auf TImages bzw. TPaintBoxes schreibt,
bewährt sich im Form1.FormCreate() ein Form1.DoubleBuffered:=True;

MfG,
terence


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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