Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: FPS:n hillitseminen (OpenGL)

Sivun loppuun

kayttaja-4976 [23.08.2006 21:14:29]

#

Niin, siis miten sitä hillitään?

Heikki [23.08.2006 21:36:36]

#

Yksinkertaisin tapa rajoittaa FPS tiettyyn lukuun on laskea yhteen frameen kuluva aika, ja tämän jälkeen odottaa niin kauan, että aikaa on kulunut yhteensä tietyn verran, esim. 33 ms.

kayttaja-4976 [23.08.2006 21:42:09]

#

Miten lasketaan niin tarkka aika?

Megant [23.08.2006 22:10:02]

#

Jos käytät SDL:ää, SDL_GetTicks() palauttaa SDL:n alustamisesta kuluneen ajan millisekunteina, tietotyyppinä Uint32, eli Unsigned int, joka on 32-bittinen.

kayttaja-4976 [24.08.2006 14:43:05]

#

Eli siis includetan SDL:n kirjaston ja sieltä sitten? Vai onko se jossain muussa kuin SDL.h:ssa?

Heikki [24.08.2006 14:54:32]

#

Jep, SDL.h on includettava ja SDL:n kirjastot linkitettävä. Lisäksi SDL on alustettava (SDL_INIT_TIMER-lippu taitaa riittää jos et tarvitse muuta kuin SDL_GetTicksin()).

SDL:ää kannattaa hyödyntää myös mm. ikkunan luomiseen ja syötteiden lukemiseen, jolloin saat koodistasi täysin porttaantuvaa.

Tumpelo [01.09.2006 13:11:03]

#

Onkos tuon ajan mittaamisen tarkempaa metodia kuin tuo SDL_GetTicks? Tai tarkoitan että antaako tuo aina 100% varmasti ja tarkasti sen ajan, ilman mitään heittoja? Jostain kuulin että olisi tarkempikin funktio.

kayttaja-4976 [01.09.2006 13:47:51]

#

WinApissa oli joku, kai törkyisen hidas.

Zach [01.09.2006 14:41:54]

#


QueryPerformanceCounter()
antaa periaatteessa tarkimman mahdollisen ajan; SDL_GetTicks() :n tarkkuus riittää kyllä useimmissa tapauksissa aivan hyvin.

Tumpelo [01.09.2006 15:52:17]

#

Njaa, WinApia en voi käyttää koska ohjelma on Linuxille.

Sisuaski [01.09.2006 23:01:12]

#

Jos et ole aikeissa tehdä ohjelmastasi muilla kuin unixeilla toimivaa, niin SDL:n laittaminen depencyksi pelkästään tuosta syystä on tarpeetonta. Glibc:stä(GNU:n c-standardikirjasto, joka tulee joka ohjelmaan joka tapauksessa) löytyy tuohon tarkoitukseen funktio gettimeofday, joka antaa ajan sekuntaina ja mikrosekunteina. Tietoa käytöstä löytyy man-sivulta.

Jos SDL:lää kuitenkin käytät, niin hidastus onnistuu millisekuntaja odottavalla SDL_Delay-funktiolla. Glibc:stä taas löytyy mikrosekunteja odottava usleep tuohon hommaan (tai nanosleep jos ei mikrosekuntien tarkkuus riitä).


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta