Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 08, 2024 18:57

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Sep 25, 2014 07:51 
Offline
DGL Member

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?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 08:08 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Welche Form hat die Vergleichsgeometrie? Welche Vertices willst du womit vergleichen?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 11:28 
Offline
DGL Member
Benutzeravatar

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.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 18:51 
Offline
DGL Member

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:
  1. Alle Vertices der IST Geometrie werden durchiteriert
  2. LookAt - Position wird auf Position des Vertex der IST-Gemetrie gesetzt
  3. LookAt - Position ein wenig Aufschlag in Richtung Normalvektor des Vertex
  4. LookAt - Richtung in die entgegengesetzte Richtung der Normalen schauen lassen
  5. Picking / Select durchführen
  6. Dem SelectBuffer die Z-Werte entnehmen
  7. Den Abstand ermitteln
  8. 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)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 20:14 
Offline
DGL Member
Benutzeravatar

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.

_________________
Meine Homepage


Zuletzt geändert von yunharla am Do Sep 25, 2014 20:17, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 20:15 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 23:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kannst du mal ein Bild Faken so wie du dir das vorstellst? Nicht das man aneinander vorbei redet.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 07:32 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 15:44 
Offline
DGL Member
Benutzeravatar

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....

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 18:57 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 26, 2014 23:53 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.022s | 17 Queries | GZIP : On ]