Wenn 3D-Modelle programmatisch erzeugt werden sollen, wie z.B. die Einlegeböden in einem Schrankkonfigurator, dann geht dasd sehr einfach, solange das Objekt konvex ist. Bei konkaven Objekten wirds kompliziert. Wir erklären den Unterschied und was man machen kann.
Fangen wir mit dem Gegenteil an. Für eine konvexe Geometrie gilt: Wenn Du Dir zwei beliebige Punkte auf Ihrer Oberfläche aussuchst, dann liegt die gesamte Verbindungslinie im Inneren des Objektes.
Alle anderen Geometrien sind konkav. Schau Dich mal um. Nahezu alle Objekte, die in der realen Welt vorkommen, sind konkav.
In three.js lassen sich konvexe Geometrien ziemlich leicht mit der (ConvexGeometry)[https://threejs.org/docs/#examples/en/geometries/ConvexGeometry] erzeugen:
const points = [
new THREE.Vector3( 100, 0, 0 ),
new THREE.Vector3( 0, 100, 0 ),
new THREE.Vector3( 0, 0, 100 ),
new THREE.Vector3( 0, 0, 0 )
]
const geometry = new THREE.ConvexGeometry( points )
Man erzeugt also einfach die Eckpunkte und lässt daraus die Geometrie ermitteln. Mit O(n log(n)) ist das auch gar nicht so langsam.
Das hätte man gern auch für allgemeine Geometrien: Einfach eine Punktwolke erzeugen und daraus die Geometrie ermitteln.
Leider ist das nicht ganz so einfach. Das wird auch schnell klar, wenn man sich überlegt, dass es überhaupt nicht eindeutig ist, wie das Objelt zu einer gegebenen Punktwolke aussehen soll:
Daher gibt es folgende Möglichkeiten:
Welcher dieser Algorithmen zum Einsatz kommt, hängt natürlich sehr vom Objekt ab, dass modelliert werden soll.