Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Frameraten asettaminen ei onnistu

Tumpelo [26.10.2006 21:58:18]

#

Joo, eli tein tällaisen funktion jonka avulla pelin frameraten saisi pysymään paikoillaan.

void setFPS()
{
GLint time;
GLint time2;

time = SDL_GetTicks();
time -= time2;

if (time < 30) SDL_Delay(30 - time);

time2 = SDL_GetTicks();

}

Tuon pitäisi toimia lukuunottamatta ensimmäistä ruudunpäivitystä, mutta se ei hidasta ollenkaan FPS:ää. Epäilen että se johtuu siitä että tuossa funktion alussa on nuo muuttujamäärittelyt, mutta ne kun eivät oikein muuallekaan suostu menemään.

Tietenkin saa ehdottaa parempaakin tapaa toteuttaa kys. funktio.

EDIT: Kysynpä huvikseni tässä sitten erästä mieltä askarruttanutta asiaa. Eli miksi joissain pc peleissä ei ole frameratea ollenkaan rajoitettu? Minun järkeni ainakin sanoo, ettei siinä ole järkeä, sillä ilman rajoitusta tehokaskin prosessori huutaa kokoajan täysillä ja lämpiää siinä samalla, mutta jos fps on rajoitettu niin prosessori saa aina välillä huilimistauon, lukuunottamatta liian laiskoja prosessoreja jotka joka tapauksessa käyvät kokoajan täysillä.

Blaze [26.10.2006 22:28:32]

#

Tumpelo kirjoitti:

Epäilen että se johtuu siitä että tuossa funktion alussa on nuo muuttujamäärittelyt, mutta ne kun eivät oikein muuallekaan suostu menemään.

Oikein epäilet.
Nuo muuttujat pitää määritellä staattisiksi tai globaaleiksi (ja sitten alustaa jossain), että ne säilyttää arvonsa funktion kutsukertojen välillä.

Tumpelo kirjoitti:

miksi joissain pc peleissä ei ole frameratea ollenkaan rajoitettu?

Jokainen CS-peel.. *köh* pelaaja tietää, että pelin pitää pyöriä vähintään 150fps, muuten se lagaa kamalasti, eikä vihollisiin voi osua!

Tumpelo [26.10.2006 22:45:41]

#

Jeps, kiitoksia. En oikein tahtonut saada globaalien muuttujien määrittelyä pelittään mutta kyse oli kuten aina, omasta töpistäni. Nyt toimii hienosti, eikä prosessorin käyttö nouse ollenkaan ohjelman aikana, toisin kuin rajoittamattomalla FPS:llä.

Jaa-a, aika teräsmiehiä nuo CS-peelot, kun näkevät noinkin tarkasti liikkuvan kuvan. Olin kuulevinani teorian että ihmisen silmälle riittää 24fps päivitysnopeus, itse olen sitä mieltä että 60fps on todella hyvä, mutta enpä olekaan CS-peelo / teräsmies.

Tzaeru [26.10.2006 22:49:14]

#

En ole ihan varma, mutta eikös ihmisen silmä rekisteröi noin ~75 kuvaa sekunnissa? Eli sellainen FPS kuin 90 on ihan mukava :)

Mutta joo, tosin kaikkein eliitintä olisi tehdä frameraten rajoitus sillä tavalla, että esimerkiksi kellonaika on ratkaisevassa osassa laskentafunktioissa. Näin hitaammatkin koneet olisivat samassa vaiheessa eri FPS:n kanssa kuin nopeammat koneet tiettynä kellonaikana :>

EDIT: Tai sitten ei, mietin juuri, että ainakin ELIITTI tr00 CS pelaus ihminen otus systeemeille hehe x-d pitää tietenkin juuri ruudun päivityksen olla sikamageenopee et tulee tosi eliitti nopeesti kuva simmuun vaikka ei refleksit muutenkaan riitä

Vilikki [30.10.2006 14:22:59]

#

Tumpelo kirjoitti:

Olin kuulevinani teorian että ihmisen silmälle riittää 24fps päivitysnopeus --

Tzaeru kirjoitti:

En ole ihan varma, mutta eikös ihmisen silmä rekisteröi noin ~75 kuvaa sekunnissa? Eli sellainen FPS kuin 90 on ihan mukava :)

Mjaa, meinasin näitä vähän kommentoida, mutta tulipa kyllä mieleen, että ihmissilmän rekisteröimisnopeus vaihtuvalle kuvalle ja fps, jolla ihminen hahmottaa vaihtuvat kuvat sulavaksi liikkeeksi, ei välttämättä ole lainkaan sama asia (myönnän, meinasin jo Tzaerun viestin haastaa vajaalla tietämykselläni :p).

Mutta kuitenkin, sen muistan varmasti kuulleeni, että ihmisen silmälle riittäisi hämärissä olosuhteissa muistaakseni noin 20fps (muutama ruutu sinne tai tänne) hahmottaakseen vaihtuvat kuvat sulavaksi liikkeeksi. Muistelen myös kuulleeni valoisan olosuhteen vastaavaksi arvoksi arvon, joka on jossain 30-40 fps:n tietämillä (näin villisti arvailtuna ja arveltuna).

Ihmissilmän rekisteröimistä kuvista sekuntia kohden minulla ei tosin ole hajuakaan, kuten vasta tätä viestiä kirjoitellessa havaitsin.

pieslice [30.10.2006 17:47:38]

#

offtopic:
käytännössä FPS:n pitää olla sama kun monitori refresh raten, ainakin CRT-näytöillä. muuten kuvaan tulee interferenssiä siitä että se ei oo synkassa ja ihmissilmä rekisteröi helposti sellaisen epätasaiseksi liikkeeksi. jossain jatkuvastiskrollaavissa peleissä, esim autopelit tai 2d-shootterit, tämä tulee helpommin esiin kuin esim. FPS tai RTS peleissä joissa omalla toiminnalla on enemmän merkitystä ruudun liikkeeseen.
TFT-näyttöjen kanssa tällä asialla ei ole niin suurta merkitystä.

Vastaus

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

Tietoa sivustosta