Wie erstellt man zur Laufzeit ein 3D Objekt?
-
Das ist noch die einfache Frage, aber das Problem hier ist komplizierter, vielleicht hat ja doch jemand eine Idee.
Was sind die Eingangsdaten? Es sind 3D Bilder von einer speziellen Kamera. Es gibt 64x16 Pixel, jeder Pixel hat einen z-Wert. Ich möchte daraus ein Mesh bilden, aber ich filtere mehrere Objekte aus dem Bild heraus, so dass ich am Ende mehrere Objekte habe. Jedes Objekt soll die Vertices und Faces speichern.
Und da liegt nun das Problem. In welcher Reihenfolge müssen die Vertices darein, damit es später ohne Probleme gezeichnet werden kann? Oben links im Bild kann ich nicht anfangen zu suchen, wenn grosse Lücken im Objekt sind, versucht er später diese Lücken zu schliessen, weil das Dreieck nicht komplett ist und er sich den nächsten freien Vertex aussucht.
Ich hoffe, das Problem ist irgendwie klar geworden. Zur Zeit sehe ich keine Idee, wie ich alle Objekte sauber in der richtigen Reihenfolge zeichnen kann. Ich meine, statische Normale Objekte fangen ja auch irgendwo mit einem Face-Index 0 an und hangeln sich durch ein kompliziertes Objekt zum letzten Face.
Beispiel: Wie macht man das bei einer 3D Person? Fängt man unten bei den Beinen an, arbeitet sich hoch und wo und wie entscheidet man dann, welcher Arm zuerst abgehandelt wird? Da muss es doch Algorithmen für geben oder? Andere Software, die Objekte in Vertex- und Facelisten unterteilt, kann das ja auch.
Vielen Dank für Eure Ideen!
-
mach einfach eine HeightMap mit 64x16 und weis dort die entsprechende Höhe zu:
hol dir z. B. Milkshape3D um die Daten zu visualisieren:
[hier war mal Code]
-
Danke für den langen Text, aber ich muss die Daten selbst visualisieren
Muss alles in meiner Software stattfinden.
-
JPSelter schrieb:
Danke für den langen Text, aber ich muss die Daten selbst visualisieren
Muss alles in meiner Software stattfinden.das ist natrülich auch kein Problem:
[hier war mal Code]
-
OK, dann liegt hier ein Missverständnis vor. Das Problem ist nicht, die Daten auszugeben, sondern in der korrekten / sinnvollen Reihenfolge in die Vertex- und Facelisten zu bekommen. Auf die Reihenfolge kommt es an, und habe ich keine Idee, wie ich das machen soll.
Könntest Du Deinen Code bitte wieder entfernen (trotzdem danke), man muss soviel scrollen und es wird unübersichtlich

-
JPSelter schrieb:
Das Problem ist nicht, die Daten auszugeben, sondern in der korrekten / sinnvollen Reihenfolge in die Vertex- und Facelisten zu bekommen. Auf die Reihenfolge kommt es an, und habe ich keine Idee, wie ich das machen soll.
warum soll das mit einer Heightmap nicht funktionieren?
-
Wieso denn eine Heightmap? Wie soll mir die innerhalb meiner Software helfen? Dadurch löst sich das Grundproblem ja nicht. Lies Dir nochmal meinen ersten Post oben durch.
-
Reihenfolge der Vertices ist egal. Man benutzt einfach Indexlisten. f'`8k
Gruß, TGGC (\-/ returns)
-
Ich glaube, ich habe das hier gestellte Problem verstanden so wie es der Autor meint. Wenn man z.B einfach 6 Punkte gegeben hat kann man verschiedenste Objekte daraus erstellen.
z.B
1----------------2 \ / \ / \3/ 4 / \ / \ / \ 5--------------6oder z.B
1 2 | \ / | | \ / | \ \3 / \ \ / / | | / 4 \ \ / \ | | | \ | \ / \| \5 6(Naja das sollen Dreiecke sein , ist nen Bischen schwiereig diese darzustellen)
Aber wie man sieht erhält man ja völlig v erschiedene Objekte wenn man die gegebenen Punkte in einer anderen Reihenfolge zu Polygonen zusammensetzt.
Ich denke, der Autor möchte wissen, WIE man aus einer Menge gegebener Punkte eine sinvolle Reihenfolge bestimmt um daraus die Objekte zu erzeugen.Eine Antwort für das Problem habe ich leider auch nicht.
Icf stelle mir das Problem z.B wie bei der Computer-Tomographie(oder wie man das ding nennt, das 3D Bilder z.B vom menschlichen kopf erstellt)
Nun möchte man daraus ein Bild des schädels haben. Bekommt aber nur einzelne Meßpunkte. Nun macht es wenig sinn ein Polygon aus Meßwerten vom linken Ohr zur Nasenspitze zu ziehen. Wie bestimmt man also aus den gegeben Meßpunkten ein 3D Objekt des Schädels.
(So stelle ich mir in etwa das Problem des Autors vor)
-
Ich denke, der Autor möchte wissen, WIE man aus einer Menge gegebener Punkte eine sinvolle Reihenfolge bestimmt um daraus die Objekte zu erzeugen.
naja Bildverarbeitungsproblem löst man zwar nicht schnell so im Forum beim "vorbeilesen", aber ich versuchs trotzdem: du hast ja von der Kamera das Bild des Objektes, aus dem du das 3D Modell erstellen willst - dass musst du irgendwie in eine Binärbild umwandeln - vielleicht wird ja das 3D Objekt in einer BlueBox gescannt, dann kann man eine einfach Punktoperation verwenden wo man einfach sagt zum Objekt gehört alles was nicht Blau ist (so in etwa der Farbe der BlueBox entspricht) - also einfach ein Schwellwertverfahren - das hängt jetzt aber ganz stark von deiner Anwendung ab - wie man das macht - am Ende solltest du wissen was ein ObjektPixel ist und was nicht
Immer wenn es jetzt verschieden Alternativen gibt beim Triangulieren, dann machst du folgendes:
in Binärbild nachgucken welche Version die meisten ObjektPixel enthält - diese nimmst du dann
-
@Andreas: Genauso stellt sich mein Problem.
Die Objekte herausbekommen ist kein Problem. Ich mache das über Häufungen in z-Blöcken. Wenn also die z-Werte von 0m bis 7m gehen, dann schaue ich wo sich Häufungen ergeben, z.B. zwischen 2.5m und 2.8m. Das funktioniert aber auch nur mit Oberflächen, die senkrecht zur Blickrichtung stehen. Da seht Ihr nun auch das konkrete Problem: Wenn ich 2 Objekte habe, das eine im Block 2.5m-2.8m und das andere im Bereich 3.4m-4.0m, in welcher Reihenfolge kommen die Vertices in die Indexliste? Ich weiss, eine Lösung wird es hier nicht geben, aber ich hoffe auf Ideen, die in die richtige Richtung gehen.
-
Surface Reconstruction from Unorganized Points
- wobei man bedenken sollte, dass die daten gar nicht so unorganisiert sind.stichwort augmented reality hilft dir vielleicht auch