fps mit glutWarpPoiner???

Schnelle objektorientierte, kompilierende Programmiersprache.
paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

fps mit glutWarpPoiner???

Beitrag von paparoach777 » So Jun 20, 2010 6:52 pm

Hallo,

ich versuche schon seit längerer Zeit eine Kamera in Ego Perspektive in OpenGl zu implementieren. Das hat an sich auch gut geklappt, nur die maus kam immer wieder aus dem bildschirm...

ich habe von der funktion glutWarpPointer gehört, nur wenn ich sie benutze, hält sie meinen cursor irgendwie im fenster gefangen und ich kann die scene nicht mehr rotieren...

woran liegt das?? ich weiß langsam echt nicht mehr weiter

Bitte schnelle Antworten!
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » So Jun 20, 2010 8:02 pm

paparoach777 hat geschrieben:Hallo,

ich versuche schon seit längerer Zeit eine Kamera in Ego Perspektive in OpenGl zu implementieren. Das hat an sich auch gut geklappt, nur die maus kam immer wieder aus dem bildschirm...

ich habe von der funktion glutWarpPointer gehört, nur wenn ich sie benutze, hält sie meinen cursor irgendwie im fenster gefangen und ich kann die scene nicht mehr rotieren...

woran liegt das?? ich weiß langsam echt nicht mehr weiter

Bitte schnelle Antworten!
Ich habe mal eben die Funkton nachgeschlagen: "Warping means moving, just as if the user had manually moved the mouse."
Wenn Du die Maus bewegst und anschließend sie per Warp zurückbewegst, dann wird vermutlich nichts passieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Mo Jun 21, 2010 12:39 pm

ja und genau das ist mein problem...

ES PASSIERT NICHTS!!!


irgendwie muss das doch gehen oder??
Kann auch ne andere Funktion als glutWarpPointer sein, muß aber cross_plattform kompatibel sein
return EXIT_FAILURE;

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: fps mit glutWarpPoiner???

Beitrag von cloidnerux » Mo Jun 21, 2010 1:48 pm

WANN benutzt du glutWarPointer?
Bevor oder nachdem du die Mausveränderung festgestellt und gespeichert hast?
Redundanz macht wiederholen unnötig.
quod erat expectandum

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Mo Jun 21, 2010 1:59 pm

ich benutze glutWarpPointer danach

ich glaub ich kenn den genauen fehler:
mein programm nimmt die "gewarpte" position des Mauszeigers als eine Bewegung an, die wirklich vom user gemacht wurde, und meint, das der user die kamera wieder zurückgedreht hat...

fehlt nur noch die lösung
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Mo Jun 21, 2010 2:26 pm

paparoach777 hat geschrieben:ja und genau das ist mein problem...

ES PASSIERT NICHTS!!!
Also nochmal. Nehmen wir an, Du bewegst die Maus um 10 Pixel nach links. Anschließend bewegst Du die Maus mit glutWarpPointer() wieder um 10 Pixel nach rechts. Dann sollte sich Dein Betrachtungswinkel vermutlich nicht verändert haben.
Bei sagen wir mal 1000 Frames Per Second hast Du also 1 Frame, das um 10 Pixel verschoben ist, was Dein TFT bei 60Hz vermutlich nichtmals geliefert bekommt, weil es ja nur 60 Frames Per Second darstellen kann und selbst, wenn es das Bild darstellt, dann nimmst Du es bestenfalls als kurzes Flackern wahr, sofern Dein Auge gerade den Monitor "abtastet".

Es könnte also etwas passieren, nur siehst Du es nicht, weil Du es mit der glutWarpPointer()-Funktion wieder rückgängig machst.
Prüf das doch mal, in dem Du sie weglässt, bzw. eine kurze Zeit wartest, bis Du sie aufrufst.

PS:
paparoach777 hat geschrieben:ich glaub ich kenn den genauen fehler:
mein programm nimmt die "gewarpte" position des Mauszeigers als eine Bewegung an, die wirklich vom user gemacht wurde, und meint, das der user die kamera wieder zurückgedreht hat...
Darum habe ich Dir gequotet, dass die Funktion sich so verhält, als ob der User die Maus bewegt.
paparoach777 hat geschrieben:fehlt nur noch die lösung
Möglichkeit 1: eine Globale Variable "bool reactOnMouseMoves", die Du vor Warp auf 'false' setzt.
Möglichkeit 2: Finde die richtige Funktion ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Mo Jun 21, 2010 4:52 pm

wenn ich glutWarpPointer komplett weglasse, dann funktioniert alles wie es soll, nur die maus kann das fenster verlassen
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Mo Jun 21, 2010 5:16 pm

paparoach777 hat geschrieben:wenn ich glutWarpPointer komplett weglasse, dann funktioniert alles wie es soll, nur die maus kann das fenster verlassen
Nach kurzem Surfen fand ich keine Lösung, jedenfalls keine Plattformunabhängige.

Da bleibt dann wohl erstmal nur die Lösung, gluWarpPointer zu nehmen, aber für diesen Moment halt die globale Variable zu nehmen.
Schreib Dir also eine eigene WarpPointer:

Code: Alles auswählen

bool reactOnMouseMove;

inline void myWarpPointer( int x, int y )
{
  reactOnMouseMove = false;
  gluWarpPointer( x, y );
  reactOnMouseMove = true;
}
und füge in Deine MouseFunc

Code: Alles auswählen

if( reactOnMouseMove )
{
   ... Dein Code ...
}
ein.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: fps mit glutWarpPoiner???

Beitrag von cloidnerux » Mo Jun 21, 2010 5:50 pm

Oder Prüfe, ob die neue Mausbewegung als Exakte Gegenbewegung zur alten gilt, was dann das bewegen durch gluWarpPointer entspräche und reagiere dann netsprechend.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Kerli » Mo Jun 21, 2010 6:06 pm

Ich hatte ebenfalls das gleiche Problem, nur das ich nicht glut sondern SDL verwenden. Bei der SDL kann man mit SDL_WM_GrabInput(SDL_GRAB_ON); verhindern das die Maus das Fenster verlässt. Das einzige Problem daran ist, dass die Maus das Fenster wirklich nicht verlassen kann und man auch nicht mit den üblichen Tastenkombinationen zum Desktop zurück gelangen kann (Zumindest unter Linux). Zurzeit minimiere ich das Programm deshalb sobald die entsprechende Tastenkombination zum anzeigen vom Desktop gedrückt wird, also <Ctrl><Alt>d unter Linux und <Super>d unter Windows.

Die entsprechenden Teile meiner Nachrichten schleife schauen wie folgt aus:

Code: Alles auswählen

    SDL_Event event;

    while( SDL_PollEvent(&event) )
    {
      switch( event.type )
      {
        // ...
        case SDL_ACTIVEEVENT:
          if( !has_focus && event.active.state && event.active.gain )
          {
            SDL_ShowCursor(0);
            SDL_WM_GrabInput(SDL_GRAB_ON);

            has_focus = true;
          }
          break;
        case SDL_KEYDOWN:
        case SDL_KEYUP:
        {
          // Handle system key combinations to leave grab mode
#ifdef linux
          const core::uint16 system_command = KMOD_LALT | KMOD_LCTRL;

          if( (event.key.keysym.mod & system_command) == system_command )
#else
          if( SDL_GetKeyState(0)[SDLK_LSUPER] )
#endif
          {
            if( event.key.keysym.sym == SDLK_d )
            {
              // show desktop
              SDL_WM_GrabInput(SDL_GRAB_OFF);
              SDL_ShowCursor(1);
              SDL_WM_IconifyWindow();
              has_focus = false;
            }
          }
          break;
        }
Der Code funktioniert schon recht gut. Man könnte nur eventuell auch noch auf andere Tastenkombination reagieren wie zb Fenster wechseln mit Tab, aber dazu bin ich noch nicht gekommen :)

Ob es die gleichen Funktionen bei glut auch gibt kann ich nicht sagen, aber die SDL wäre sicherlich auch keine schlecht plattformunabhängige Alternative.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten