Ich habe mal wieder ein Problem:
Wenn ich lediglich 3d-Informationen habe, dann funktioniert die Selektion von Objekten über Names und einem Selection-Renderdurchgang hervorrangend.
Aber ich habe ja auch noch ein HUD, für welches ich den Projection-Mode auf glOrtho umstelle.
Wenn ich jetzt in die obere, linke Ecke eine Fläche male, dann wird diese Fläche immer als Getroffener Name ausgegeben, obwohl ich weit von ihr entfernt in die Mitte des Bildschirms geklickt hab.
Woran liegt das? Und wie lässt es sich beheben?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wärend der Selection darfst du nicht zwischen 3D und 2D Wechseln. Dabei kommt die Selection durcheinander. Verhindern kannst du das in dem du ENTWEDER 2D oder 3D Selektierst. Eine andere Möglichkeit wäre du macht einen simplen Hittest. Da deine Mausposition bereits 2D ist kannst du diese recht einfach abfragen. Das sollte vor allem schneller gehen als wie wenn du erst einmal dein Hud renderst etc.
Ok, man kann das also nicht kombinieren.
Kommt mir zwar komisch vor, weil letzetenendes rendert er ein Objekt nach dem anderen und speichert in einen array, welches in der Mausumgebung liegt, ob ich da nun in 2D oder 3D arbeite sollte doch da eigentlich jetzt an der Prozedur wenig ändern, oder?
Ich denke mal, das selber zu schreiben dürfte etwas ätzend sein.
Weil ja nicht immer alle Anzeigetafeln des HUDs angezeigt werden, und weil Menüs auch eine variable Anzahl von Auswahlmöglichkeiten haben. Das würden unendlich viele Pixelabfragen werden.
Ich würde also mal sagen, wenn man die 2 Durchgänge getrennt machen kann ist das praktischer.
Jetzt ist das aber ja nicht so leicht, weil ich das HUD-rendering aus meiner Haupt-Rendermethode starte, da sonst der Swapbuffers nicht das Menü berücksichtigt. Gibt es eine Möglichkeit in der Haupt-Rendermethode die Names irgendwann abzuschalten, also dass alle weiteren Objekte, egal ob Names zugewiesen werden, oder nicht, nicht als Treffer erkannt werden können?
Dann würde ich nämlich kurz vor Aufruf der HUD-rendermethode die Names abschalten und beide Methoden dann getrennt für die Selection aufrufen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ne. Du hast mich nicht ganz verstanden. Die Selektion wird dadurch sehr empfindlich gestört. Sobald du umschaltest ist es im Eimer. Außerdem kann es nicht ganz Sinn und Zweck sein, dass du dein Bild in so einem Falle 3 Mal komplett zeichnen musst.
Wie kommst du eigentlich auf Pixelabfragen? Bei meiner GUI mache ich das komplett ohne OpenGL. Da habe ich einen Baum mit Objekten und wenn ich wissen will auf welches Objekt ich gerade geklickt habe gehe ich durch den Baum und prüfe Rekursiv ob ich in dem entsprechenden Element bin und wenn ja gehe ich eine eben tiefer anderenfalls muss das aktuelle Objekt ausgewählt sein. So in etwa meinte ich das. Du weißt ja in etwa wo sich welches Element befindet.
Wenn das zu kompliziert ist solltest du wenigstens deine 3D Gamerendering und dein HUD Rendering voneinander trennen und zwar so, dass es einzeln Aufrufbar sind.
Auf jeden Fall solltest du aus den jetzigen Problemen für später etwas lernen. Bzw um in späteren Anwendungen deinen Code etwas Flexibler zu gestalten. Das ist nicht böse gemeint. Also bitte nicht falsch verstehen. Ich habe auch schon häufiger etwas geschrieben und dann wieder komplett geändert. Muss ja auch nen Grund haben ich meine GUI von Grund auf neu mache.
[edit] Noch mal zum Wechseln. Ich meine sobald du wechselst wird die PickMatrix zerstört. Evtl geht es ja, wenn man diese vorher neu setzt. Aber das habe ich ehrlich bisher noch nicht ausprobiert. Sollte ich mal tun.
Nene, ich habe dich schon vollkommen verstanden, ich glaube dir das auch alles, dass das durcheinander kommt.
Es war lediglich ein Grundsätzlicher Gedanke, dass das ja eigentlich nicht sonderlich unmöglich wäre, dass es trotzdem klappt.
Aber dass die pickmatrix zerstört wird, war natürlich einleuchtend, und ich hätte auch eigentlich selber drauf kommen müssen.
Dass man das ganze über eine Datenstruktur realisieren kann ist mir schon klar.
Aber da es sich hier "nur" um quads handelt, wollte ich jetzt kurz vor Abgabe nicht ein komplettes, professionelles HUD entwerfen.
Ich werde jetzt noch 2 Sachen Probieren:
1. Ich rufe erst die Methode zum Rendern vom Hud menü auf, da ich ja dann keinerlei andere Geometrie zeichne.
Wenn ich hier keinen Hit habe, kann ich danach die haupt-Rendermethode aufrufen.
Was ich dazu wissen muss: Kann man innerhalb der Rendermethode abfragen, ob man sich im Selection-mode befindet? Dann könnte man abhängig davon das Zeichnen des HUDs verhindern, damit man keine fehlerhaften Hits zurückkriegt.
2. Wie du gesagt hattest eventuell die Pick matrix umschalten, das wäre natürlich super, wenn das ginge.
Ich denke mal die Pickmatrix wird nicht zerstört, sondern nach dem Umstellen der Projektion unbrauchbar gemacht.
Danke für den Link, der hat schonmal geholfen.
Aber irgendwie kriege ich die Selektion in 2D absolut nicht hin, kannst du dir grad mal den source anschauen?
Die Selection Methode (wenn das menü aktiviert ist, wird nur der 2d-renderdurchgang durchlaufen)
Also im Moment wird immer der name der fläche ausgegeben, die zuerst gemalt wird, egal wo ich hinklicke.
Also auch wenn ich irgendwo hinklicke, wo eigentlich nichts gezeichnet wurde.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich wollte gerade sagen, dass ich es nicht richtig weiß aber ich meine es liegt an dem glLoadIdentity in drawmenus. Dadurch wird die PickMatrix ja wieder komplett überschrieben und somit alle Objekte selektiert. Was zu diesem Ergebniss führt. Evtl solltest du an der Stelle das Setzen des OrthoModus auslagern. Wie auch immer das jetzt in deinem Falle strukturell aussehen möge.
SUPER!!
Jetzt gehts, es lag tatsächlich am loadidentity!
Ich wusste nicht, dass die Pickmatrix damit auch überschrieben wird.
Nun geht alles genau so, wie es soll.
Im Grunde ist das Projekt jetzt abgeschlossen. Es werden jetzt noch ein bisschen die 3D-Modelle getuned und dann geht's ab zum Prof damit.
Wenn alles komplett ist, werd ichs hier mal uploaden, so nach dem Motto: "Das hier ist aus vielen Tutorials auf Delphigl.com entstanden".
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
LANJAN hat geschrieben:
Im Grunde ist das Projekt jetzt abgeschlossen. Es werden jetzt noch ein bisschen die 3D-Modelle getuned und dann geht's ab zum Prof damit. Wenn alles komplett ist, werd ichs hier mal uploaden, so nach dem Motto: "Das hier ist aus vielen Tutorials auf Delphigl.com entstanden".
Ich würde mal sagen. Wir freuen uns drauf. Uns interessiert ja auch woran so alles gearbeitet wird.
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.