Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Hallo zusammen, ich würde gerne zwei in die Scene geladene Geometrien so miteinander vergleichen, das die eine Geometrie an allen Vertices in Abhängigkeit des Abstandes zur anderen Geometrie eine Farbe zwischen grün und rot annimmt.
Ich könnte mir sehr gut vorstellen, dass diese Aufgabe mit Hilfe von Shadern realisiert werden könnte.
Wenn ich aber mal ganz rudimentär / altertümlich an diese Aufgabe rangehe, dann könnte man doch gewisse Vertices mit Hilfe ihrer Normalen durch die Geometrien tracen (Picking) und sich die Koordinaten der "durchstoßenen, unterschiedlichen" Geometrien auslesen und somit den Abstand ermitteln.
Aber das fühlt sich schon beim hinschreiben nicht gut an.
Hat jemand eine gute Idee, wie man diese Aufgabe recht elegant lösen kann?
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Coolman1974 hat geschrieben:
Wenn ich aber mal ganz rudimentär / altertümlich an diese Aufgabe rangehe, dann könnte man doch gewisse Vertices mit Hilfe ihrer Normalen durch die Geometrien tracen (Picking) und sich die Koordinaten der "durchstoßenen, unterschiedlichen" Geometrien auslesen und somit den Abstand ermitteln.
Aber das fühlt sich schon beim hinschreiben nicht gut an.
Ich verwende den gleichen Ansatz fuer mein CSG System. Auf der CPU alleine klappt das sehr gut und ist voellig ausreichend fuer die meisten Faelle. Wenn man etwas mehr Performance braucht laesst sich das auch ziehmlich leicht nach OpenCL oder sowas portieren.
Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Danke schon mal für eure bisherigen Antworten.
end:
Zitat:
Welche Form hat die Vergleichsgeometrie? Welche Vertices willst du womit vergleichen?
Egal, das können unterschiedlichste Formen sein. Man kann sich das so vorstellen, das man eine "SOLL" Geometrie hat mit der man die "IST" Geometrie vergleichen kann. Bereiche die z.B. bei der IST-Geometrie ein wenig "verbeult" sind, also dem SOLL-Zustand nicht so ganz entsprechen, werden dann etwas in die Richtung rot eingefärbt (Der Abstand zwischen SOLL und IST)
yunharla: Also gehe ich Recht in der Annahme, das du in etwa wie folgt vor gehen würdest:
Alle Vertices der IST Geometrie werden durchiteriert
LookAt - Position wird auf Position des Vertex der IST-Gemetrie gesetzt
LookAt - Position ein wenig Aufschlag in Richtung Normalvektor des Vertex
LookAt - Richtung in die entgegengesetzte Richtung der Normalen schauen lassen
Picking / Select durchführen
Dem SelectBuffer die Z-Werte entnehmen
Den Abstand ermitteln
Anhand des Abstandes den Vertex einfärben
Kann man das so machen? Würde man das so machen? (Ich kann es mir kaum vorstellen. Geht bestimmt noch einfacher)
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Naja auf der GPU würde ich so nicht arbeiten. Mein System macht folgendes
1.) Durch alle Normalen der Soll Geometrie 2.) Mit Soll-Normale und einen Soll-Vertex mit erstelle ich eine Ebene 3.) Durch alle Normalen der Ist Geometrie 4.) Durch alle Vertices der Ist Geometrie 5.) Abstand des Soll-Ebene zum Soll-Vertex berechnen
wenn dein Punkt hinter der Ebene liegt schneidet die Ist Ebene deine Soll Ebene
Das kannst du wunderbar durch Transform Feedback jagen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde das einfach nicht auf der GPU rechnen (höchstens mit OpenCL oder so). Der Ansatz mit LookAt und rendern erscheint mir massiver overkill, der die Performance via Füllrate einfach töten wird.
Ich würde einfach auf der CPU über die Flächen oder Verticies (je nachdem, worauf du dich beziehen willst) iterieren und den nächstgelegenen Punkt der Zielgeometrie finden (dafür kann man eine Raumunterteilungstechnologie anwenden, um das schnell zu bekommen). Für den Abstand Punkt<->Fläche sollten sich Formeln finden lassen.
Die Frage dabei ist primär, ob du weißt, welche Verticies der IST Geometrie zu welchen der SOLL Geometrie „gehören“. Wenn ja, dann ist es natürlich sinnvoller, den Abstand direkt zu bestimmen (Subtraktion). Wenn nein, dann ist der obige Ansatz denke ich ganz ok.
viele Grüße, Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Das soll mal veranschaulichen, was das Ziel sein soll. Die farblich unterschiedlichen Bereiche sollen dem Betrachter die Abweichung von den Sollwerten darstellen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Oha da hast du dir ja ganz schoen was aufgehalst. Eventuell waere es bei so komplexen Objekte auch sinnvoll einen Voxelbaum zu nehmen. Dort muesstest du dann Ueberpruefen ob sich ein Voxel aendert wenn du das 2 Objekt laedst und dann noch mal anhand der Daten im Baum die differenz.
Theoretisch koenntest du dir auch sowas aehnliches wie den Stencil Buffer bauen....
Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Zitat:
Oha da hast du dir ja ganz schoen was aufgehalst. Eventuell waere es bei so komplexen Objekte auch sinnvoll einen Voxelbaum zu nehmen. Dort muesstest du dann Ueberpruefen ob sich ein Voxel aendert wenn du das 2 Objekt laedst und dann noch mal anhand der Daten im Baum die differenz.
OK!?! Es wäre wirklich sehr nett von dir, wenn du mir das ein wenig detaillierter erklären könntest.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
In welcher Form liegen die Daten vor? Als Mesh? Als Punktwolke von einem 3D Scanner? Oder was anderes?
Kannst du garantieren, dass 2 Objekte gleich ausgerichtet sind? Selbst wenn du ein und das Selbe Objekt zwei mal einscannst und nur leicht verdrehst, hättest du sonst Abweichungen. Das ist, denke ich, das erst Problem was du lösen musst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.