Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   C# 3D-Objekt / Mantelfläche darstellen (https://www.delphipraxis.net/199907-3d-objekt-mantelflaeche-darstellen.html)

4dk2 1. Mär 2019 09:11

3D-Objekt / Mantelfläche darstellen
 
Hallo zusammen,

ich versuche mich grad irgendwie durchs Thema 3D und Darstellung von Objekten durchzubeißen :x.
Aktuell versuch ich im OpenTK (also per OpenGL) nen 3D Objekt, von dem ich die Mantelfläche in
xyz Koordinaten habe, darzustellen.
Aber so ganz weis ich noch nicht was da nun die richtige Herangehensweise ist.

Ganz einfache Beispiel, nen 4-Eck.
besteht im Prinzip ja aus 8 Koordinaten.
Aber um es komplett darzustellen, also die Aussenflächen, muss man (4*4) 16 Koordinaten übergeben (wenn man als Quad zeichnet).

Bei nem Quadrat ist das ja noch recht simpel, aber wenn man nun nen kompliziertes Objekt hat, weiss ich nicht recht
wo ich da ansetzten soll.

ich vermute mal das man die "Roh-Daten" erstmal für 3D aufbereiten muss.
Wenn da jemand ne Idee hat(framework kennt, das das vereinfacht), bin für alles offen :-D

Der schöne Günther 1. Mär 2019 09:40

AW: 3D-Objekt / Mantelfläche darstellen
 
Disclaimer: Ich kenne OpenTK nicht.

Du hast nur Eckpunkte (Vertices)? Dann fehlt dir ein Algorithmus zur Triangulation. Wenn ich meine Vorlesungen noch richtig im Kopf habe dann ist die Delaunay-Triangulierung ein Klassiker.

Hast du ganz sicher nur eine Punktwolke? Damit ist die Form ja noch keineswegs bestimmt. Die konvexe Hülle könntest du im 3D-Raum noch selbst bestimmen und darüber triangulieren, aber das ist nichts was man mal an zwei Tagen macht (zumindest ich nicht).

jsp 1. Mär 2019 09:53

AW: 3D-Objekt / Mantelfläche darstellen
 
Mein Favorit:
http://glscene.sourceforge.net/wikka/

Gruss, Jörn

4dk2 1. Mär 2019 11:15

AW: 3D-Objekt / Mantelfläche darstellen
 
Zitat:

Zitat von jsp (Beitrag 1426689)
Mein Favorit:
http://glscene.sourceforge.net/wikka/
Gruss, Jörn

hab ich bei Delphi auch immer benutzt, aber da in C#, fällt es flach.


Zitat:

Zitat von Der schöne Günther (Beitrag 1426686)
Disclaimer: Ich kenne OpenTK nicht.

Du hast nur Eckpunkte (Vertices)? Dann fehlt dir ein Algorithmus zur Triangulation. Wenn ich meine Vorlesungen noch richtig im Kopf habe dann ist die Delaunay-Triangulierung ein Klassiker.

Hast du ganz sicher nur eine Punktwolke? Damit ist die Form ja noch keineswegs bestimmt. Die konvexe Hülle könntest du im 3D-Raum noch selbst bestimmen und darüber triangulieren, aber das ist nichts was man mal an zwei Tagen macht (zumindest ich nicht).


Delaunay-Triangulierung, hab ich vorhin auch aus zufall gefunden, und auch nen beispiel für den Algorithmus. Werd ich mir mal nächste Woche anschauen.
Ja im Prinzip hab ich nur ne "Punktwolke", ist ein Ergebnis aus ner Berechnung. Aber ich will die Berechnung nicht für die Darstellung anpassen, was ja theoretisch möglich ist.

Das mit der hülle hab ich mich aber auch gefragt, ob das dann mit Delaunay funktioniert, oder ob der dann wenn wir beim Quadrat bleiben,
auch innen die dreiecke berechnet...

Irgendwie find ich, findet man nicht allzuviel zu dem Thema. Dachte in zeiten von 3D Druckern und den dazugehörigen 3D Scannern, ist das schon Standart :lol:

Jens01 1. Mär 2019 13:11

AW: 3D-Objekt / Mantelfläche darstellen
 
Wenn Du aus einer Punktwolke 3D Objekte machen willst, ist das schon die etwas höhere Kunst. Das geht auch mit Delaunay (auch im 3D). Ist aber sehr aufwendig.
Was ist das für eine Punktwolke. Wo kommt die her und was soll daraus werden?

... habe gerade geguckt?
Zitat:

Ganz einfache Beispiel, nen 4-Eck.
besteht im Prinzip ja aus 8 Koordinaten.
Ein 4-Eck hat 8 Koordinaten?? Naja, eine Viereck hat 4 Koordinaten, oder?

Jens01 1. Mär 2019 13:21

AW: 3D-Objekt / Mantelfläche darstellen
 
Zitat:

Ganz einfache Beispiel, nen 4-Eck.
besteht im Prinzip ja aus 8 Koordinaten.
Aber um es komplett darzustellen, also die Aussenflächen, muss man (4*4) 16 Koordinaten übergeben (wenn man als Quad zeichnet).
Ich vermute, Du meinst einen Quader oder Würfel. Die haben 6 Seitenflächen. Jede Seite besteht aus 2 Dreiecken. Jedes Dreieck aus 3 Koordinaten.
=> 6 Seiten x 2 Dreiecke x 3 Koordinaten = 36 Koordinaten

4dk2 1. Mär 2019 13:41

AW: 3D-Objekt / Mantelfläche darstellen
 
Zitat:

Zitat von Jens01 (Beitrag 1426732)
Wenn Du aus einer Punktwolke 3D Objekte machen willst, ist das schon die etwas höhere Kunst. Das geht auch mit Delaunay (auch im 3D). Ist aber sehr aufwendig.
Was ist das für eine Punktwolke. Wo kommt die her und was soll daraus werden?

... habe gerade geguckt?
Zitat:

Ganz einfache Beispiel, nen 4-Eck.
besteht im Prinzip ja aus 8 Koordinaten.
Ein 4-Eck hat 8 Koordinaten?? Naja, eine Viereck hat 4 Koordinaten, oder?

jaaa ein würfel :P, und ja wenn man den trigonometrisch definiert sind es 36, weiss nicht was da oben bei mir los war :wall:

Das ist im Prinzip ne Berechnung von nem Gegenstand.
Die Berechnung liefert die komplette Aussenhülle des Körpers.

Ich könnte funktional dran gehen und die Darstellung holt sich per x,z dann y oder so.
Sowas hab ich schonmal per "Heightfield" in Opengl gemacht:
https://blogs.igalia.com/itoral/2016...-terrain-mesh/
Aber, wie bekommt man dann das zu nem geschlossenen körper :gruebel:, deswegen hab ich das auch erstmal verworfen.

Jens01 1. Mär 2019 14:16

AW: 3D-Objekt / Mantelfläche darstellen
 
Zitat:

Aber, wie bekommt man dann das zu nem geschlossenen körper , deswegen hab ich das auch erstmal verworfen.
Du setzt alle Dreiecke entsprechend aneinander und schon ist es ein geschlossener Körper.

4dk2 1. Mär 2019 14:19

AW: 3D-Objekt / Mantelfläche darstellen
 
Zitat:

Zitat von Jens01 (Beitrag 1426743)
Zitat:

Aber, wie bekommt man dann das zu nem geschlossenen körper , deswegen hab ich das auch erstmal verworfen.
Du setzt alle Dreiecke entsprechend aneinander und schon ist es ein geschlossener Körper.

ich meine das heightfield :P

Medium 1. Mär 2019 15:56

AW: 3D-Objekt / Mantelfläche darstellen
 
Heightfields werden üblicherweise einfach über eine Ebene "verkörpert", die entsprechend fein unterteilt ist, und von der man die Lage im Raum vorab schon weiß. Da muss man dann einfach nur noch die Y-Koordinaten dem Heightfield anpassen. (Genau genommen muss man die Punkte entlang ihrer Normalen um einen Betrag verschieben, den das Heightfield vorgibt. Bei einer XZ-Ebene vereinfacht sich das zu "Y-Koordinaten ändern".)

Problem bei Heightmaps: Du kannst nur in eine Richtung konkav sein, und es gibt kein "unten" in dem Sinne. Wenn du also komplexe und beliebige Körper hast, kommst du um eine Triangulierung nicht herum. Selbst mit Delaunay kann es dabei aber noch Stellen geben, die ggf. nicht das gewünschte Ergebnis liefern. (Insbesondere sind dünne Regionen kritisch, bei denen die Punktabstände "durch das Volumen" kleiner sind als die entlang der eigentlichen Oberfläche.) Genau genommen ist eigentlich kein Verfahren wirklich 100%, und welches sich besser eignet hängt stark von der Art der Punktwolke ab. Ein Körper ist durch eine Wolke schlicht nicht ausreichend definiert, und man kann nicht viel mehr machen als versuchen die fehlenden Daten (Kanteninformationen) hinzu zu dichten.
Das ist wie beim Vergrößern von Bitmaps: Man kommt bis zu einem gewissen Grad ganz gut klar, muss den Algo aber auch hier passend zum Bildinhalt wählen für das beste Ergebnis, und ein 100%iges Ergebnis wird man nie erreichen - erst recht nicht im verallgemeinerten Fall.


Wenn deine Berechnung, die zu der Wolke führt, auf einem parametrischen Volumen basiert hast du allerdings noch eine ganz brauchbare Alternative, da hier zumindest für jeden Punkt im Raum ganz klar bestimmt werden kann, ob er Teil des Volumens ist oder nicht. (Ich hatte das mal für Quaternion-Fraktale gemacht, auf die trifft das z.B. zu.) Das naive Verfahren dazu nennt sich "Marching Cubes".


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf