Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Leute,
Hab mich an das gleichnamige Tutorial gehalten, und versuche ne Selktion im Ortho-Modus hinzubekommen.
Leider kommen nur werte von zB- "-125603629" bzw "3274589" raus. Definiert ist aber nur bis 18.
befinden tu ich mich mit folgender Anweisung darin:
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Im Othomodus benutzt man am besten nicht die GL-Selection.
Einfachste Methode: Mach den Viewport so groß wie dein Fenster (ClientWidth/ClientHeight) dann kannst du die Mauskoordinaten mit deinen Objektpositionen vergleichen und leicht bestimmen was getroffen wurde - pixelgenau.
Dieses Verfahren wird eigentlich von so ziemlich jedem Benutzt der GUI Komponenten mit OGL schreibt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Flash,
Du meinst also sowas wie ich auch im OmouseDown des Formulars abfangen könnte ?
Da es sich im ein dreieckiges "Dings" handelt, wollt ich schon einen dreieeckigen "Bereich" haben,
der dann für die entsprechende Reaktion vorgesehen ist.
Die Koordinaten sind kein Problem, die kann ich während der Laufzeiz bekommen,(schliesslich muss ich
es ja auch zur Laufzeit positionieren, siehe Namens-Vergabe im Beitrag )
Na da wird ja die OnMouseDown langsam seeehr groß als if then ...Abfrage
Gruß Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Da kommt auch eh noch ein anderes Problem hinzu und zwar, dass wärend der Selektion alle Texturen ignoriert werden und damit arbeitet sie wieder auf Flächenbasis. Deinen Pfeil renderst du auch als Fläche nur wird durch das Blending einige Teile nicht mit gezeichnet. Bei der Selektion werden aber wiederrum die ganzen Quads berücksichtigt. Somit würdest du auch nur die Vierecke selektieren.
So gesehen entdecke ich in dem Code jetzt aber keine große Schwäche. Aber bei der Selektion genügt schon die kleinste Ungereimtheit um den Code aus dem Tritt zu bringen. Und das wichtigste. Das Zeichnen und das Selektieren müssen 100%tig identisch sein. Besonders auch die intialisierung etc. Interssant wäre an der Stelle noch was du in der Methode "DrawSelectedScene" machst.
Zitat:
Na da wird ja die OnMouseDown langsam seeehr groß als if then ...Abfrage
Dafür wurde ja die wunderbare Objekt Orientierte Programmierung erfunden. Es wäre doch Schade, wenn sie ungenutzt bleiben würde, oder? Falls du das Gefühl hast das war ein wink mit dem Zaunspfahl. Dein Gefühl täuscht dich nicht.
Spaß bei Seite. Wenn du das ein oder andere sinnvoll in Objekte kappselst lässt es sich sehr einfach erweitern und der Code bleibt sauber und klar Strukturiert. Man kann es natürlich immer auch übertreiben. Aber es gibt auch einen sinnvollen mittelweg.
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Loss eX,
ja, ja die gute OOP. Ich muss mal schauen ob ich da was als WM_Event abfrage reinbekomme.
Die "Pfeile" selbst sind bisher keine Objecte, sondern einfach nur so dahingepinselt.
DrawselectedScene verzweigt nur über case in den Renderteil der aktiven Szene (Menü / Neue Game etc ) und rendert diese.
glOrtho und Selektion hab ich nun schon abgeschrieben, soviel ist schon mal klar.
Wie ich das nun löse ?, werd mal die Framerate im Auge behalten und ganz einfach das OnMouseDown des Forms
im Auge behalten. Ich denke mal 18 Quad-flächen zu berücksichtigen (liegen dann als array[0..17]of TRect vor),
lässt mich dann noch zuversichtlich erscheinen.
Wenn nicht, na dann mach ich da objecte draus, und hab dann ne eigene OnMouseMove bzw OnMousClick
wo ich mich dann "austoben" kann
Danke für EURE Hilfe und Hinweise
Gruß und ein schönes WE
Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wegen den Pfeilen und den Weggeblendeten Teilen.
Was passiert denn wenn man den Alphatest benutzt, und dann versucht die transparenten Teile des Pfeils zu treffen. Wurde die Selektion den Pfeil zurück liefern, oder geht das "durch"?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
keine Veränderung, es funzt einfach net.
kleines PS:
definiertes "0" als Rückgabe hab ich schonmal erreicht, aber mehr nicht.
(habe
glInitNames;
glPushName(0);
an anderer Stelle im Source positioniert )
ich bastel mir eine Procedure ins Object rein, ist das einfachste
Danke Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wie gesagt. Bei der Selektion ist jede noch so winzige Kleinigkeit wichtig. Und man sieht es leider nicht wenn irgendwo ein Fehler ist. Das ist leider alles nur ein einziges raten.
Aber um die Geschwindigkeit würde ich mir bei 18 Rects mal keine Gedanken machen. Dank des inteligenten Kompilers ist so etwas alles kein Thema.
Für mich als ein absoluter Verfechter von OOP ist das gesamte Menü ein Vorzeigefall für Objekte. Denn als Objekte mit einer entsprechenden Struktur würdest du das Menp zu Begin ein Mal definieren und erstellen und der Rest würde sich dann mehr oder weniger Selbst verwalten. Und bei Änderungen an der Menüstruktur bräuchtest du lediglich einen Eintrag Löschen/Ändern oder Erstellen und schon wärs erledigt.
Aber wie ich oben schon gesagt hatte. Es muss ja nicht immer das volle Programm sein. Eine recht einfache Sache wäre zum Beispiel, dass du dein Array of TRect in ein Array mit Records verwandelst. Das Record würde neben dem TRect dann noch ein TNotifyEvent beinhalten. Diesem kannst du dann Methoden zuweisen. Genau wie einem TButton.OnClick. Und in der MouseClick würdest du dann durch das Array gehen und dir den entsprechenden Eintrag raussuchen und das Event aufrufen. Und so müsste diese Methode schon nicht mehr wissen worum es sich handelt. Das aber nur eine kleine Anregung für den Fall, dass die Selektion sich weiterhin weigert.
Flash: Bei meinen alten Komponenten (die ohne eigenen Inhalte) habe ich vor dem Zeichnen noch ein Stück Code ausgeführt der mir die Selektion vereinffacht hat. Ich hoffe das beantwortet deine Frage.
Code:
glEnable(GL_ALPHA_TEST);
glColor4f(1,1,1,0);
glBegin(GL_QUADS);
...
glEnd;
Obwohl man nichts sieht hat er die entsprechenden Bereich dennoch immer mit ausgewählt.
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.