Irgendwie verstehe ich die Frage nicht ganz, aber nagut:
Das dort "Render;" steht liegt daran, dass ich meine Prozedur, welche bei mir den ganzen OGl-Code beinhaltet (Den Bildschirm löschen, Neue Objekte zeichnen und ein swapbuffers hinterher...), meistens "Render" nenne ... viele andere hier nennen die "gl_draw" ... andere haben sowas gar nicht, weil die direkt im On-Idle rendern .... egal, wie du das handhabst: die Prozedur muss hier komplett ausgeführt werden ... oder halt aufgerufen ... sonst gehts nicht ...
Ach ja noch etwas: am Anfang der Prozedur sollte einmal
"glMatrixMode(GL_MODELVIEW);" stehen ... sonst bleibt der Bildschirm nach einem Klick schwarz....
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Veränderst du die Perspektive in deiner Render procedure?
Sie darf nämlich nicht verändert werden da dise die Selektionsmethode schon festlegt.
Wechselst du zum Beispiel in den 2D Modus gibt es Probleme.
MfG
IFlo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Ich habe alles direkt im on idle... muss ich ALLES in dieser funktion nochmal aufrufen?
also diese funktion einmal im on idle aufrufen und in der funktion das inidle nochmal aufrufen? ^^
Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
du musst das onidlevent dann aufrufen bzw wo alles gerendert wird...
da müssen allerdings dann auch die "Names" für die Objekte drin sein, sonst kann die selection nichts vernünftiges zurückgeben
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Da du den Begriff Buttons erwähnt hast, schätze ich mal das du die Selektion für deine GUI brauchst. Wenn dem so ist, dann machs do einfach (so mach ichs auch normalerweise) ohne Selektion.
Da du ja sowieso nur im Ortho-Modus arbeitest, kennst du sowohl die absolute Position deiner 2D-GUI-Elemente als auch deren Dimensionen. Da musst du dann nur die Mausposition ermitteln und gucken ob diese Position innerhalb eines deiner Steuerelemente liegt. Den Ortho-Modus setzt du dann ja sowieso wahrscheinlich fest (z.B. 640x480) und dann musst du deine Fenstermauskoordinaten nur entsprechend der Fenstergröße umrechnen.
Diese Methode ist nicht nur sehr viel schneller, sondern auch weitaus weniger fehleranfällig.
Zitat:
PS: hier ist ja nichts mehr los seit ein paar Tagen... ich schau öfters mal vorbei aber nie was neues :-/
Was soll das denn heissen? Im Forum passiert doch recht viel, und News können nur welche gepostet werden wenn welche da sind. Ich klappere mehrmals am Tag alle relevanten Seiten ab, aber wenn da keine News sind kann ich auch nicht einfach welche selbst machen...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich nehm auch gleich mal diesen Thread für mein Selection Problem.
Also folgendes. Ich Zeichne in meiner Renderprocedure meine Karte. Diese Besteht aus Texturierten Quads. Jedes Quad hat ne Nr. (beginnend bei 1).
Das Zeichnen geht so ab:
Code:
procedure TForm1.Render;
begin
// Die eigentliche Zeichenprocedure
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich bin immer noch net weiter...hatte spekuliert, dass der gluPerspective() aufruf probleme macht, da ich im rendern nochmal gluPerspective aufrufe.
Habe den Aufruf im Selection mal auskommentiert ohne Resultat. Den im "Render" kann ich net rausnehmen da ja für jedes Zeichnen gebraucht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
gluPickMatrix creates a projection matrix that can be used to restrict drawing to a small region of the viewport. This is typically useful to determine what objects are being drawn near the cursor. Use gluPickMatrix to restrict drawing to a small region around the cursor.
D.h. das gluPickMatrix eine passende Projectionsmatrix für deinen Selektionsbereich erstellt. Du lädst aber in deinem Renderaufruf mit glLoadIdentity die Identätsprojektionsmatrix, machst damit also quasi den Aufruf von gluPickMatrix zunichte. Deshalb mach folgendes in der Renderprozedur :
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also danke erst mal soweit...das hat geholfen...
Jetzt griege ich immer als Namen die 0 zurück. 0 sind bei mir die Menüs im Spiel.
Blöderweise Click ich aber mitten auf die Karte, also Nix mit Menü. Woran könnte das Liegen?
EDIT: Habe gerade noch etwas geändert (erfolglos)
Da meine Spielmenüs im Orthomodus gezeichnet werden, und das die Perspektivmatrix für die Selection natürlich zerstört, habe ich den Aufruf von ShowGameBars auch vom Rendermode abhängig gemacht.
Code:
glGetIntegerv(GL_RENDER_MODE,@RenderMode);
if RenderMode = GL_RENDER
then ShowGameBars;
Wie gesagt, hat nix geholfen....immer noch 0 überall.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Dann siehst du nämlich bei nem Klick für 5 Sekunden den angeklickten Bereich (den ich zu Testzwecken oben vergrößert habe), wodurch sich die Selektion recht einfach debuggen lässt. Da siehst nämlich ob gluPickMatrix an der richtigen Stelle ansetzt.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
also ich hab das mal ausprobiert...es hätte von der Theorie her auch klappen müssen aber weder mit ner 1x1, 5x5, 10x10 noch 15x15 großen Clippingplane hat sich irgendwas verändert. ich habe auf die Karte geclickt und es war alles unverändert zu sehen.
Also es is irgendwie mystisch...
EDIT: Es geht!!! Juhu!!! Hatte beim Debugging beide gluPerspective gelöscht...aber ohne gehts halt net...
Endlich kanns weiter gehn....
_________________ Blog: kevin-fleischer.de und fbaingermany.com
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.