Partage
  • Partager sur Facebook
  • Partager sur Twitter

irrlicht => déplacement

    9 juillet 2007 à 15:30:30

    Bonjour !
    Voilà depuis hier je teste le moteur irrlicht.
    J'ai reussi à gerer les collisions, à loader des meshs et la map, mais j'ai un problème...
    Je ne sais pas bien comment faire deplacer un mesh : je voudrais faire un système d'alleer-retour, j'ai créé une classe qui s'en charge et qui change la direction du mesh selon le booléen...mais ca marche pas du tout...
    Je voudrais trouver le moyen de faire : aller jusqu'à un point, rotation de 180° (pour le réalisme, le perso qui recule c'est bof :s), puis retour jusqu'au point de départ...et ainsi de suite.
    Mias je ne sais pas bien gérer les déplacements des nodes (même avec le tuto officiel que je trouve peu clair) et faire une fonction qui "détecte" quand mon node est arrivé au point d'arrivée et le fait repartir ensuite.
    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2007 à 16:00:18

      Bonjour !

      Citation : misanth

      même avec le tuto officiel que je trouve peu clair



      Sa c'est normal il n'est pas clair du tout et n'expliqe pas grand chose ...

      Pour ton déplacement rien de mieux qu'un coup d'oeil a la doc, déplacer un mesh est très facile !
      Tout d'abord il faut comprendre que on déplace le node du mesh et pas le mesh.
      Donc les modification ce ferons sur ton node.

      Il suffit de définir la direction que ton node devrat prendre pour son déplacement.
      Ensuite tu modifie la position en lui additionnant la direction(que tu peut multiplier par la vitesse si tu souhaite en faire une), il est préférable de normalizer le vecteur de direction pour avoir une unitée de base(et pouvoir controler la vitesse).

      Au niveau du code, rien de compliquer !
      Tu auras juste besoin de la fonction setPosition() qui appartient au node et qui prend en paramètre un vector3d.
      Et de cette fonction : getPosition(), qui appartient aussi au node et qui te permet de récupérer la position actuel du node sous la forme d'un vector3d.

      Pour la direction que devras empreinter ton node cela dépend comment tu veut la définir.
      Tu peut la définir à l'avance(donner deux points fixe dans l'espace), pour débuter c'est déjà bien et puis après tu pourras le faire en fonction de d'autres node(camera, node quelquonce ect...)

      Donc pour définir la direction, il faut récupérer la position du point a atteindre et lui soustraire la position du node.
      Tu obtient ainsi le vector qui sépare l'objet du point.
      Tu le normalize et tu l'additionne a la position de l'objet jusqu'a ce qu'il atteigne le point.

      Une fois arriver au point, tu utilise la fonction setRotation() du node qui prend en paramètre un vector3d.
      Il faudrat modifier le deuxieme parametre de ton vecteur de rotation(le composante Y) pour faire une rotation horizontal.

      Après bah... tu recommence en faisant une boucle en maitrisant le tout avec un timer pour avec le temps de voir l'objet et voilà tout objet fera des allées retour entre deux point ;)
      • Partager sur Facebook
      • Partager sur Twitter
        9 juillet 2007 à 16:14:16

        setPosition ne donne que la valeur de départ, non ? Si on la change avec une variable tout bête qu'on incrémente, le node ne se déplace pas !
        Il faut donc utiliser les vecteurs 3D, mais sous irrlicht je trouve pas de code epxlicatif..l'idée je 'lai mais pas le code pour l'utiliser !
        Merci de ton aide, mais je nage encore dans le brouillard ! :euh:
        Aucun tutorial en français n'explique clairement irrlicht (notamment les vecteurs 3d ?)

        EDIT : Y aurait il moyen que tu acceptes de m'expliquer ca sur msn (ca sera plus facile pour moi) ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 juillet 2007 à 16:39:38

          Citation : Pas de titre

          Aucun tutorial en français n'explique clairement irrlicht (notamment les vecteurs 3d ?)


          Il est pas bien celui là ? :-°
          http://www.siteduzero.com/tuto-3-3403-0-petit-guide-d-irrlicht.html

          Sinon en effet setPosition permet de modifier la valeur absolue du noeud.
          Donc tu as raison, la meilleur façon est de créer un vecteur que tu additionne à la position en cours à chaque frame. (enfin à chaque fois que tu veux le déplacer plutôt)

          Tu devrais essayer de le faire toi même avec la doc et si tu n'y arrive pas poste ton code. :)
          • Partager sur Facebook
          • Partager sur Twitter
            9 juillet 2007 à 16:46:01

            Justement, je ne sais pas comment créer un vecteur...j'ai un peu regarder la fonction createFlyStraightAnimator mais elle est floue et très très très peu maniable (j'ai l'impression)...
            Ca serait pour faire patrouiller un node.
            • Partager sur Facebook
            • Partager sur Twitter
              9 juillet 2007 à 16:52:28

              Citation : Pas de titre

              Justement, je ne sais pas comment créer un vecteur...


              http://irrlicht.sourceforge.net/docu/classirr_1_1core_1_1vector3d.html

              Ouais après il y a des classes toutes faites pour animer les noeuds mais je me suis jamais vraiment penché sur la question...

              EDIT : exemple de code :
              irr::core::vector3d monSuperVecteur(2, 5, 3);

              Et voilà, on passe les 3 composantes au constructeur.
              On peut aussi passer un autre vecteur déjà existant, tout est sur la page de la doc. :)
              • Partager sur Facebook
              • Partager sur Twitter
                9 juillet 2007 à 16:59:51

                Merci !
                Mais comment fait-on pour utiliser un vecteur pour modifier la position d'un node ?
                Merci pour la doc des vecteurs, mais pour déplacer mon node il faut utiliser une autre fonction non ?
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juillet 2007 à 18:06:31

                  Non.
                  Toute les fonction dont tu as besoin ont été énumérées !
                  Il suffis de reprendre le code de Kevin sur le vecteur.
                  Ensuite tu passe le vecteur en paramètre de setPosition().
                  Il faut bien comprendre que les vecteur 3d peuvent servir à indiquer une direction, comme une position, tout comme une intensité(longueur du vecteur).
                  Sa peut parraître un peu flou au début mais sa vient vite ;)

                  Comme je l'ai dis getPosition() renvoie... un vecteur 3d.
                  Donc tu récupère la position et tu l'additionne à ton vecteur de déplacement(direction normalizer), puis tu envoie le résultat de l'addition à la fonction setPosition().
                  Ton node auras subis la transformation du vecteur de déplacement !
                  Tu peut tout simplement faire l'addition directement dans l'appel de setPosition().
                  Tu auras donc dans la même ligne le getPosition + direction envoyer en paramètre à setPosition().

                  Je te laisse faire le code sa serait mieux que tu y arrive par toi même ;)

                  EDIT : Comme les vecteur servent a la fois pour les position et pour les directions tu devras utiliser un vecto3d pour le déplacement(que l'on vient d'expliquer) et encore un vecteur3d pour définir tes point de ronde.
                  Ce qui simplifie les chose puisque en regardans la doc tu verras que tu peut faire toute les opération de bases facilement avec les vector3d !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juillet 2007 à 18:18:08

                    Merci beaucoup pour votre aide !!!!!!!!!!
                    J'ai enfin réussi grâce à vous (j'ai relu tous vos messages jusqu'à comprendre)
                    j'avais mal compris l'utilisation des vecteurs !
                    Merci :D
                    • Partager sur Facebook
                    • Partager sur Twitter

                    irrlicht => déplacement

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown