[OpenGL] Gérer la vitesse d'affichage ?

Gérer la vitesse d'affichage ? [OpenGL] - Programmation

Marsh Posté le 07-11-2001 à 19:49:47    

Salut, voilà j'ai deux questions :
-> dans un programme utilisant l'opengl, comment peut-on gérer la vitesse du jeu ? Est-ce qu'on doit calculer le temps que met le PC à effectuer une boucle du jeu puis attendre le temps restant (en ayant donc un FPS prédéfini, du genre 30 fps) ? Cette solution ne me semble pas bonne, alors comment fait-on dans les jeux ?
 
-> dans mes programmes, puis-je utiliser des stuctures d'unités (pion, personnage) énormes, avec beaucoup d'attributs (en veillant bien sur a éviter les copies sur la pile et les choses comme cela) ?
 
merci

 

[edtdd]--Message édité par WhitePoney--[/edtdd]

Reply

Marsh Posté le 07-11-2001 à 19:49:47   

Reply

Marsh Posté le 07-11-2001 à 19:52:20    

- tu te bases sur le temps courant et non pas le nombre de frames calculées. par ex, GetTickCount() renvoie le nombre de millisecondes écoulées depuis le lancement de windows. il y a également des timers plus précis (timers multimedia).
 
- oui, ça ne pose aucun problème ... tu peux regarder les structures de la sdk de quake3, c'est assez gros d'ailleurs.

Reply

Marsh Posté le 07-11-2001 à 19:53:43    

youdontcare a écrit a écrit :

- tu te bases sur le temps courant et non pas le nombre de frames calculées. par ex, GetTickCount() renvoie le nombre de millisecondes écoulées depuis le lancement de windows. il y a également des timers plus précis (timers multimedia).




 
je comprends pas trop ce que tu veux dire :sweat:

Reply

Marsh Posté le 07-11-2001 à 20:04:44    

?

Reply

Marsh Posté le 07-11-2001 à 20:15:18    

oh c'est bon on peut respirer oui ? :lol:
 
une animation c'est généralement aller d'un point A à un point B en N millisecondes.
 
c'est donc une interpolation linéaire :
positionInterpolée = A*(1-t) + B*t; // t allant de 0 à 1.
 
la stratégie simple : au début de l'animation, tu regardes le temps courant :
 
startAnimTime = GetTickCount();
 
à chaque nouvelle frame, tu choppes le temps courant :
 
curAnimTime = GetTickCount();
 
tu calcules le temps écoulé depuis le début de l'anim :
 
deltaAnimTime = curAnimTime - startAnimTime;
 
c'est maintenant que la magie opère ... :D c'est là que tu décides le temps que prend l'animation. on va dire ici 5 secondes, soit 5000 milli secondes.
 
t = deltaAnimTime / 5000;
 
ce qui te donne ton t pour l'interpolation. si t >= 1.0, l'animation est finie.

Reply

Marsh Posté le 07-11-2001 à 20:27:54    

hoooooo je voyais pas ça comme ça ; pour moi, une animation c un objet qui va d'un point A a un point B en ayant sa vitesse de progression, je ne fixais pas un temps d'animation....
 
Je te remercie de ta réponse, je suis sûr que ça m'aidera vraiment :jap: !

Reply

Marsh Posté le 07-11-2001 à 20:37:19    

:) attention quand même, j'ai marqué 'généralement'. cette méthode marchera nickel pour ouvrir des portes, déplacer des persos, etc. pour la simulation physique, je ne sais pas du tout comment ça marche ...

Reply

Marsh Posté le 08-11-2001 à 09:23:35    

le pb c que je gérais les mouvements en pixels par boucle au lieu de pixels par temps.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed