OpenGL - Maus Position

H

H.Stony

Aktives Mitglied
Thread Starter
Dabei seit
27.03.2004
Beiträge
562
Reaktionspunkte
0
hallo leute!

ich stehe vor folgendem problem: ich brauche für mein opengl programm die position der maus. wenn ich glutMouseFunc verwende bekomme ich nur die position der maus wenn man klickt bzw. di maus loslässt. auch die keyboardFunc kann mir meine position liefern die ruft die fkt aber nur auf wenn eine taste gedrückt wird. auch die glutMotionFunc fällt aus da die nur bei gedrückter taste die position zurückgeben kann


danke für die hilfe

h.stony
 
habe schon selbst di fkt gefunden!

wers mal brauchen sollte: glutPassiveMotionFunc
 
Danke! Hatte ich auch schon länger gesucht.

Nur bei mir habe ich jetzt noch 2 Probleme, bzw. eines welches 2 Probs verursacht.

1. Der Mauszeiger geht mit und hält am Bildschirmrand an (bzw. verlässt das Fenster). Dann geht nix mehr.

2. Der Mauszeiger ist noch da! ;)

Naja. Das Problem ist einfach das der Zeiger vom System nicht zentriert bleibt. Kennst du vielleicht dafür ne Lösung?
 
versteh dich jetzt nicht ganz aber mit

glutSetCursor(GLUT_CURSOR_NONE); kann man den cursor ausblenden! diese fkt kann auch andere parameter haben! man kann also wenn man sich mit der maus über dem opengl fenster ist den mauszeiger ändern! aber die passiveMouseFunc gibt sogar werte außerhalb des fensters an! ich hab das ausprobiert!
kannst du dein problem vielleicht näher beschreiben?

außerdem: weiß irgendjemand einen unixbefehl über den man über lan daten auf andere computer senden kann (mehrspielermodus)..soweit ich weiß kann man
system("unixbefehl"); ausführen! ich weiß aber nicht wie man andere computer mittteilt dass sie diese gesendeten daten empfangen....und dann in mein programm in eine var schreiben...
hat jemand mit sowas schon erfahrung?


danke mfg h.stony
 
Danke. Damit wäre ein Problem beseitigt.

Nur das andere erkläre ich noch mal (Sorry, wirklich doof erklärt). Es geht darum. Ich habe eine Szene mit Rundumblick. Umschauen ist ja kein Problem. Nur wenn ich mich mit der Maus umschaue und den Zeiger immer weiter nach rechts (bzw. oben links unten, etc.) bewege, dann hält die Maus irgendwann an -> Bildschirmrand erreicht.

Wie schaffe ich es mich immer drehen zu können? edit: Außerdem bleibt die Maus stehen, wenn ich eine Taste drücke. :(

Zu deinem Netzwerkproblem. Das wird ja schon komplexer.
Du brauchst dazu von dem System die Librarys für TCP/IP. Dann musst du dir einen Port aufmachen, an den du denn die Daten sendest, bzw. empfängst. Also musst du senden und horchen. Das dann auswerten.

Mit einem Unix-Befehl wird das schlecht gehen.
 
Zuletzt bearbeitet:
bei deinem prob weiß ich leider selbst nicht weiter..außerdem wenn ich dich richtig verstanden habe steuerst du die glrotate über die werte der maus? ich finde das nämlich seltsam..ich habe mir die postioinen der maus ausgeben lassen und ich bekam auch außerhalb des fensters werte! also könntest du machen: wenn di position unter bzw über einem wert ist soll gescrollt werden...könnte ich vielleicht deinen code sehen (ist ok wenn du ihn für dich behalten willst aber ich hätte mir gerne sowas mal angeschaut [ich habe früher nur flash sachen gemacht und bin in openGL noch ziemlicher anfänger]


hab ich mir schon gedacht! ich dachte nur vielleicht weiß einer ein tut für solche dinge! aus meiner windows zeit: ich habe über netsend und vb (AAHHH) eine kommunikation geschrieben und dachte ich bekomme es hier auch leicht hin! also falls jemand für kommunikation über tcp/ip ein tut weiß: bitte einen link schicken
 
Ja. Ich mache es ja auch so. Es geht ja auch außerhalb des Fensters. Dadurch errechne ich mir den entsprechenden Winkel. Den übergebe ich dann an glRotate.

Also meine moition-Func sieht so aus (mit glutPassiveMotionFunc aufgerufen):

PHP:
void motion(int x, int y)
{
      // Winkel aus Mausbewegung errechnen >> *(AnimaBremse*100) ist zur Verlangsamung
      xangle = xangle - (y - mousey) *(AnimaBremse*100);
      yangle = yangle - (x - mousex) *(AnimaBremse*100);
      mousex = x;
      mousey = y;
      cout << "Winkel um Y: " << yangle << "  >>><<< Winkel um X: " << xangle << endl;              
}

Dann die Methode für die Modell-Postionen (in der Zeichnen-Routine enthalten):

PHP:
//neue Modellposition berechnen
inline void errechneModellPos(void)
{
    glViewport( 0, 0, width, height );
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLfloat wh = width/height;
    gluPerspective(45.0f,wh,1.0f,30000.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();    
    glRotatef(xangle, 1.0, 0.0, 0.0);
    glRotatef(yangle, 0.0, 1.0, 0.0);
    glTranslatef(posxO, posyO, poszO);
}

Den gesamten Code posten wird etwas viel, da es schon rund 900 Zeilen sind. Ist zum größten Teil aber OpenAL und ne Klasse für Laser-Strahlen und ne Klasse für Texturen.

Wenn du für ein kleines OpenGL-Projekt Texturen laden willst, dann kann ich dir meine Textur-Klasse geben. Ist dann leicht ne Textur zu laden. :)
 
Zurück
Oben Unten