Miromurr Skrevet 11. september 2008 Del Skrevet 11. september 2008 Hei! Er det noen som vet hvordan jeg kan finne ut hvor mye FPS jeg har i et OpenGL program (C++)? Jeg prøver nemlig å gjøre programmet mitt framerate-independent (aner ikke hvordan jeg skal oversette det til norsk). Jeg har søkt litt rundt på internett, men finner ingen ting. Noen som kan hjelpe meg litt med dette? Takker får svar! Miromurr Lenke til kommentar
GeirGrusom Skrevet 11. september 2008 Del Skrevet 11. september 2008 For å gjøre et program framerate independent pleier jeg å bruke High resolution timer (QueryPerformanceCounter og QueryPerformanceFrequency) Og når en har tid siden forrige frame, er det en lett sak å regne ut hvor mange FPS det er (1/time) tar du et gjennomsnitt over flere målinger, så får du en mer riktig tid. En multipliserer hver bevegelse med tid siden forrige frame for å få en frame independent bevegelse. Lenke til kommentar
Giddion Skrevet 12. september 2008 Del Skrevet 12. september 2008 Jeg ser du har fått svar på det du lurer på og GeirGrusom bruker de samme funksjonen jeg ville brukt, men det virker på meg som du er litt på ville veier. Det virker på meg som om du vil bruke resultatet fra fps utregningen til andre utregninger og det vil bli litt rart. Bruk heller resultatet fra funksjonene som GeirGrusom nevnte og hold FPS utenfor bildet. Godt mulige jeg har tatt helt feil her, men jeg ville bare nevne det. Lenke til kommentar
Miromurr Skrevet 12. september 2008 Forfatter Del Skrevet 12. september 2008 Det at jeg er på vilel veier innenfor programmering er ikke noe nytt, men takk for hjelpen uannsett Lenke til kommentar
Miromurr Skrevet 13. september 2008 Forfatter Del Skrevet 13. september 2008 Er det noen som vet om en bra tutorial om å lage en brukbar timer med QueryPerformanceCounter og QueryPerformanceFrequency? søkte litt på nett, men forsto ikke så mye... Takker for svar. Miromurr Lenke til kommentar
GeirGrusom Skrevet 14. september 2008 Del Skrevet 14. september 2008 Nei, men jeg kan forklare kort hvordan den brukes. class Timer { private: double m_freq; unsigned long long m_time; public: Timer() { unsigned long long lfreq; QueryPerformanceFrequency((LARGE_INTEGER*)&freq); m_freq = (double)freq; m_time = 0; } double GetTimePassed() { double ret = 0; unsigned long long new_time; QueryPeformanceCounter((LARGE_INTEGER*)&new_time); if(m_time != 0) ret = (new_time - m_time) / m_freq; m_time = new_time; return ret; } } // OK dette er pseudo-kode, fordi jeg ikke gidder å gjøre det alt for omfattende Timer my_timer = new Timer(); void my_main_function() { double time_passed; double fps = 0; while(app_running) { // Denne loopen er for hver frame time_passed = my_timer.GetTimePassed(); fps = 1 / time_passed; for each(unit in unit_collection) { unit.position += unit.momentum * time_passed; unit.render(); } } } Koden for selve main loopen er langt ifra ideell, men bare for å vise hvordan high resolution timer fungerer. Selv ville jeg lagt render funksjonen i en egen tråd. Lenke til kommentar
Giddion Skrevet 14. september 2008 Del Skrevet 14. september 2008 liker ikke å pirke men siden det er deg (GeirGrusom) så må jeg bare unit.position += unit.momentum * time_passed; Er det sånn du regner ut posisjoner? Lenke til kommentar
GeirGrusom Skrevet 14. september 2008 Del Skrevet 14. september 2008 hehe nei kvasi-pseudo Lenke til kommentar
Miromurr Skrevet 15. september 2008 Forfatter Del Skrevet 15. september 2008 Aha, takker Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå