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

Développement 2D, 3D et Jeux Discussion :

Orientation d'objets en fonction de repères différents


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut Orientation d'objets en fonction de repères différents
    Bonjour à tous.

    Désolé pour le titre du sujet qui n'est peut-être pas optimal. Je n'ai rien trouvé de mieux.

    Je vais être plus clair dans le corps du message en détaillant ce que je cherche à faire. Sur la première pièce jointe, vous pouvez voir deux personnages. Chaque personnage dispose d'un squelette différent et les repères de chaque bones dans l'espace sont eux aussi différents.

    Ce que je souhaite faire, c'est placer le personnage féminin dans la même position que le masculin (cf 2ème pièce jointe). Je connais l'orientation de chaque bones dans l'espace (des deux squelettes) ou par rapport à son parent. Ces orientations peuvent être exprimées sous forme de quaternions ou sous forme de vecteurs/angles de rotation.

    Cela fait plusieurs jours que j'essaye de résoudre ce problème, mais j'en arrive à me demander si une solution mathématique existe

    Si vous avez une quelconque piste, solution, je pourrai l'essayer et faire un retour ici.

    Merci d'avance, à bientôt.

    Cordialement,
    Goulmak.
    Images attachées Images attachées   

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Salut chef... le voilà en détail ton pb de bones... ^^

    Heuu à 1ere vue moi je verrai bien une méthode qui part de l'objet fixe (pied ou corp) et de là tu parcours tes deux squelettes bones par bones, en fesant un get de l'orientation sur le modele et un set de l'orientation sur la madame...

    a chaque fois tu te pose dans le repere parent... ou comme tu veux mais en tout cas tu reste bien dans le repere equivalent d'un squelette sur l'autre...

    Bon ça peut paraitre un peu simpliste... mais c'est ce qui me vient à l'esprit là...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Tiens tu es là toi aussi ?

    Merci pour la réponse, mais je ne sais pas si cela est faisable en fait.

    Je suis d'accord que dans l'idée il faut réorienter les bones. Le problème, c'est qu'ils sont liés à mon maillage et que je ne peux pas me contenter de les orienter de la même manière.

    Si à la base les personnages avaient les mêmes squelettes avec des repères locaux quasi identiques, je ne dis pas le contraire, mais c'est là tout le problème.

    Je peux avoir l'orientation d'un bone dans l'espace ou par rapport à son parent, mais vu qu'à aucun moment entre les deux mannequins je n'ai de répère en commun, il m'est impossible d'essayer de plaquer les orientations, ça fait du n'importe quoi et je me retrouve avec du picasso au final

    Si tu as plus de détails à apporter, hésite pas hein!

    A plus.

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Heee oui je suis partout à la fois ^^

    Je suis pas sur de comprendre ton pb de bones liés au maillage... je croyait que c'était l'inverse (maillage lié aux bones)

    Si je comprend bien, les modeles n'ont pas les meme squelettes ? (nombre et emplacement de bones différents)

    Si oui alors j'aurais peut etre une autre idée...

    Si non alors j'ai pas bien compris ton problème...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Maillage lié aux bones, bones liés au maillage, c'est du pareil au même au final puisque je ne touche pas au maillage du tout, mais uniquement aux bones. Mais tu as raison le maillage est lié aux bones, bon bref...

    En effet les squelettes sont complètement différents de par leur nombre de bones, leur hiérarchie et leurs repères locaux. Tu peux donc formuler ton autre idée

    A tantôt.

  6. #6
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    alors l'idée, aussi babare soit elle...

    (NOTE : les trucs simple j'aime pô... faut pas chercher)

    En fait l'idée générale serait d'adapter un maillage sur l'autre, en utilisant une méthode englobante.
    Par exemple : tu part du squelette à bouger (la madame). de ce squelette tu genere un big boite englobante qui prend en compte les formes du squelette (un peu comme si mettait un paralepipede englobant sur chaque bone mais en plus gros (sauf en longeur))

    l'idée ensuite serait de faire un matching du "squelette englobant" sur celui du modele... en terme de géométrie...
    là tu peux proceder mathématiquement ou à grand renforts de boucles... c'est à voir quoi.

    et enfin tu aura ton squelette original, englobé par ton squelette cible... et donc partant de là tu n'a plus qu'a récuperer les rotations du squelette englobant et les appliquer sur ta madame....

    Bon je sais que c'est plein de "yapluka" mais c'est une idée quoi...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Oui c'est effectivement une idée.

    J'en avais eu une dans le même genre, en gros c'est créer un vecteur directeur entre 2 joints du mannequin de référence, et d'appliquer la même orientation global à ce même vecteur dans le mannequin à modifier.

    Dans cette technique ce qui me prose problème, c'est qu'il sera impossible (du moins je crois) d'orienter chacune des extrémités à savoir les dernières phalanges ou les pieds...

    Je vais continuer de creuser, j'espère arriver aux JO avant la cérémonie d'ouverture, parti comme c'est je pense que oui! (désolé pour cette blague plus que vaseuse )

    Tchô!

  8. #8
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    oki

    pr ta technique je pense que c'est gerable même si les oteils ont 12 phalanges... enfin je crois...
    Disons plutot que je ne vois pas pk ça ne fonctionnerai pas...

    bon courage..

    PS : rien compris à la blague des JO...

    Edit : 13 minutes plus tard j'ai enfin compris...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Ange_blond Voir le message
    Edit : 13 minutes plus tard j'ai enfin compris...
    Haha, je ne la trouvais pourtant pas très subtile celle-ci.

    Merci pour avoir réfléchi sur mon problème en tout cas. Si d'autres lecteurs ont des idées, qu'ils n'hésitent surtout pas. Je reste ouvert à des nouvelles propositions.

  10. #10
    Acropole
    Invité(e)
    Par défaut
    salut,

    Normalement tu devrais avoir au moins un bone en commun qui définit la position et l'orientation globale du squelette : le bone du bassin.
    Tout y est relié (jambes, torse et donc bras et tete), il est le seul a ne pas avoir de parent et tous les bones sont ses enfants.
    A partir de là il me semble assez aisé de parcourrir le squelette jusqu'aux extrémités.
    Par contre, si le nombre de bones est différent, je vois pas comment tu peux espérer avoir une position identique. Sauf peut être en considérant certains bones comme un seul.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Salut Acropole.

    J'ai effectivement un bone en commun, il ne s'agit pas du bassin mais d'un autre, qui a la même orientation quelque soit le squelette que j'ai.

    Parcourir le squelette est aisé, trouver l'orientation d'un bone par rapport à son parent sur le squelette source est facile, en revanche orienter le bone équivalent sur l'autre modèle est déjà plus tendu. J'ai réussi via la méthode qui consiste à trouver le vecteur directeur d'un bone (sans penser au repère local du bone) et à l'appliquer sur l'autre.

    Le problème, tu l'as compris, réside maintenant dans le nombre de bones qui n'est pas le même. Je recherche toujours la solution mathématique qui permet de répondre à mes besoins. Je pense y arriver à terme, mais c'est assez délicat

    Voilà, a+

  12. #12
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    A mon avis mathématiquement tu peux t'en sortir...

    Il te faudrai faire une méthode permettant de faire converger les chemins de bones entre eux (par chemin j'entend la polyligne dessinée par une partie de squelette, si on considere une ligne pour chaque bone).

    En utilisant un truc du genre de la minimisation de l'écart entre les deux chemins... géométriquement ou par intérgales meme... enfin je pense que de faire une routine qui fait converger au mieux deux polylignes peut solutionner (au moin en grande partie) ton pb.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  13. #13
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut,
    avant de te lancer dans des solutions mathématiques (à mon avis inexistant pour tous les cas), n'as-tu pas pensé à une approche plus "organisationnelle" ? De toute façon, on ne peut pas "calquer" un squelette sur n'importe quel autre, copier la position de la dame sur une araignée n'aurait aucun sens, par exemple.

    Les squelettes doivent avoir des caractéristiques communes alors pourquoi ne pas prévoir de les identifier, comme pouvoir coller à des bones (ou groupes de bones) de chaque squelette un même identifiant, comme "épaule" ou "genou". Il serait très simple et très rapide ensuite de les manipuler (opérations comme "tous les genoux gauches à 30°", etc....)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Salut N_I_C_S.

    Je ne sais pas si mathématiquement c'est possible, quoi que pour le moment j'arrive à certains résultats pas trop sales. Au final, je ne cherche pas à calquer un squelette d'humain sur celui d'une araignée, mais bien humain sur humain. Mon but et d'avoir un système de retargeting, un peu à la Motor. Mon application doit lire des mocaps (motion capture)

    Le problème c'est que deux squelettes sont rarement les mêmes, avec qui plus est une stand position identique. Je dois donc arriver à reproduire ce genre d'outil. Je suis d'accord il est plus simple d'identifier chaque partie. Ci-après un autre programme en image :



    Reste plus qu'à trouver comment cela s'implémente!

  15. #15
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    C'est clair, c'est facile de faire des yaqua
    Bon courage !

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/09/2006, 13h25
  2. Réponses: 2
    Dernier message: 10/12/2005, 21h10
  3. Réponses: 9
    Dernier message: 02/03/2005, 23h46
  4. Réponses: 14
    Dernier message: 02/03/2005, 19h15
  5. Réponses: 4
    Dernier message: 15/09/2004, 17h52

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