2016-06-18 12 views
3

Gibt es eine Möglichkeit, 3D-Modelle als 3D-Arrays darzustellen? Gibt es Bibliotheken, die .obj- oder .blend-Dateien als Eingabe verwenden und eine Array-Darstellung derselben angeben?Wie wird ein 3D-OBJ-Objekt als 3D-Array dargestellt?

Ich dachte, ich würde Objekt zerlegen und die Scheiben zu einem Bild exportieren. Ich würde dann diese Bilder in opencv verwenden, um Arrays für jedes Segment zu erstellen. Am Ende würde ich alle Arrays aller Slices kombinieren, um schließlich eine 3D-Array-Darstellung meiner .obj-Datei zu erhalten. Aber ich habe auf halbem Weg aufgegeben, weil es ein mühsam langer Prozess ist, die Bildscheiben zueinander auszurichten.

Gibt es eine andere indexbasierte Darstellung, die ich verwenden könnte, um 3D-Modelle im Code darzustellen?

Ein 3D-Array wäre sehr praktisch für meine Zwecke.

Antwort

1

Binvox kann verwendet werden, um eine Voxel-Darstellung eines 3D-Modells aus einer .obj Datei zu generieren.

Binvox-rw-py kann zum Lesen und Parsen der Datei .binvox verwendet werden, die oben generiert wurde.

Hier ist, was ich ein ein numpy Array erhalten verwendet:

>>> import binvox_rw 
>>> with open("chair.binvox","rb") as f: 
... ml = binvox_rw.read_as_3d_array(f) 
... 
>>> type(ml.data) 
<type 'numpy.ndarray'> 
>>> ml.data.shape 
(32, 32, 32) 
1

PyGame hat eine OBJFileLoader-Klasse. PyWavefront hat ein 3D-Objektmodell.

+0

Dieser Artikel sieht auch wie es erklärt, wie Sie das tun, was Sie tun möchten: http://www.nandnor.net/?p= 86 – Dan

1

Wenn ich richtig verstehe, möchten Sie eine Voxel-Darstellung von 3D-Modellen erstellen? So etwas wie die sichtbaren menschlichen Displays?

Ich würde einen der oben empfohlenen OBJ-Dateiladeprogramme verwenden, um das Modell in ein OpenGL-Programm zu importieren. Drehen und skalieren Sie entlang XYZ zu der gewünschten Ausrichtung.

Dann zeichnen Sie das Objekt mit einem Fragment-Shader, der jedes Pixel mit Z < 0,001 oder Z> = 0,002 verwirft (oder was Auflösung funktioniert - ich versuche nur, die Methode zu erklären). Dadurch erhalten Sie den ersten Bildausschnitt, den Sie speichern oder speichern. Löschen und zeichnen Sie dieses Mal erneut, indem Sie Z < 0.002 oder Z> = 0.003 wegwerfen. Da sich dasselbe Modell an der gleichen Position befindet, werden alle Ihre Schnitte ausgerichtet.

Sie wissen jedoch, dass OBJ (und fast alle anderen 3D-Formate) Oberflächenbeschreibungen sind, nicht solide? Sie sind innen wie Origami-Modelle hohl. So wird Ihre 3D-Array-Darstellung größtenteils leer sein.

Hoffe, das hilft.