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

Aktuelle Zeit: Fr Jul 18, 2025 11:22

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 30 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Object unter Mauszeiger herausfinden
BeitragVerfasst: Fr Jun 20, 2008 10:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

ich wollt fragen ob es ne einfache Funktion gibt um herauszufinden
welches Objekt sich gerade unterm Mauszeiger befindet, oder ob ich
das alles selbst berechnen muss?
Schonma Danke für die Hilfe...

MfG & Thx Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 20, 2008 11:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Gibt es, und nennt sich unter OpenGL "Selektion". Dazu gibts bei uns Tutorials und sehr viele Themen hier im Forum. Allerdings ist diese fast schon ein Relikt und mit so ziemlich allen aktuellen Treiber so langsam dass man die Finger davon lassen sollte. Eine einfach zu implementierende, flexiblere und schnellere Alternative ist die Farbselektion, dazu gibt es hier auch einige Themen im Forum. Prinzipiell rendert man seine Objekte dabei ohne Texturen, Beleuchtung, etc. aber mit einer festen Farbe (pro Objekt eine andere) in den hinteren Puffer, liest dann die Farbe an der Mausposition und kann dadurch ermitteln welches Objekt unter der Maus ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 20, 2008 11:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,
das mit den Farben wird wohl nix werden: Ich programmier grad an nem
Zauberwürfel, und da hat jedes Würfelelement eine andere Farbe...
Kann man das nich noch irgendwie anders machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 20, 2008 11:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Hi,

Die Farbselektion nutzt nicht die Farben die schlußendlich ausgegeben werden sondern du legst für jedes Objekt welches selektiert werden kann eine Farbe fest die nichts mit dem aussehen deiner Szene zu tun habt.
Dann Renderst du die Szene ohne Beleuchtung und ohne Texturen. Nach dem Rendern schaust du welche Farbe die Mausposition im Backbuffer hat und vergleichst diese mit den Selektionsfarben deiner Objekte und weist so welches Objekt unter der maus liegt.
Jetzt bereinigst du den Backbuffer wieder und Zeichnest die Szene so wie si aussehen soll, mit Beleuchtung, Texturen und ohne die Selektionsfarben.

Ich hoffe ich konnte dir mit der Erklärung helfen.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 20, 2008 12:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
OK, jetzt hab ich's verstanden ^^
THX


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 22, 2008 22:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ne Überlegung:
Um das noch zu optimieren, kann man bestimmt auch den Viewport ganz klein machen. Bei der Orginal OpenGL Selektion wurde das gemacht, um nur den Teil der Szene neu zu rendern, der direkt unter der Maus liegt.

Denkt ihr, dass das sinnvoll ist, oder machen die Statechanges den Vorteil kaputt?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 23, 2008 08:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Vom Prinzip her stimmt es. Nur hat die klassische Selektion nicht den Viewport angepasst sondern lediglich die Projektionsmatrix. Der zu selektierende Bereiche (1x1 Pixel) hat sich dann über den gesammten Viewport erstreckt.

Ich würde vermutlich eher die Clipping Planes setzen. Aber frag mich nicht wie das geht. Hab ich noch nie gemacht. Dabei kann man Flächen einstellen an denen die Grafikkarte clipt. Wie der Name ja schon sagt. Dann bleiben die Einstellungen für die Ansicht die Gleiche. Das war bei der klassischen Selektion immer so ein Knackpunkt, da man praktisch blind rendern musste. Jetzt geht es aber ob das Bild sonderlich aussagekräftig ist wage ich trotzdem mal zu bezweifeln.

Ich denke aber schon, dass es etwas bringen dürfte. Besonders bei wirklich vielen Flächen, denn dann werden die Flächen schon recht früh verworfen und nicht erst noch durch den Rasterizer gejagt. Der die dann ja wieder in den Framebuffer schreiben muss etc etc.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 23, 2008 13:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Warum so kompliziert, wenn es mit dem Scissortest doch ganz einfach zu realisieren ist. Einfach vorm Zeichnen der Szene für die Farbselektion eine Scissorbox rund um den Cursor festlegen (evtl. 4x4 Pixel, dass dürfte reichen) und dann die Szene mit aktiviertem Scissortest zeichnen. Alternative wäre dann evtl. noch das von der Grafikkarte eh ausgeführte Guard Band Clipping, aber ich glaub unter OpenGL geht das nicht bzw. die Reichweite für dieses Clipping ist nicht veränderbar (und erstreckt sich damit über die max. von der Grafikkarte anzeigbare Viewportreichweite, i.d.R. 4k x 4k).

Edit : Ich hab kurz in PjW getestet. Ich nutze dort eigentlich gluPickMatrix um eine Projektionsmatrix für den kleinen Auswahlbereich zu machen, und hab mal gegen den Scissortest gewechselt. Ergebnis : Die von der normalen Selektion her genutzte gluPickMatrix ist schneller.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 23, 2008 15:37 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich dachte Scissor arbeitet auf Fragmentebene wogegen die Clipplanes auf vertexebene arbeiten und somit früher abbrechen dürften wenn sie nicht im gewünschten Bereich liegen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 23, 2008 16:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja, der Scissortest arbeitet auf Fragmentbasis. In modernen 3D-Anwendungen liegt der Schwerpunkt aber eh meist genau dort (z.B. komplexe Shader, Overdraw, etc.).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 24, 2008 23:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

irgendwie find ich kein passendes Tutorial zur Farbselektion. Kein
Beitrag im Forum, kein Thema im DGL Wiki und auch nix bei Google.
Hat jemand n Link dazu oder kann das hier ma kurz posten?

MfG & Thx Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 24, 2008 23:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da brauch man kein Tutorial für. Deine Szene mit passenden Farben (halt z.b. für jede Einheit ne andere Farbe) rendern (ohne Puffer tauschen) und dann mit glReadPixels die Pixelfarbe unter dem Cursor auslesen und vergleichen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 25, 2008 08:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Colorpicking ist mit Vorsicht zu geniessen und nur für den Anfang geeignet.
Wenn du zu dem Lego Kasten, ab 16Jahren, dann greifst, liegt da raycast intersection drin.
Dafür hat men ein größeren Innitialisierungsaufwand aber ist dafür unabhängig, schneller.
Colorpicking wird mit OpenGL3 zu 99,9% rausfliegen, da es erstens eine langsame Methode ist(ziemlich unwichtig), zweitens ungenau(steigende Auflösungen wirken entgegen) und drittens nicht multi GPU programming erlaubt(der eigentliche Grund).
Wenn dir raycast intersection noch nichts sagt, dann wird folgendes ein bischen helfen.
Raycast ist ein Strahl, den man aus der Sicht der Kamera in die Welt schiesst und alle Objekte, die den Strahl schneiden(intersection) werden auf die Entfernung geprüft. Das Objekt mit der kürzesten Disstanz ist dann dein Objekt.
Das ist natürlich nur ne grobe Beschreibung, da passiert noch ein bischen mehr und es erlaubt auch noch ein paar weitere Features.
In der Regel wird die Funktion von dem Physik Modul übernommen(newton, bullet, ode und einige mehr haben solche funktionen schon drin).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 25, 2008 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für einfache Sachen ist Farbselektion doch bestens geeignet, und mit OpenGL 3.0 wird das wohl kaum rausfliegen, denn immerhin implementiert man das ja selber. Jemandem der nur eine einfache Selektion implementieren will gleich Raycasting zu empfehlen halte ich für etwas übertrieben. Klar gibt es ein paar Sachen auf die man achten muss, aber überleg mal wie viele Anwendungen es gibt die gar kein Physikmodul nutzen (z.B. mein Projekt "W") weil schlichtweg keins benötigt wird. Im Endeffekt würde man bei so einer Anwendung mit einem Physikmodul ja jede Menge unnötigen Overhead erzeugen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 25, 2008 11:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Nur so aus interesse ist Raycast zu aufwendig um es selber zu implementieren??(sprich Raycast ohne externes Physik Modul)
Wenn nein giebt es irgentwelche Turtorials / Dokumente zu dem Thema??


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 30 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.009s | 15 Queries | GZIP : On ]