Registriert seit: 23. Jan 2008
3.686 Beiträge
Delphi 2007 Enterprise
|
AW: 3D-Objekt / Mantelfläche darstellen
1. Mär 2019, 16:56
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".
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
|