AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Linie als Objekt im Viewport3D (Firemonkey)
Thema durchsuchen
Ansicht
Themen-Optionen

Linie als Objekt im Viewport3D (Firemonkey)

Ein Thema von Legnad · begonnen am 20. Dez 2013 · letzter Beitrag vom 20. Dez 2013
Antwort Antwort
Legnad

Registriert seit: 23. Jan 2007
16 Beiträge
 
Delphi XE5 Professional
 
#1

Linie als Objekt im Viewport3D (Firemonkey)

  Alt 20. Dez 2013, 14:04
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
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Linie als Objekt im Viewport3D (Firemonkey)

  Alt 20. Dez 2013, 14:35
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.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Legnad

Registriert seit: 23. Jan 2007
16 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Linie als Objekt im Viewport3D (Firemonkey)

  Alt 20. Dez 2013, 17:01
Ok, vielen Dank. Ich werd's wohl ableiten. Dazu kommen später bestimmt noch fragen auf.

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
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Linie als Objekt im Viewport3D (Firemonkey)

  Alt 20. Dez 2013, 18:50
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!
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 23:18 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