[C++] Pause en millisecondes dans un prog...

Pause en millisecondes dans un prog... [C++] - Programmation

Marsh Posté le 10-06-2002 à 12:13:05    

Comment est-ce-qu'on pourrais réalisé une telle pause avec la librairie time.h?
G déjà essayé la fonction delay(int ms) ms elle marche pas...

Reply

Marsh Posté le 10-06-2002 à 12:13:05   

Reply

Marsh Posté le 10-06-2002 à 12:23:05    

oups sorry----->
je suis en train de faire un petit casse brique en OGL et j'aimerais qu'il tourne à peu près à la même vitesse sur des config diff. Je suis sous Visual C++ 6 et j'utlise pas Glut...

Reply

Marsh Posté le 10-06-2002 à 13:00:48    

ca ? :)
 
NOM
       usleep  -  Interrompre le programme durant un nombre donné
       de microsecondes.
 
SYNOPSIS
       #include <unistd.h>
 
       void usleep (unsigned long usec);
       int usleep(unsigned long usec); /* SUSv2 */
 
DESCRIPTION
       La fonction  usleep()  suspend  l'exécution  du  programme
       appelant durant usec microsecondes.  La période de sommeil
       peut être allongée par une charge système  importante,  et
       par le temps passé à traiter l'appel de fonction.


---------------
Join us now and share the software;
Reply

Marsh Posté le 10-06-2002 à 13:52:00    

je sais pas si faire une pause est le meilleur moyen de ralentir un programme... je pense que ça ne te servira qu'a obtenir une animation saccadée..
à mon avis, une synchro VBL serait bcp plus efficace : tu es assuré que ton programme tourne sur toute config (puisque l'animation se fait en fonction du taux de rafraichissement de l'écran) et tu as la garantie d'une animation fluide


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-06-2002 à 14:49:20    

humm, ça ma l'air intérressant cette histoire de synchro...
comment ça marche cette chose?

Reply

Marsh Posté le 10-06-2002 à 14:53:26    

Glenn a écrit a écrit :

oups sorry----->
je suis en train de faire un petit casse brique en OGL et j'aimerais qu'il tourne à peu près à la même vitesse sur des config diff. Je suis sous Visual C++ 6 et j'utlise pas Glut...  




 
Si tu veux que ton jeu se déroule à la même vitesse qqsoit la config, il faut que tu fasses varier les frames par seconde et non pas ralentir les config rapides.

Reply

Marsh Posté le 10-06-2002 à 14:55:55    

ouais je sais, mais je sais pas comment faire... je vais me pencher la dessus et fouiller un peu dans le site de Nehe, y me semble avoir déjà vu ça qqpart.

Reply

Marsh Posté le 10-06-2002 à 15:05:03    

Glenn a écrit a écrit :

humm, ça ma l'air intérressant cette histoire de synchro...
comment ça marche cette chose?  




Le principe est très simple.
Tu sais que l'image sur ton moniteur est formée grace à un canon à électrons qui bombarde des électrons sur le tube. Ce bombardement se fait à une certaine fréquence, en partant en haut à gauche de l'écran et en finissant en bas à droite. Il bombarde donc une ligne horizontale, revient à la ligne suivante, la bombarde, etc...
Arrivé en bas, le canon remonte pour bombarder une nouvelle image.
La fréquence de bombardement est déterminée par le taux de rafraichissement de ton moniteur. Une fréquence de 100 Hz représente 100 images par seconde, une image étant composée d'un cycle de bombardement complet à partir du haut gauche de l'écran vers le bas droite.
Le VBL (Vertical Blank) représente le moment au cours duquel le canon, une fois arrivé en bas à droite de l'écran, remonte en haut à gauche. Pendant ce laps de temps, tu peux basculer l'écran virtuel vers l'écran réél.
En effet, pour exploiter pleinement le VBL, il te faut 2 surfaces de dessin : une surface qui sera visible à l'écran et une autre surface invisible, sur laquelle tu effectueras toutes tes opérations de tracé.
Pendant que le canon balaye l'écran pour tracer l'image présente sur la surface visible à l'écran, tu effectues tes opérations de tracé dans la surface invisible.
Une fois arrivé en bas de l'écran, tu utilises le temps que met le canon pour remonter (VBL) afin de basculer la surface invisible dans la surface visible, qui sera ainsi tracée par le canon, etc...
Le plus difficile est de déterminer le moment ou le canon a atteint le bas droite de l'écran. Ceci se fait en testant des registres internes à la carte VGA, mais il est possible qu'OpenGL te propose une fonction toute faite. Je sais pas du tout, je connais pas OpenGL. Regarde si une fonction du style "WaitVBlank", "WaitRefresh", etc.. est présente
 
A+


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-06-2002 à 15:10:36    

ok je vois ce que tu veux dire, je vais jeter un coup d'oeil la dessus...

Reply

Sujets relatifs:

Leave a Replay

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