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

Aktuelle Zeit: Do Jul 10, 2025 08:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Selection ohne GL_SELECT
BeitragVerfasst: So Sep 17, 2006 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich möchte eine Selektion ohne die standard OpenGL-Selektion machen.
bzw genauergesagt, ich habe ein Objekt (z.B. ne Sphere) die ja aus lauter Triangles besteht. Der User soll nun einfach via click ein Triangle auswählen können.

Wäre zwar kein problem jedes Triangle einzeln zu zeichen und dann mit GL_SELECT zu arbeiten, aber das möchte ich hier bewusst nicht tun.

Mein ansatz sähe jetzt so aus, das ich mit gluProject die 3D Koordinaten von den Triangle-Vertices in 2D umrechne und dann mit nem einfachen 2D-PointInTri verfahren überprüfe ob der User dieses Triangle angeklickt hat.

Allerdings.. rein vom gefühl her wird das glaub ich sehr schnell sehr langsam (bei höher aufgelösten Objekten), oder?


Hätte evtl jemand eine andere Idee das zu realisieren? Bzw irgendeine idee es zu beschleunigen? (Die Objekte sind dynamisch = Vorberechnete Occtrees etc gehen nicht)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 17:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Vielleicht wäre es auch eine Überlegung wert, vom Betrachter in Richtung Maus einen Strahl auszusenden und dann per Line-Triangle-Intersection das entsprechende Dreieck zu finden. Ob deine oder meine Idee performanter ist, kann ich aber auch nicht sagen.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 17:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Jedes Dreieck mit einer anderen Farbe rendern und dann die Farbe auslesen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection ohne GL_SELECT
BeitragVerfasst: So Sep 17, 2006 19:00 
Offline
DGL Member

Registriert: Di Aug 26, 2003 20:08
Beiträge: 81
Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Aya hat geschrieben:
Hätte evtl jemand eine andere Idee das zu realisieren? Bzw irgendeine idee es zu beschleunigen? (Die Objekte sind dynamisch = Vorberechnete Occtrees etc gehen nicht)


In meiner PAPPE Physikengine habe ich einen dynamischen Octree implementiert, der speziell für solche dynamische Objekte vorgesehen ist. Du kannst dir gerne mal meinen Code anschauen, copy&pasten und verwenden. Den entsprechenden Source Code zur Physikengine, und entsprechend auch zum dynamischen Octree, findest du unter http://bero.0ok.de/opensource/pappe/pappe.zip .
Die Grundidee ist zunächst simpel. Die Octree Nodes werden on-the-fly in Echtzeit verwaltet (angelegt und wieder zerstört), wobei bei jedem Node eine Pointer Linklist, die dann die Objekte enthält, verwaltet wird, und jedes Objekt hat wiederum eine LinkListItem Struktur (pro Objekt einmal fest allokatiert, so dass man zur Laufzeit kein GETMEM/FREEMEM/NEW/DISPOSE usw. ausführen muss, sondern nur beim Objekt anlegen und bei der Freiigabe des Objektes am Programmende).
Diese LinkListItems von den Objekten werden dann dynamisch in den Octree Nodes verlinkt, näturlich hat ein LinkListItem immer nur ein Node. wo das Objekt sich gerade befindet, als Owner. Ansonsten habe ich da auch eine externe Dynamischen-Octree Klasse mit dem gleichen Prinzip von mir seperat ( http://bero.0ok.de/downloads/BeRo3D.zip ), aber sie ist noch soweit ungetestet.

BeRo

_________________
Behindert ist man nicht, behindert wird man.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 19, 2006 12:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Das schnellste ist es über Farben zu machen. Die Projektionsmatrix kann dabei auf die gleiche weise erzeugt werden wie beim normalem Picking. zusätzlich sollte der Viewport mit glviewport(0,0,1,1); entsprechend verkleinert werden. (Es wird nur 1 Pixel gebraucht)
Da mit die Grafikkarte nicht durch die zwangssynkronisation ausgebrbremst wied die durch glreadpixels erzwungen wird, mach es Sinn ein FBO zu benutzen und dieses nicht sofort auszulesen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 19, 2006 13:36 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hi,

also das mit den Farben sollte wohl das schenllste sein (zumal man es pro drehung nur einmal berechnen muß), aber auf grund der Fragmente (Pixelfehler - die an Kanten existieren) oder der Tiefe des Z Buffers (die irgendwo beschränkt ist) habe ich mich für meine projekte dagegen entschieden.

Performance:
Ich arbeite auch mit Ray Triangle Intersect und prüfe alle Dreieke auf Intersection (inkl. check der Seite - Front, Back).
Wenn man da einen schenllen algorithmus verwendet (gibts im Netz) sollte das angemessen schnell gehen.
Bei mir ist das doppelt so schnell, wie OpenGL Selection. (jeodch funktioniert alles beides recht schnell und die optimierungen spielen wohl nur bei on the fly selection einen rolle).
Einziges Problem bei manueller selction ray trinagle intersection: Ich kann nur exakt mit einem punkt arbeiten und habe keine möglichkeit gefunden eine Pickmatrix mit mehreren Punkten zu verwenden, damit ich auch Intersections bekommen, wenn ich mich leicht neben den teil befinde. (da bekomme ich halt jetzt exakt keine intersection).

Octree: könnte helfen, leider habe ich davon noch keine Ahnung (muß mich wohl unbedingt mal mit beschäftigen)

grüße
unser 69


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.007s | 14 Queries | GZIP : On ]