fps mit glutWarpPoiner???
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
fps mit glutWarpPoiner???
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 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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
Ich habe mal eben die Funkton nachgeschlagen: "Warping means moving, just as if the user had manually moved the mouse."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!
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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
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;
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: fps mit glutWarpPoiner???
WANN benutzt du glutWarPointer?
Bevor oder nachdem du die Mausveränderung festgestellt und gespeichert hast?
Bevor oder nachdem du die Mausveränderung festgestellt und gespeichert hast?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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
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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
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.paparoach777 hat geschrieben:ja und genau das ist mein problem...
ES PASSIERT NICHTS!!!
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:
Darum habe ich Dir gequotet, dass die Funktion sich so verhält, als ob der User die Maus bewegt.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...
Möglichkeit 1: eine Globale Variable "bool reactOnMouseMoves", die Du vor Warp auf 'false' setzt.paparoach777 hat geschrieben:fehlt nur noch die lösung
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
wenn ich glutWarpPointer komplett weglasse, dann funktioniert alles wie es soll, nur die maus kann das fenster verlassen
return EXIT_FAILURE;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
Nach kurzem Surfen fand ich keine Lösung, jedenfalls keine Plattformunabhängige.paparoach777 hat geschrieben:wenn ich glutWarpPointer komplett weglasse, dann funktioniert alles wie es soll, nur die maus kann das fenster verlassen
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;
}
Code: Alles auswählen
if( reactOnMouseMove )
{
... Dein Code ...
}
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: fps mit glutWarpPoiner???
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
quod erat expectandum
Re: fps mit glutWarpPoiner???
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:
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.
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;
}

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
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at