Farbselektion ist besonders bei dynamischer Geometrie im Editor sinnvoll. Für einen schnellen Strahlentest benötigt man Baumstrukturen, die dann ständig angepasst werden müssten.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe mit Raycasting bisher noch nicht gearbeitet, da ich so was schlicht und einfach nicht brauche. Aber was man dabei vielleicht auch bedenken sollte. Die Physikbibliotheken machen nichts anderes als solche Vektorberechungen etc. Die sind sehr darauf spezialisiert und optimiert. Und ich gehe jede Wette ein, dass die spezielle CPU Befehle dafür verwenden.
Man kann sicher nicht mal eben eine Formel in eine Funktion klatschen und die dann über alle seine 100.000+ Dreiecke jagen. Die Daten müssen vermutlich in speziell dafür geeigneten Strukturen vorliegen um auch ganze Geometrien von Hause aus ausschließen zu können. Man muss sich halt sehr stark überlegen was man dort macht. Denn ansonsten hat man massiv Rechenaufwand erfolgreich auf die, sowieso schon überforderte, CPU verlagert wärend die extrem spezialisierte GPU da sitzt und wartet.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn man z.B. Newton verwendet, dann nutzt Newton ja die internen informationen, also Sphere,Box,Mesh.
Das ist natürlich ned so schön schnell wird aber durch das interne Spatial system wieder behoben, ich hab selber es bisher immer so gemacht.
Liste der sichtbaren Objekte holen, Liste mit Sphere durchgehen und alle rauswerfen ,die ned passen(hast vieleicht noch 4-5 Objekte).
Triangle genauer Test auf das naheste Objekt, in der regel hat man sein Objekt dann schon, sonnst geht man in der Liste weiter.
Sicher kann man normales color picking verwenden aber sobald es daraum geht, mehr als eine GPU zu verwenden, kann man diese funktion(read) nicht mehr nutzen. ATI und NV Treiber schalten die App nicht für MGPU frei und man bekommt auch keine App MGPU Signierung von ATI.
Die CPU ist ja eh nicht ausgelastet(da ja keine physik und ki läuft), die GPU schon, also ist die Lösung sinnvoll.
edit:Beides sind gute Lösungen für den Anfang, raycasting braucht Meshinfos(radius, den man für Frustumculling eh braucht) und colorpicking braucht eine assoziation zwischen Farbe und Objekt. Der Code, den man braucht kopiert man für beide Fälle eh aus dem Inet.
Raycasts sind unabhängig und werden parallel zur gpu verarbeitet aber colorpicking braucht nen pass.
Raycasts sind um einiges schneller und um ein vielfaches genauer, keine Probleme mit Alpha, möglichkeit Objekte dahinter zu selektieren(mehrfach klicken auf der gleichen stelle).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ich mach das erstma mit ColorSelection, klinkt für meine Ohren einfacher,
und da ich ein blutiger Anfänger bin will ich erstma klein anfangen...
Hab auch schon alles in meinen Projekt eingebaut, nur ein/e Problem/Frage
hab ich noch: glReadPixels liest bei mir für den Alpha Wert der Farben immer
nur 1 aus, obwohl ich es vorher bei den Objekten in 0.1er Schritten abgestuft
hab. Kann es sein das man das Alpha nich benutzen kann, oder mach ich was
falsch? Es geht zu Not auch ohne, is bloß mehr Arbeit!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Warum brauchst du bei der Farbselektion einen Alphawert? Im Normalfall rendert man die Objekte mit kleinen RGB-Abstufungen und deaktiviert alles Mögliche wie Texturen, Shader, Beleuchtung und Transparenz.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Abgesehen davon muss der Alphawert in dem Framebuffer nicht enthalten sein. Manche Treiber machen es von hause aus. Manche nur auf verlangen. Und im Endeffekt darf sich auch jeder Treiber entscheiden keinen Alphakanal zu unterstützen. Also Alphawert am besten ignorieren. Außerdem wird durch Blending bei der Farbselektion auch die Farben manipuliert was nur bedingt zu richtigen Ergebnissen führen kann.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ich brauch den Alpha Wert weil ich dann alles über Schleifen regeln könnte:
die RGB Werte wären dann die XYZ Werte des Würfels, der grade selektiert
ist und der Alpha wert sollte die Seite des Würfels werden.
und dann lässt sich das ganz einfach lesen: wenn ich das nur über die RGB-
Werte mach wirds halt n bisl aufwendiger. Wenn ich das Alpha nich benutzen
kann, dann hab ich noch n bisl was zu tun ^^
€: Hab mir das grad nochma überlegt, so schwer wird's gar nich, ich hab ja
mio. von kombinationsmöglichkeiten xD
Bei einem mausklick ist die latenz für den read irrelevant... Color picking kann nicht aus OGL3 rausfliegen, weil colorpicking kein bestandteil von ogl ist.
Der selectionsmodus wird dagegen wegfallen. Das macht aber nicht viel aus, da der jetzt kaum noch sinvoll verwendbar ist. (Ist so langsam als wenn man keine hardwarebeschleunigung hat)
Das ideale rendersetzup wäre ein viewport mit 1x1 pixel und angepasster projektionsmatrix.
In zukunft macht es eher sinn einen geometry shader und transform feedback zu verwenden. Dann kann die GPU alle objekte inclusive triangle ID und texturkoordinaten an der treffer position in ein VBO schreiben...
Sicher kann eine baum basierende selektion schneller sein, jedoch macht das nur sinn, wenn dieser eh schon vorhanden ist.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Noch ein Problem entdeckt:
Ich hab im Treibermenü der Graka die Performance auf Qualität gestellt,
bedeutet er rendert meinen Würfel jetzt mit AA und dem ganzen anderen Zeug.
Das sieht zwar gut aus, aber bei der Farbselection stört das, denn am Rand
jedes würfels verschwimmen die Farben, und wenn dann die Frabe am Rand
des Würfels zufällig den Farbwert eines anderen Würfels hat bekomm ich
falsche Ergebnisse.
Kann ich das AA nur vorm rendern der Farbselektion deaktivieren, ohne
alles im Treibermenü umstellen zu müssen?
MfG Bergmann
p.s.: wenn ich das Projekt dann vorstellen will, kommt das dann mit bei
Projekte rein, oder gibts n extra Topic wo man so kleine Projekte vorstellen
kann?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Bezüglich des AAs sollte man eine gewisse Toleranz einbauen, also angrenzende Felder soweit im Farbraum abgrenzen dass durchs AA keine Fehlselektion entstehen kann. Ansonsten kannst du die Farbselektion auch in einem FBO oder Pixelpuffer machen, dort hat man i.d.R. eh kein AA (auch wenn es im Treiber aktiviert ist), bzw. kann es von Hand deaktivieren.
und dann hab ich einfach vorm rendern der Colorselektion PBuffer.Enable aufgerufen.
Und danach logischer weiße PBuffer.Disable;
der fehler liegt denke ich in der Disable Prozedur, ich weiß nicht welche Parameter
die wglReleaseTexImageARB verlangt, und im DGLWiki kommt ne meldung das ich
nich berechtigt bin die Seite zu sehen, wenn ich mich dort belesen will?!
_________________ 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
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.