Toon posts:

[C++] Frame Rate Limiter

Pagina: 1
Acties:
  • 55 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoe bouw ik een Frame Rate Limiter in mijn VC++ .NET 2003 OpenGL applicatie?

Ik weet wel al dat het moet geplaatst worden in de functie waar de frame wordt getekent,
maar hoe maak ik zo'n Frame Rate Limiter.

Google bracht me geen resultaat.

Edit: Ook de GoT Search bracht geen resultaat.

[ Voor 11% gewijzigd door Verwijderd op 28-01-2005 17:08 ]


  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 08-05 18:30
denk niet dat het is toegestaan dat iemand deze code even voorkauwt voor jou.. Wat heb je zelf geprobeerd ?..

Maar misschien heb je hier nog iets aan http://www.flipcode.com/c...thread_show=16804#p111721

Verwijderd

Topicstarter
Ik wil geen sleep gebruiken, ik ben zelf nog een n00b in het maken van 3D applicaties maar ik wil wel iig een frame rate limiter hebben in mijn spel.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lijkt me niet zo moeilijk, gewoon zorgen dat je render code niet vaker per seconde wordt aangeroepen dan het maximum aantal frames dat je wilt krijgen. Dat kun je doen door te kijken wat de tijd tussen de huidige en de vorige frame is, en als die te klein is een Sleep te doen, of ipv een vaste loop gewoon op WM_TIMER messages reageren die je aan kunt zetten met SetTimer
Ik wil geen sleep gebruiken
Waarom niet?

[ Voor 7% gewijzigd door .oisyn op 28-01-2005 17:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

.oisyn schreef op vrijdag 28 januari 2005 @ 17:13:
Lijkt me niet zo moeilijk, gewoon zorgen dat je render code niet vaker per seconde wordt aangeroepen dan het maximum aantal frames dat je wilt krijgen. Dat kun je doen door te kijken wat de tijd tussen de huidige en de vorige frame is, en als die te klein is een Sleep te doen, of ipv een vaste loop gewoon op WM_TIMER messages reageren die je aan kunt zetten met SetTimer
Of je pakt SetWaitableTimer die niet afhankelijk is van het doorlopen van je message pump en in kernelmode opereert :)

Professionele website nodig?


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 28 januari 2005 @ 17:13:
Ik wil geen sleep gebruiken, ik ben zelf nog een n00b in het maken van 3D applicaties maar ik wil wel iig een frame rate limiter hebben in mijn spel.
Je bent een n00b in het maken van 3D Applicaties, maar je wil wel een framelimiter :? :D

Verdiep je eens in de materie :Y)
OpenGL
OpenGL Frame Limiter

En leer je nou eens aan om nette topics te maken, waar je zelf ook wat moeite voor doet: Wat heb je al geprobeerd? Wat heb je gezocht en gevonden? Wat is het probleem? Enz... Daarmee kunnen wij veel meer, en zullen er meer mensen geneigd zijn je te helpen.

[ Voor 15% gewijzigd door RobIII op 28-01-2005 17:16 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Cyrus-The-Virus
  • Registratie: Juni 2003
  • Laatst online: 29-12-2025
gideon82 schreef op vrijdag 28 januari 2005 @ 17:11:
denk niet dat het is toegestaan dat iemand deze code even voorkauwt voor jou..
misschien een hele gekke vraag, maar waarom is dat niet toegestaan? is dat een algemene regel van GoT?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op vrijdag 28 januari 2005 @ 17:15:
[...]

Of je pakt SetWaitableTimer die niet afhankelijk is van het doorlopen van je message pump en in kernelmode opereert :)
Je moet je messagepump sowieso aan de gang houden, het is ideaal als daar af en toe een WM_TIMER doorheen komt. Anders moet je gaan wachten met MsgWait* tot je timer verstreken is of tot er een message klaar staat, wordt het niet makkelijker op :)

[ Voor 4% gewijzigd door .oisyn op 28-01-2005 17:17 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DrivinUCrazy
  • Registratie: Oktober 2004
  • Laatst online: 21:16

DrivinUCrazy

Vechte, valle en opstoan

Cyrus-The-Virus schreef op vrijdag 28 januari 2005 @ 17:17:
[...]


misschien een hele gekke vraag, maar waarom is dat niet toegestaan? is dat een algemene regel van GoT?
Dit klinkt nogal als een huiswerkvraag, en dus: ja.
edit: Mijn excuses .oisyn, maar hij stelde toch nog een vraag? Dáár gaf ik antwoord op. Daarnaast had hij al zijn antwoord op zijn eerste vraag.

[ Voor 92% gewijzigd door DrivinUCrazy op 28-01-2005 17:25 ]

't Is een kwestie van geduld, rustig wachten op de dag, dat heel Holland Limburgs lult.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

DrivinUCrazy schreef op vrijdag 28 januari 2005 @ 17:17:
[...]


Dit klinkt nogal als een huiswerkvraag, en dus: ja.
Cyrus-The-Virus schreef op vrijdag 28 januari 2005 @ 17:17:
[...]


misschien een hele gekke vraag, maar waarom is dat niet toegestaan? is dat een algemene regel van GoT?
Modbreak:Zullen we dit soort reacties die inhoudelijk niets met het onderwerp te maken hebben buiten de draad houden? Hiervoor zijn Lieve Adjes, Schop een Modje en <moderator>@tweakers.net gereserveerd :)

[ Voor 4% gewijzigd door .oisyn op 28-01-2005 17:20 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op vrijdag 28 januari 2005 @ 17:13:
Lijkt me niet zo moeilijk, gewoon zorgen dat je render code niet vaker per seconde wordt aangeroepen dan het maximum aantal frames dat je wilt krijgen. Dat kun je doen door te kijken wat de tijd tussen de huidige en de vorige frame is, en als die te klein is een Sleep te doen, of ipv een vaste loop gewoon op WM_TIMER messages reageren die je aan kunt zetten met SetTimer


[...]
Waarom niet?
Want dan gaat het programma slapen :O
Half-life 2 doet overigens ook geen sleep.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat is toch precies wat je wilt? Wat wil je anders in je overgebleven tijd gaan doen?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Dit zijn geen huiswerkvragen, ik ben gewoon bezig met een spel te porten van mijn rekenmachine in OpenGL omdat mijn rekenmachine redelijk traag renderd.

Maar nu zit ik weer met het probleem dat het spel te snel gaat.

Dus kunnen jullie mij a.u.b. helpen? ;(

Verwijderd

Topicstarter
.oisyn schreef op vrijdag 28 januari 2005 @ 17:20:
Dat is toch precies wat je wilt? Wat wil je anders in je overgebleven tijd gaan doen?
Detecteren of er toetsen ingedrukt zijn?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

.oisyn schreef op vrijdag 28 januari 2005 @ 17:17:
[...]


Je moet je messagepump sowieso aan de gang houden, het is ideaal als daar af en toe een WM_TIMER doorheen komt. Anders moet je gaan wachten met MsgWait* tot je timer verstreken is of tot er een message klaar staat, wordt het niet makkelijker op :)
Tip: je kunt een completion routine aan een waitable timer hangen ;)

Professionele website nodig?


Verwijderd

Topicstarter
Hoe moet dat dan, ik snap niets van de vage uitleg en die pseudo-codes 8)7 8)7 8)7
Die maken het alleen maar ingewikkelder.

O ja, moet ik dan mijn frame render functie gaan verplaatsen ???

[ Voor 22% gewijzigd door Verwijderd op 28-01-2005 17:25 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Detecteren of er toetsen ingedrukt zijn?
Dat kost niets, als je dat eerst allemaal doet en je kijkt dan of er tijd over is dan kun je alsnog een sleep doen. Maar ik heb nog een suggestie gegeven behalve die sleep.
Maar nu zit ik weer met het probleem dat het spel te snel gaat.
Klinkt alsof je je berekeningen niet baseert op de tijd. Je doet zeker elke iteratie positie += snelheid ipv positie += snelheid * frametijd. Dan krijg je dat probleem idd, je moet je berekeningen altijd baseren op de tijd, dan loopt het bij iedereen even snel.

[ Voor 5% gewijzigd door .oisyn op 28-01-2005 17:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik denk dus dat ik met wel met die timer moet gaan werken, want ik wil "GEEN" vloeiende bewegingen, ze moeten dus gewoon bij het renderen van de volgende frame (na een seconde bvb) naar het volgende vakje gaan op het scherm (Spel = 2D)

[ Voor 10% gewijzigd door Verwijderd op 28-01-2005 17:27 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op vrijdag 28 januari 2005 @ 17:22:
[...]

Detecteren of er toetsen ingedrukt zijn?
Uhm je limiteert neem ik aan richting 60 of 90fps, hoe vaak denk je dat de gebruiker een toets kan indrukken? De snelste typers van deze wereld halen ~420 aanslagen per minuut geloof ik, da's 7 per seconde.

Sowieso is het veel belangrijker dat je de game engine limiteert dan je graphics engine: dat je teveel frames rendert boeit niemand, maar als iemand met een snelle bak een directere respons op commando's krijgt is dat unfair, evenals als tegenstanders langzamer lopen op een trage bak. Je zal dus moeten zorgen dat je 'game loop' inclusief het uitlezen van het toetsenbord op een fixed interval wordt uitgevoerd (meestal 60* per seconde oid), en daaromheen je renders in moeten plannen.

Professionele website nodig?


Verwijderd

Topicstarter
Hoe doe ik dat dan, geef eens even duidelijke voorbeelden alstublieft.
Ik ben zelf nog niet instaat om volledige stukken code te genereren, ik leef momenteel nog alleen maar op voorbeelden. Ik kan dus bij wijze van spreken niet zelfstandig codes in elkaar steken (In C++ dan...) en weet niet eens waar ik het moet gaan zoeken (google levert weinig resultaat)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op vrijdag 28 januari 2005 @ 17:23:
[...]

Tip: je kunt een completion routine aan een waitable timer hangen ;)
Ja maak het nodeloos ingewikkeld 8)7 ;)
curry684 schreef op vrijdag 28 januari 2005 @ 17:27:
Je zal dus moeten zorgen dat je 'game loop' inclusief het uitlezen van het toetsenbord op een fixed interval wordt uitgevoerd (meestal 60* per seconde oid), en daaromheen je renders in moeten plannen.
Met een fixed interval kom je misschien weg op een console, maar op een PC met varierende hardware werkt dat gewoonweg niet, omdat je niet kunt garanderen dat alles ook in die tijd af komt. Variable intervals dus, met een limiter die capt op de refreshrate (of vsync'en).

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Je kan me zoveel vertellen, maar VSYNC :? Timer :?

Hebben jullie code voor mij?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op vrijdag 28 januari 2005 @ 17:29:
Hoe doe ik dat dan, geef eens even duidelijke voorbeelden alstublieft.
Ik ben zelf nog niet instaat om volledige stukken code te genereren, ik leef momenteel nog alleen maar op voorbeelden. Ik kan dus bij wijze van spreken niet zelfstandig codes in elkaar steken (In C++ dan...) en weet niet eens waar ik het moet gaan zoeken (google levert weinig resultaat)
Dan moet je eerst eens leren programmeren, dit is een forum en geen persoonlijke tutorial site. Als je leert schilderen begin je ook niet met de Nachtwacht na te maken, dan begin je met een paar simpele pentekeningen op een A4'tje. Evenzo leer je programmeren niet door tegen de klippen op zo ongeveer het moeilijkste onderwerp op programmeergebied aan te vliegen.

In C++ aan een 3D spel beginnen terwijl je de taal nog niet eens beheerst (en blijkbaar ook niet veel snapt van het Win32 platform) is onbegonnen werk.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 28 januari 2005 @ 17:29:
Hoe doe ik dat dan, geef eens even duidelijke voorbeelden alstublieft.
Ik ben zelf nog niet instaat om volledige stukken code te genereren, ik leef momenteel nog alleen maar op voorbeelden. Ik kan dus bij wijze van spreken niet zelfstandig codes in elkaar steken (In C++ dan...) en weet niet eens waar ik het moet gaan zoeken (google levert weinig resultaat)
Sorry maar nee, we kauwen niets voor. We gaan je niet leren programmeren, dat mag je helemaal zelf doen. GoT is bedoeld voor de gevorderde computergebruiker, hence de naam "Gathering of Tweakers". Dat betekent niet dat newbies er niet mogen komen, maar echter wel dat we wel van ze verwachten dat ze zelf aan de gang gaan met de dingen die ze willen leren. Misschien is het handig niet teveel hooi op je vork te nemen en overstapt op een simpeler project, en gewoon vanaf 0 beginnen te leren. Er zijn zat goede tutorials en boeken te vinden. Games zijn, hoe leuk het ook is om te maken, veel te complex om mee te beginnen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, basta.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik heb alleen een Frame Rate Limiter, en ik weet genoeg van die programmeertaal om een 2D spel te maken. (Geport van rekenmachine)

Dus pls help me.

Overigens: Van code kun je leren en zo leer je weer iets bij, en in het schop een modje forum posten heeft geen zin dus zeg ik het hier gewoon: Jullie Crew sluiten mensen buiten.

[ Voor 38% gewijzigd door Verwijderd op 28-01-2005 17:36 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Al eens aan gedacht om gewoon de MSDN open te slaan en de functieomschrijvingen te lezen van de functies die ik in mijn eerste post hebt genoemd? Ga dat maar eens doen, dan wordt het een en ander vanzelf duidelijker. Nee we nemen je niet aan je handje mee.
Van code kun je leren
Alleen hoe je een interface moet gebruiken, en dat staat ook in de documentatie. Maar goed, dit heeft geen zin, ik sluit 'm wel.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op vrijdag 28 januari 2005 @ 17:35:
Overigens: Van code kun je leren en zo leer je weer iets bij
Dat je van code kunt leren klopt, maar dan moet het wel aansluiten bij je niveau. Van kijken naar de Nachtwacht en er een foto van maken om thuis aan de muur te hangen leer je nog steeds niet schilderen, dat is iets wat je door oefening en ervaring moet leren. En ervaring doe je op door simpel te beginnen en steeds je grenzen te verleggen zodra je het vorige onderwerp beheerst, dat doe je niet door direct het moeilijkste te willen maken: daarmee frustreer je jezelf, en je leert er simpelweg niets van omdat je de benodigde fundamentele voorkennis ontbeert.
en in het schop een modje forum posten heeft geen zin dus zeg ik het hier gewoon: Jullie Crew sluiten mensen buiten.
Doe eens normaal :/

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.