OpenGL 'Animationen' unabhänig von der Framerate



  • Hallo,

    zu erst: Ich bin neu hier, also falls irgendetwas in meinem Post von der Form her nicht stimmt bitte ich um Nachsicht und eure Verbesserungsvorschläge. 🙂

    So nun zu meinem Problem, ich möchte in C++ mit Hilfe von OpenGL eine Uhr realisieren, dabei möchte ich das diese sich passend schnell bewegt also von der Geschwindigkeit her.

    Ich selbst hatte dazu schon eine Idee allerdings funktioniert diese nicht; es verschwindet nur der Zeiger.

    int nFrames = 0;
    int LastFrames = 0;
    int Fps = 60;
    
    float Rot_Std = 0.0f;
    float Rot_Min = 0.0f;
    float Rot_Sek = 0.0f;
    
    [...]
    
    int DrawGLScene(void)                                   //Zeichen Routine
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
    
        if(GetTickCount() - LastFrames >= 500)
        {
            LastFrames = GetTickCount();
            Fps = nFrames*2;
            nFrames = 0;
    
            char szTitle[256] = {0};
            sprintf(szTitle, "%s %d FPS Version %s Clock 0.1b", TITLE, Fps, glGetString(GL_VERSION));
    
            SetWindowText(hWnd, szTitle);
        }
    
        nFrames ++;
    
        glTranslated(0, 0, -5);
        glRotatef(Rot_Std, 0.0f, 0.0f, -1.0f);
        glCallList(StdZeiger);
    
        glLoadIdentity();
        glTranslated(0, 0, -5);
        glRotatef(Rot_Min, 0.0f, 0.0f, -1.0f);
        glCallList(MinZeiger);
    
        glLoadIdentity();
        glTranslated(0, 0, -5);
        glRotatef(Rot_Sek, 0.0f, 0.0f, -1.0f);
        glCallList(SekZeiger);
    
        Rot_Sek += 6.0f / static_cast<float>(Fps);
        /* und halt noch das gleiche für Rot_Min und Rot_Std */
    
        return true;
    }
    

    Falls das nicht die 'beste' Methode ist bzw. ihr eine bessere/andre kennt wäre ich auch offen diese zu verstehen.

    Vielen Dank schon mal im Voraus,

    Atgoogat



  • Schau dir mal Artikel zu Gameloops an, dort wird Logik von Anzeige getrennt. Unter dem Strich hast du halt eine Renderfunktion, die die verstrichene Zeit zum letzten Frame bekommt und dies nimmst du als Faktor für deine Bewegung.

    Wo hast du eigentlich die uralten gl-Befehle her? Die setzt man doch seit ca. 6 Jahren nicht mehr bei OpenGL ein.



  • Also erstmal danke ich für die schnelle antwort; ich werde mir das heute abend mal genauer angucken mit den Gameloops und dann nachher mal meine ergebnisse nennen.

    Die Befehle habe ich aus dem NeHe tutorial und ich habe auch schon mehrfach gehört das diese Veraltet seien, allerdings konnte ich kein passendes alternativ tutorial finden welches.
    Ich wüsste aber auch nicht so richtig wonach ich suchen sollte bei Google um neuere OpenGL tutorial zu finden.

    Edit:

    Habe gerade dies hier gefunden: http://www.opengl-tutorial.org/
    ist das was oder eher nicht? 🙂

    Atgoogat



  • Atgoogat schrieb:

    Habe gerade dies hier gefunden: http://www.opengl-tutorial.org/
    ist das was oder eher nicht? 🙂

    Ja, das ist gut.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply