Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
454 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°347440
Tetedeienc​h
Head Of God
Posté le 30-03-2003 à 07:33:18  profilanswer
 

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:

mood
Publicité
Posté le 30-03-2003 à 07:33:18  profilanswer
 

n°347460
LeGreg
Posté le 30-03-2003 à 11:50:35  profilanswer
 

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
n°347462
Tetedeienc​h
Head Of God
Posté le 30-03-2003 à 12:01:24  profilanswer
 

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.

n°347463
LeGreg
Posté le 30-03-2003 à 12:04:39  profilanswer
 

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
n°347465
LeGreg
Posté le 30-03-2003 à 12:07:24  profilanswer
 

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
n°347468
Kyle_Katar​n
Posté le 30-03-2003 à 12:20:16  profilanswer
 

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" ...

n°347471
MrX
Posté le 30-03-2003 à 12:32:29  profilanswer
 

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.

n°347481
chagarou
Posté le 30-03-2003 à 13:08:22  profilanswer
 

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

n°347507
ITM
Avatar peint à la main
Posté le 30-03-2003 à 14:59:42  profilanswer
 

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
n°347529
theshockwa​ve
I work at a firm named Koslow
Posté le 30-03-2003 à 15:52:05  profilanswer
 

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
mood
Publicité
Posté le 30-03-2003 à 15:52:05  profilanswer
 

n°347534
ITM
Avatar peint à la main
Posté le 30-03-2003 à 15:55:10  profilanswer
 

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
n°347767
Tetedeienc​h
Head Of God
Posté le 30-03-2003 à 22:03:33  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[OpenGL] Faire comme Nature dans 3DMark[JAVA][OpenGL][3DS] Animation d'obj
[OpenGL] ensemble de points et patates :D[C, C++] Comment régler la vitesse d'un lecteur cd ou dvd ???
[OpenGL]Gestion de la souris en glut pour faire une caméra[opengl et c++]comment utiliser les classes avec l'open gl
ImageMagick et les textures openGLOpenGL est mort, vive OpenGL
SDL] Augmentation de la vitesse !!!OpenGL : GROS problème
Plus de sujets relatifs à : [OpenGL/C++] Vitesse de deplacement independante du fps :??:


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR