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 :

animer robot avec les angles des bones


Sujet :

Ogre

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut animer robot avec les angles des bones
    Bonjour,
    j'ai testé le ce tutoriel
    http://www.ogre3d.org/tikiwiki/tiki-...utorial1Source
    il marche bien
    mais au lieu d'animer le robot en spécifiant le nom d'animation comme içi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mAnimationState = mEntity->getAnimationState("Walk");
    mAnimationState->setLoop(true);
    mAnimationState->setEnabled(true);
    je veux que utilisé juste les nouvelles angles et position de ces bones pour l'animer (je vais pas utiliser getaniationstate) c-a-d contrôler leur bones
    normalement pour contrôler les bone d'un squelette manuellement il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(unsigned int i = 0; i < mEntity->getSkeleton()->getNumBones(); ++i) {
         mEntity->getSkeleton()->getBone(i)->setManuallyControlled(true);
         	}
    ensuite dans frameRendringQueued j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(unsigned int i = 0; i < mEntity->getSkeleton()->getNumBones(); ++i) {
     
              angle=mEntity->getSkeleton()->getBone(i)->getOrientation();
                position=mEntity->getSkeleton()->getBone(i)->getPosition();
     
             mEntity->getSkeleton()->getBone(i)->setOrientation(angle);
             mEntity->getSkeleton()->getBone(i)->setPosition(position);
              }
    normalemnt avec ce code , à chaque frame le bone change leur position à la nouvelle position non ?
    mais je ne vois rien

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Citation Envoyé par info_sara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(unsigned int i = 0; i < mEntity->getSkeleton()->getNumBones(); ++i) {
     
              angle=mEntity->getSkeleton()->getBone(i)->getOrientation();
                position=mEntity->getSkeleton()->getBone(i)->getPosition();
     
             mEntity->getSkeleton()->getBone(i)->setOrientation(angle);
             mEntity->getSkeleton()->getBone(i)->setPosition(position);
              }
    normalemnt avec ce code , à chaque frame le bone change leur position à la nouvelle position non ?
    mais je ne vois rien
    Il n'y a pas de nouvelle position/orientation, tu prends l'orientation et la position puis tu l'assignes à nouveau.

    c'est comme si tu faisais
    couleur = forme.getColor;
    forme.setColor(couleur);
    la couleur ne changerait jamais.
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    oui je vois, même si je l'essaye avec un autre entité par exemple
    dans create scene
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mEntity = mSceneMgr->createEntity("Cube","g.mesh");
     mNode = mSceneMgr->getRootSceneNode()->
       createChildSceneNode("CubeNode", Ogre::Vector3(0.0f, 0.0f,0.0f));
            mNode->attachObject(mEntity);
    ent_charact = mSceneMgr->createEntity("character","robot.mesh");
     
     for(unsigned int i = 0; i <  mEntity->getSkeleton()->getNumBones(); ++i) {
          mEntity->getSkeleton()->getBone(i)->setManuallyControlled(true);
         mEntity->getSkeleton()->getBone(i)->setInheritOrientation(/*false*/true);
       }
    et dans frame rendring queude
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(unsigned int i = 0; i <  mEntity->getSkeleton()->getNumBones(); ++i){
     
              ent_charact->getSkeleton()->getBone(i)->setOrientation(angle);
            mEntity ->getSkeleton()->getBone(i)->setPosition(position);
    }
    et pour avancet à une autre frame j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void QOgreRenderWindow::paintEvent(QPaintEvent* evt)
    {
           if(!mRenderWindow)
        {
            init();
        }
       //mRenderWindow->update();
       Ogre::Root::getSingleton()._fireFrameStarted();
         mRenderWindow->update();
         Ogre::Root::getSingleton()._fireFrameEnded();
           evt->accept();
    }
    mais ça ne marche pas toujours

  4. #4
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    pour lire une frame c'est juste

    Root::getSingleton().renderOneFrame();

    laisse setInheritOrientation à false, sinon ca va faire conflit avec la node attachée
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    laisse setInheritOrientation à false, sinon ca va faire conflit avec la node attachée
    si je la laisse à false , lorsque j'affiche mon robot je le vois déformé (sans faire aucune modification)
    D'une autre part je vois que la seule solution pour animer mon character est de créer un animation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Ogre::Animation* mAnim=/*ent_charact->getSkeleton()*/mSceneMgr->createAnimation("ana",1.20833);
       Ogre::NodeAnimationTrack* track = mAnim->createNodeTrack(0,ent_charact->getSkeleton()->getBone(1));
       Ogre::TransformKeyFrame* key;
       key=track->createNodeKeyFrame(0);
       key->setTranslate(Ogre::Vector3(0, 0, 0));
       key->setRotation(Ogre::Quaternion(0,1,0,0));
       Ogre::TransformKeyFrame* key1;
    .....................................................
    mais pur spécifie tout les mouvements des bones et créer plusieurs keyframe dans le code avec cette méthode ,c'est pas pratiquant

Discussions similaires

  1. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  2. [ANIMATION] problème avec les rotations
    Par backfire dans le forum DirectX
    Réponses: 3
    Dernier message: 22/02/2007, 21h12
  3. Réponses: 2
    Dernier message: 01/08/2006, 13h38
  4. probleme avec les posts des formulaires
    Par axel-erator dans le forum Langage
    Réponses: 6
    Dernier message: 04/05/2006, 11h41

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