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

Ogre Discussion :

Déplacements trop rapides


Sujet :

Ogre

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Déplacements trop rapides
    Bonjour.

    Je me suis mis il n'y a pas longtemps a Ogre 3D et j'essai de faire un systeme de déplacement ( sans ExampleApplication.h ). J'ai obtenu ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    while(1)
            {
                mRoot->_updateAllRenderTargets();
                inputReader->capture();
                if (inputReader->isKeyDown (KC_W))
                {
                    node->translate (node->getOrientation () * Vector3 (0, 0, 400));
                }
                if (inputReader->isKeyDown (KC_S))
                {
                    node->translate (node->getOrientation () * Vector3 (0, 0, -100));
                }
                if (inputReader->isKeyDown (KC_A))
                {
                    node->yaw (Radian (-2));
                }
                if (inputReader->isKeyDown (KC_D))
                {
                    node->yaw (Radian (2));
                }
                if (inputReader->isKeyDown (KC_UP))
                {
                    node->pitch (Radian (-2));
                }
                if (inputReader->isKeyDown (KC_DOWN))
                {
                    node->pitch (Radian (2));
                }
                if (inputReader->isKeyDown (KC_LEFT))
                {
                    node->roll (Radian (-2));
                }
                if (inputReader->isKeyDown (KC_RIGHT))
                {
                    node->roll (Radian (2));
                }
                if(inputReader->isKeyDown(KC_ESCAPE))
                {
                    break;
                }
            }
    Mais voila, le probleme est que tout va évidemment beaucoup trop vite, et donc je me demandais si ogre n'avais pas un systeme de timer ou quelque chose qui aurait le même résultat pour limiter la vitesse. Quelqu'un aurait t'il la solution ?

    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et pourquoi pas simplement réduire tes nombres dans un premier temps ?

    Ensuite, si tu as un problème de dépendance à la fréquence d'affichage, tu pourras multiplier / diviser tout ceci par le framerate, j'imagine.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Mais si on réduit les nombres, la vitesse ne sera pas la même sur tout les PC non ?

    Et donc, comment récupérer le framerate et si je multiplie les nombre par le framerate, sa sera pareil partout ?

    Merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais si on réduit les nombres, la vitesse ne sera pas la même sur tout les PC non ?
    Ce sera le cas quoiqu'il arrive si tu ne tiens pas compte du framerate.

    Et donc, comment récupérer le framerate
    Aucune idée, mais j'imagine que Ogre fournit tout ce qu'il faut pour ça.

    si je multiplie les nombre par le framerate, sa sera pareil partout ?
    Si tu divises, oui, ça devrait le faire.

  5. #5
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Le déplacement ne devrait pas être corrélé au framerate!

    Il y a un monde avec une échelle, une vitesse de déplacement possible dans ce monde.
    De l’autre côté, il y a un rendu de ce monde via une caméra.

    Si ton déplacement est de 2m/s, peut importe que ta caméra fasse un rendu à 25fps ou 50fps de ce monde.

    Même si on peut le corrélé au FPS, cela à un certain sens, mais il vaudrait mieux prévoir des timers.

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    donc justement, le deplacement doit etre completement lié au frame rate
    si tu veut avancer a 2m/s et que le PC 1 sort 60 images par second et le 2eme en sort 20, l'avancée effectuée à chaque image doit etre inversement proportionelle au nombre d'images par secondes, et l'utilisation de timers n'est pas satifaisantes pour un moteur 3D temps réel...

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je viens de mettre mon cerveau sur ON, et je viens de me rendre compte que j'ai dis de grosses bêtises....

    Côté client, tout est forcément lié au FPS pour une question d'optimisation, mais pas côté serveur.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Donc si j'ai bien compris, pour que la vitesse soit la même partout, je récupére le framerate et je divise la vitesse par ce framerate. Il faut donc que je cherche de ce côté la. Merci beaucoup pour vos réponses.

  9. #9
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    normalement, si tu utilise un FrameListener (ce qui est le fonctionnement normal de Ogre), dans les méthode frameBegin et frameEnd, tu peut récuperer le temps écoulé depuis la dernière frame qui est un attribut de l'évenement passé en paramètre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JBOX2D problème de déplacement trop rapide
    Par leandro95 dans le forum 2D
    Réponses: 1
    Dernier message: 09/03/2015, 11h47
  2. Déplacement trop rapide
    Par User Name dans le forum Langage
    Réponses: 7
    Dernier message: 22/04/2008, 20h52
  3. [VBA-E] Liaisons qui ne se mettent pas à jour (macro trop rapide?)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/11/2005, 09h36
  4. Horloge 2x trop rapide!
    Par rgy834 dans le forum Administration système
    Réponses: 6
    Dernier message: 24/10/2005, 21h08
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

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