Beschleunigung von Funktionen



  • hallo,

    ich bringe gleich noch mal eine Frage, welche sich auf das beschleunigen von funktionen bezieht.

    Ich habe das scrollrad mit einer funktion belegt, welche ein Objekt um die Y-Achse rotieren lässt.

    Bei einem MouseWheelDown wird die Funktion

    roty+=1.0;
    

    und bei MouseWheelUp wird

    roty-=1.0;
    

    ausgeführt.

    Wenn ich nun das Scrollrad "langsam" betätige, dann wird das Objekt entsprechend bewegt. Wenn ich das Scrollrad nun jedoch schnell hintereinander ausführe, dann wird das Objekt immer noch bewegt, obwohl das Rad nicht mehr gedreht wird.

    Ist zwar nicht die tollste Beschreibung von meinem Problem, aber ich hoffe, ihr wisst worum das geht.

    Karsten



  • ich nehm mal an, dass das einfach an der zu langsamen auswertung von den eingabe liegt. kannst du auch bei manchen spielen mit den ganz normalen tasten beobachten (oder du hast mal eins wo du nur 5 fps oder so hast..da isses auch so). die eingaben liegen in deiner messageschleife und werden so bald sie drankommen ausgewertet...
    ka was man da machen kann
    mfg



  • Die Messages in der Warteschlange öfter auswerten bzw. gleich zwei auf einmal auswerten.



  • Ich hab gerad auch folgendes festgestellt:

    Wenn ich einen Button habe, bei welchem ich auf Klick der Funktion

    glRotatef(...)
    

    als Angle jedesmal +1 übergebe, dann wird auch jedes mal der Rotationswinkel um 1 erhöht.

    Wenn ich das gleiche jedoch mit dem Scrollrad ausführe, dann wird immer der Wert x3 übergeben (pro Dreh am Scrollrad). Sprich:

    ... OnMouseWheelDown(..)
    {
     rot_y = 1.0;
     Repaint();
    }
    
    PaintMode(...)
    {
     glRotatef( (rot_y + 3), 0.0, 1.0, 0.0);
    }
    

    Wie kommt das denn??? und wie kann ich das ändern?

    Wenn ich z.B. über das Scrollrad den Raum in seinen Abmessungen verändere und pro Dreh die linke und rechte Grenze um +1 bzw. -1 ändere, dann werden die Werte auch korrekt an die Funktion glOrtho(...) übergeben.



  • Das ist, weil man mit dem Scrollrad standardmäßig immer 3 Zeilen scrollt. Kann man in Windows ändern. Ist natürlich nicht so ideal, wenn der Spieler dann erstmal in der Systemsteuerung was einstellen muss.



  • Ist es leider auch nicht ... habe jetzt auf drei Rechnern das Scrollrad auf eine Zeile eingestellt ... Der Winkel wird immer noch um den Faktor 3 übergeben ... ?????



  • Dann teilst du den Faktor halt durch 3, wo is das prob ?



  • Hab ich dann gestern abend auch noch rausgefunden ... das kuriose daran: man darf der Funktion glRotatef(...) im PaintMode nicht die (Variable+1)/3 übergeben, sondern muss die erhöhte/verminderte Variable im Paint Mode einer neuen Variable zuordnen, diese dann durch drei teilen und letztendlich an die Funktion übergeben ... det mit dem einfach durch drei teilen war ja det erste was ich gemacht habe. In diesem Sinne.


Log in to reply