[OpenGL/C++] Vitesse de deplacement independante du fps :??:

Vitesse de deplacement independante du fps :??: [OpenGL/C++] - C++ - Programmation

Marsh Posté le 30-03-2003 à 07:33:18    

Comment faire, de facon efficace, pour rendre la vitesse de deplacement independante du taux de fps, quitte a avancer par saccades ?
 
Car la, je me deplace d'un taux fixe a chaque iteration de boucle... Le probleme etant que si moins de fps, moins d'iteration de la boucle, donc deplacement moins rapide.
 
En gros : Comment mesurer le fps de facon efficace et adapter la vitesse de deplacement a celui ci :??:
 
Merci beaucoup :jap:

Reply

Marsh Posté le 30-03-2003 à 07:33:18   

Reply

Marsh Posté le 30-03-2003 à 11:50:35    

ben c'est pourtant pas tres complique:
position = temps * vitesse.
 
Si ta vitesse est de 2 m par secondes
et qu'il s'est ecoulé une demi seconde
alors tu t'es déplacé de 1 m...
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 30-03-2003 à 12:01:24    

legreg a écrit :

ben c'est pourtant pas tres complique:
position = temps * vitesse.
 
Si ta vitesse est de 2 m par secondes
et qu'il s'est ecoulé une demi seconde
alors tu t'es déplacé de 1 m...
 
LeGreg


 
Donc en gros, faut que je fasse le con avec un timer moi meme.
 
Pensais qu'ils avaient regle le probleme avec une fonction integree moi.

Reply

Marsh Posté le 30-03-2003 à 12:04:39    

pour mesurer le temps
la solution simple c'est soit de faire appel
a GetTickCount() (windows.h)
soit de creer et utiliser un performance
timer qui n'est pas accessible sur toutes
les plateformes.
Pour le QueryPerformanceCounter -> cf la MSDN
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 30-03-2003 à 12:07:24    

tetedeiench a écrit :


Pensais qu'ils avaient regle le probleme avec une fonction integree moi.


 
ben attends c'est franchement pas complique ???
 
tu t'attends a quoi d'autre comme fonction integree
une fonction qui te fait la multiplication temps * vitesse ??
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 30-03-2003 à 12:20:16    

tetedeiench a écrit :

Comment faire, de facon efficace, pour rendre la vitesse de deplacement independante du taux de fps, quitte a avancer par saccades ?
 
Car la, je me deplace d'un taux fixe a chaque iteration de boucle... Le probleme etant que si moins de fps, moins d'iteration de la boucle, donc deplacement moins rapide.
 
En gros : Comment mesurer le fps de facon efficace et adapter la vitesse de deplacement a celui ci :??:
 
Merci beaucoup :jap:


 
Pour quelqu'un qui se prétend aussi calé que ça en 3D (cf un de nos posts précédents) je suis étonné que tu n'ai jamais entendu parlé des "time based movements" ...

Reply

Marsh Posté le 30-03-2003 à 12:32:29    

euh je sais pas si c comme ca ke les autres ils font, mais peut etre ca peut marcher....
 
En gros tu force le rendu de l'image k'elle a était calculer en entier ou pas. En bref, quand ton timer lance le calcul de la frame a etre afficher, tu a un autre timer qui va forcer l'affichage de la frame dans les delais voulu, si le calcul n'a pa pu aboutir, ben tu laisse l'ancienne frame...
 
ca peut ressembler a ca:
 
CalculFrame() /*la fonction ou tu colle tout tes vertex et compagnie*/
{
    CalculFini = FALSE; /*un bool declarer en public qui permet de savoir si t'a fini ton calcul*/
 
//tout ton petit programme
 
    CalculFini = TRUE;
}
 
void ShowGLScene() //pour montrer l'image
{
     
        if(CalculFini) // si ton calcul de frame a reussi
        {
             SwapBuffers(hDC); // on affiche
        }
     
}
 
Bon bien sur ca ne marche qu'avec 2 timers synchro.... un qui lance le calcul de la frame, un qui apelle la fonction pour afficher l'image.
 
Et bien il faut ke tes timers soit "priotéres" dans la queues des messages systemes, packe si t'on systeme est occuper a calculer ta frame, il va pas emerger quand ton timer qui gere l'affichage va expirer.  
 
Bon ca c faisble avec l'api win32, mais en c pur, je sais pas.
 
Je rappelle que c qu'une idée, que j'ai jamais essayer ce truc, et que ca n'aura pas trop de probleme a foirer.

Reply

Marsh Posté le 30-03-2003 à 13:08:22    

Sinon, il y a le dernier tuto de la page:
http://www.gametutorials.com/Tutor [...] GL_Pg1.htm

Reply

Marsh Posté le 30-03-2003 à 14:59:42    

Autre methode qui marche bien :
 
Tu fais un timer maison qui incrémente une variable tous les 1 ms.
 
Et après dans ta boucle principale ca donne ça (enfin un truc du genre) :
 

Code :
  1. game_time = 0;//on remet le compteur du temps réel à 0 (il s'incrémente tout seul tous les 1 ms.
  2.    while (1) {
  3.       while (game_time > 0) {
  4.          update_game_logic();
  5.          --game_time;
  6.       }
  7.       draw_the_game();
  8.    }

 
 
Voilà  :hello:


Message édité par ITM le 30-03-2003 à 15:00:08

---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 30-03-2003 à 15:52:05    

ITM a écrit :

Autre methode qui marche bien :
 
Tu fais un timer maison qui incrémente une variable tous les 1 ms.
 
Et après dans ta boucle principale ca donne ça (enfin un truc du genre) :
 

Code :
  1. game_time = 0;//on remet le compteur du temps réel à 0 (il s'incrémente tout seul tous les 1 ms.
  2.    while (1) {
  3.       while (game_time > 0) {
  4.          update_game_logic();
  5.          --game_time;
  6.       }
  7.       draw_the_game();
  8.    }

 
 
Voilà  :hello:


 
 
Tu fais pas un peu trop de calcul, qd tu fais ca ? T'as meilleur temps de faire ton "update_game_logic(game_time);" (qui tient donc maintenant compte d'une quatité de temps) et "game_time=0;"
sinon, tu génères des calculs en plus ...
 
( j'suis pas tout à fait sur, ca dépend de ce que tu as dans ton update_game_logic() )


---------------
last.fm
Reply

Marsh Posté le 30-03-2003 à 15:52:05   

Reply

Marsh Posté le 30-03-2003 à 15:55:10    

Le game_time ici ne sert qu'à appeler upadate game_logic à des intervalles réguliers, et à dessiner des que c'est possible.
Plus l'ordi est puissant, plus draw_the_game() sera appelé souvent


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 30-03-2003 à 22:03:33    

pour kyle_katarn : ayant toujours programme pour ma seule et unique becane, je ne me suis jamais pose de questions la dessus.
 
Pour les autres : J'avais pas pense a getTickCount. Ce qui m'ennuyais, c'etait de trouver un timer a la resolution assez grande pour remplir cette fonction. Et je pensais que 1 milliseconde etait pas une resolution asse grande. Pi me suis dit que le jour ou le gars fera 1000 fps dans mon appli, les poules auront des dents.
 
Donc voila, merci pour GetTickCount(), ve m'en servir intensivement :jap:


Message édité par Tetedeiench le 30-03-2003 à 22:03:44
Reply

Sujets relatifs:

Leave a Replay

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