IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Comment faire une action, par rapport au temps


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut Comment faire une action, par rapport au temps
    Bonjour

    -Comment on fais pour effectuer par example un calcul par rapport au temps et non a chaque frame, car .. a chaque frame, si l'apply rame .. le resultat n'est pas bon.
    Je dois utiliser time.h par example?
    Car je cherche des tuto,mais je ne trouve pas
    -Sinon pour un check .. quelle est la meilleure methode pour que .. quand je clique dessu, il se check comme il faut?
    car j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int m;
    if(m == 0)
    if(mousebutton1 == presser)
    m=1;
    if(m == 1)
    if(mousebutton1 == presser)
    m=0;
    dracwcheck(m); // si m == 1; le check est coché ..
    Mais c'est toujours par rapport a chaque frame, et il faut avoir de la chance pour qu'il se checke, ou l'inverse
    Merci!

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 519
    Points : 5 168
    Points
    5 168
    Par défaut
    d'abord dans ton exemple tu testes la variable m sans l'avoir initialisée, j'imagine que c'est une erreur ?

    sinon pour ce qui est de modifier par intervale de temps et non par image, tu dois juste calculer le temps passé depuis la dernière image et t'en servir comme un facteur de modification pour tout ce qui doit changer entre deux instants dans ton programme

    sous windows il faut utiliser : GetTickCount()
    avec la SDL : SDL_GetTicks()
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    pour m, je me sui tromper, il est:
    Mais comme l'apply tourne a 500 FPS .. le check a du mal a se mettre coché ou pas ..
    sinon, merci beaucoup,je vais etudier SDL_GetTicks();

    edit: int m = 0; est hors de la boucle.
    sinon SDL_GetTicks(), cest quand meme par rapport a chaque frame .. non?

    Je suis perdu là. Vu que SDL_GetTicks() monte a chaque miliseconde ..
    a chaque frame je dois reinitialiser la variable pour l'utiliser?
    Enfin, peu-etre que je n'ai pas compri le systeme?
    Aidez moi SVP

    .. est ce qu'on peut faire 2 boucles independentes dans un seul exe? une pour les calculs, et une pour l'affichage?

    Merci

  4. #4
    2io
    2io est déconnecté
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Sur cette page, je pense qu'il y a plein d'informations qui te seront utiles.

    Si j'ai bien compris, tu voudrais que tous les X millisecondes, un bout de code vérifie si tu as pressé le bouton de ta souris et dessine en conséquence un check, c'est ça?

    (je n'ai jamais utilisé SDL mais en cherchant un peu sur le net, on trouve à peu près ce que l'on désire, en bricolant un peu à droite et à gauche)

    si c'est le cas, utilises la fonction SDL_SetTimer.
    Le prototype de la fonction est la suivante:
    #include "SDL.h"

    int SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback);

    avec le prototype du paramètre callback un pointeur de fonction:
    typedef Uint32 (*SDL_TimerCallback)(Uint32 interval);
    donc cela peut donner la chose suivante avec ton programme:
    [...]
    int m = 0;

    Uint32 VerifCheck (Uint32 interval) {

    if (mousebutton1 == presser) {
    if (m == 0) {
    m = 1;
    } else {
    m = 0;
    }
    } else;
    dracwcheck (m);
    return interval; <- !!! important, cela relance le timer
    }

    void main (void) {

    [...]

    SDL_Init (TES_PARAMETRES | SDL_INIT_TIMER); <- !!! Initialise l'utilisation des timers

    [...]

    SDL_SetTimer (10,&VerifCheck); <- !!! Timer appelé tous les 10 millisecondes

    [...]

    }
    pour arrêter le timer, il faut appeler ceci: SDL_SetTimer (0,NULL);

    ps: il se peut qu'il aie de problème d'adressage (* ou &) suis plus trop au point sur la manipulation des pointeurs de fonction donc essaies avec et sans et vois ce que le compilo te dit

  5. #5
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Oui merci beaucoup, ceci marche tres bien quand l'apply tourne tres vitte ..
    C'est un super grand avancement pour mon apply 3d 8) .
    Mais alors si l'apply tourne a moins de 5fps (c'est juste un example,j'espere que mon apply feras pas ça) ..
    alors l'action se fais aussi moins vitte.
    Est ce que je peut laisser comme ça?
    Ou alors il y a encore un moyen de faire une action, sans dependre du temps d'affichage des graphismes?
    Merci beaucoup, beaucoup

  6. #6
    2io
    2io est déconnecté
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    c'est vrai que cela va bien fonctionner tant que l'affichage prendra moins de temps que l'intervalle du timer; dans le cas où tu as 5 FPS, cad que tu as une image toutes les 200 ms, et que tu as un timer de 10 ms, la fonction "dracwcheck (m)" sera appelée 20 fois pendant "le rendu" de l'image, ce qui n'est pas bon.

    L'astuce sera d'appeler la fonction "dracwcheck (m)" en dehors de la fonction Callback de la fonction SDL_SetTimer.

    Et puis si tu cliques deux fois de suite à des instants rapprochés, tu ne verras pas que le check a été coché puis décoché sauf si cela tombe bien. On peut résoudre ce "problème" en ajoutant une variable A initialisée à FALSE, qui passe à TRUE quand on modifie la variable m, modification possible si la variable A est à FALSE, et qui repasse à FALSE dès que le "rendu" de l'image est faite.

    bool A = FALSE;

    Uint32 VerifCheck (Uint32 interval) {

    if (A == FALSE) {
    if (mousebutton1 == presser) {
    if (m == 0) {
    m = 1;
    } else {
    m = 0;
    }
    A = TRUE;
    } else;
    } else;
    [dracwcheck (m);]
    return interval; <- !!! important, cela relance le timer
    }

    [...]
    /* fin du rendu de l'image */
    A = FALSE;
    [...]

    C'est une solution, il y a sûrement d'autres plus simples et/ou plus efficaces.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/08/2008, 10h49
  2. Comment positionner une div par rapport à une autre
    Par solorac dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 17/07/2008, 22h08
  3. comment faire une action sur JPanel
    Par L4BiN dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/01/2007, 13h13
  4. Réponses: 2
    Dernier message: 26/10/2006, 17h13
  5. Comment faire une division par 5 avec les decalages
    Par Zaion dans le forum Assembleur
    Réponses: 7
    Dernier message: 05/11/2004, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo