Picking: Selection Buffer vs. Color Keying [zur Zufriedenheit beantwortet]



  • Hallo,
    ich bastle im Moment an einem Picking System für meinen 3D Code (OpenGL).

    In den im Internet verfügbaren Tutorials findet man 2 verschiedene Varianten: Nutzung des Selection Buffers, sowie Color Keying (jedes Objekt wird in einer anderen Farbe gemalt und anschließend nach Vollendung des Zeichnens der Wert ausgelesen).

    Nun wollte ich insbesondere die "erfahrenen" 3D-Programmierer in diesem Forum fragen, welche Methode zu bevorzugen ist (im Sinne von "mehr FPS" 😉 ).

    Dazu finde ich nämlich so ziemlich nichts im Netz (außer der Information, dass mit OGL 3.0 der Selection Buffer wegfallen soll).

    Also: welche Methode ist die empfehlenswerte?



  • IMHO weder noch. Du solltest die Mauskoordinate anhand der View-Projection zurücktransformieren (in der 3D-Welt ist es dann ein Strahl), diesen für in Frage kommende Objekte in den Objektraum zurücktransformieren und auf Kollision testen.

    Hat folgende Vorteile:
    - Du kriegst nicht nur das vorderste Objekt sondern alle, die potenziell angeklickt wurden und kannst wählen. In einem RTS-Game würdest du zum Beispiel in so einem Fall eher eigene als gegnerische zum Selektieren auswählen und eher gegnerische Angreifen als eine eigene Einheit zu eskortieren (oder so)
    - Du renderst nicht extra wegem dem Picking den Frame nochmal



  • Du kannst dir auch den Mausklick merken und im nächsten Frame (oder im selben) auf der CPU die Bounding-Boxen aller interessanten Objekte projizieren (dann invertest du keine Matrizen) und sehen, in welchen bounding boxen der Mauspunkt liegt.



  • Danke für den Tipp. Ich denke mit Bounding Boxes sollte es rechenzeitmäßig wirklich schnell zu erledigen sein - in der Tat schneller als die beiden oben geposteten Methoden (auf jedes einzelne Triangle einen Test zu machen - das erscheint mir rechenleistungsmäßig denn doch leicht gewagt 😉 ).


  • Mod

    Mach's so wie im ersten post von optimizer gesagt, die anderen beiden 'hacks' nutzt man eigentlich nicht, esseiden man will es besonders schnell und einfach fertig haben (optimizer hat aber auch aufgezaehlt wieso die gelaeufige methode besser ist).

    Optimizer schrieb:

    Du kannst dir auch den Mausklick merken und im nächsten Frame (oder im selben) auf der CPU die Bounding-Boxen aller interessanten Objekte projizieren (dann invertest du keine Matrizen) und sehen, in welchen bounding boxen der Mauspunkt liegt.

    da muss man aufpassen, kann einiges schiefgehen wenn man im objekt drinne ist das man selektiert z.b. ein raum.



  • wolfgke schrieb:

    (auf jedes einzelne Triangle einen Test zu machen - das erscheint mir rechenleistungsmäßig denn doch leicht gewagt 😉 ).

    Du kannst auch bei der Methode die ich zuerst genannt habe, den rücktransformierten Strahl nur gegen die bounding box testen.



  • Verzeihung, dass ich mit meinem 2. Post in diesem Thread möglicherweise für ein klitzekleines Missverständnis gesorgt habe. Ich wollte damit vielmehr ausdrücken, dass ich die 1. von Optimizer genannte Methode auf die Bounding Boxes anwenden will. 🙂


Anmelden zum Antworten