Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Linie als Objekt im Viewport3D (Firemonkey) (https://www.delphipraxis.net/178167-linie-als-objekt-im-viewport3d-firemonkey.html)

Legnad 20. Dez 2013 13:04

Linie als Objekt im Viewport3D (Firemonkey)
 
Hallo miteinander,

zunächst möchte ich einmal kurz anmerken, dass ich mich seit ein paar Jahren nicht mehr mit Delphi beschäftigt habe und es erst kürzlich wiederentdeckt habe. Daher bitte ich um Verständnis, falls ein paar idiotenhafte Fragen meinerseits aufkommen sollten.

Ich habe in einer "mobilen Firemonkey-Anwendung" einen TViewport3D auf die Form gelegt und darin ein bisschen experimentiert. Mein Problem ist eigentlich ein ganz simples. Ich versuche eine Linie zwischen zwei Punkten zu zeichnen.

Zuerst erschien es mir logisch, das mit einem TPath3D umzusetzen, jedoch ist das nach meinem Verständnis ein flächenartiges Objekt (mit 2D-Koordinaten), welches dann entsprechend im Raum gedreht werden muss. 1) Oder nicht?

Dann dachte ich, dass ich mit einem TMesh, bei dem man ja die Vertices angeben kann, doch einfach auch eine Linie zeichnen könnte. Habe daher schon viel Zeit zugebracht, das hinzukriegen, doch es will einfach nicht und daher meine Frage: 2) Ist das mit einem TMesh überhaupt möglich oder kann man damit nur Dreiecke erzeugen?

Zwischendurch dachte ich auch mal, dass das doch mit einem TGrid3D funktionieren könnte, aber da ist mir nicht ganz klar, wie das ganze gehen soll. Die Dokumentation gibt leider auch nicht allzu viel preis.

Auch hatte ich die Idee die Linien mit sehr dünnen TCylindern zu erzeugen, aber das ist einfach alles nicht optimal.

Daher: 3) Liefert irgendeine Komponente eine TLine oder TLine3D, mit dem so etwas recht einfach umzusetzen wäre? Oder was ist die beste Möglichkeit um 3D-Linien (damit meine ich von (X1, Y1, Z1) zu (X2, Y2, Z2)) in einem Viewport3D / Form3D darzustellen? Am liebsten wäre mir das ganze als Objekt, dass man dann mit "AddObject" zum Viewport hinzufügen könnte.


Danke schonmal für das aufmerksame Lesen!

Freundliche Grüße

Christian

Thom 20. Dez 2013 13:35

AW: Linie als Objekt im Viewport3D (Firemonkey)
 
Hallo Christian,

Du hast vollkommen Recht: TPath3D kann tatsächlich nur Kurven in einer Ebene darstellen und TMesh3D nur Polygonobjekte. Bei TGrid3D kannst Du Dir aber mal anschauen, wie dort die Linien gezeichnet werden: Dazu wird ein class helper für TCanvas3D verwendet, der Methoden für die Ausgabe einzelner oder mehrerer Linien enthält.

Willst Du selbst ein einfaches Linienobjekt erstellen, kannst Du das von TControl3D ableiten und die Methode Render überschreiben.

Legnad 20. Dez 2013 16:01

AW: Linie als Objekt im Viewport3D (Firemonkey)
 
Ok, vielen Dank. Ich werd's wohl ableiten. Dazu kommen später bestimmt noch fragen auf. :-D

Aber so mal zum Verständnis noch eine Frage vorweg: Wann wird Render denn aufgerufen? Momentan habe ich den Viewport und wenn ich darin Inhalte ändere (Objekte verschiebe), dann kann ich das sehen und das Bild wird quasi permanent neu gerendert. In meinen früheren Projekten habe ich immer ein Bild aufgebaut und erzeugt. Dann gelöscht und neu aufgebaut, das ganze dann beispielsweise per Timer gesteuert.

Wenn ich nun den Befehl DrawLine (von TContext3D) ausführe, bezieht sich das doch nur auf ein Frame, bzw. "Context"?

Freundliche Grüß'le

Thom 20. Dez 2013 17:50

AW: Linie als Objekt im Viewport3D (Firemonkey)
 
FMX rendert (meistens) nur dann, wenn sich irgend etwas geändert hat. Dazu werden für alle TControl3D-Objekte die Methode Render aufgerufen. Das Zeichnen wird von der GPU übernommen, das Ergebnis per Bitmap in den Hauptspeicher geholt und dann mit den jeweiligen Mitteln des Betriebssystems angezeigt. Deshalb ist auch FireMonkey in der jetzigen Form für Spiele vollkommen ungeeignet, da man keine Frameraten erreicht, die für eine flüssige Darstellung komplexerer Szenen notwendig wären.

Animationen sind in gewissen Grenzen natürlich auch möglich. Aber mal als Vergleich: Da mein Neffe gern Minecraft spielt, habe ich dieses in Java geschriebene Spiel auch auf meinem Laptop. Während das flüssig läuft (natürlich auch neuere 3D Spiele - mir geht es hier um den Vergleich Java <-> kompiliertes Programm), wirken selbst einfache Szenen mit FMX sehr zäh. Viele Dinge sind momentan mit FireMonkey gar nicht machbar, da man ständig mit Bugs und nachweisbar ungetesteten Methoden zu kämpfen hat. Ich wünsche Dir also eine hohe Frustrationstoleranz und viel Energie! :thumb:


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