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

Moteurs 3D Discussion :

[3DSMax] Importer une scène sous format txt ou tableur


Sujet :

Moteurs 3D

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut [3DSMax] Importer une scène sous format txt ou tableur
    Bonjour à tous,

    Avec Matlab, j'ai généré N points au hasard dans un certain volume et tous espacés d'une certaine distance. Ces points (représentés par leurs coordonnées x, y et z et quaternions) sont en fait des points de pivot. Toujours avec Matlab, je mets en forme ces points dans une matrice (N lignes, 7colonnes) que j'exporte au format txt ou tableur.

    Dans 3DSMax, je voudrais lire ce fichier, cette liste de coordonnées et associer à ces points un objet (une sphère par exemple ou bien un objet plus complexe au format 3DS ou obj sur mon disque dur).

    L'idée, c'est donc d'être capable de lire dans Max une liste de coordonnées (position et orientation) générée par un soft de calcul ou de simulation.

    L'un d'entre vous aurait-il une idée ?

    Grand merci pour votre aide

  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
    Regarde du coté des fichiers de 3D au format ASCII : vrml par exemple, tu peux l'écrire avec maltab et (a vérifier) le lire avec 3ds
    "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 à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Merci pour l'info. Je regarde les modalités d'export depuis Matlab et j'en rends compte.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Salut as-tu pensé au SDK de 3ds Max ?
    Si tu utilises fréquemment cet outil tu peux créer un plug-in ( .dlo je crois ) pour lire les données provenant de Matlab.

    Sinon je trouve que c'est un outil un peu lourd pour visualiser des données sauf si tu as besoin de calculer des scènes en raytracing avec multithreading sur plusieurs processeurs
    Tu pourrais te faire un petit programme appelant Open GL pour visualiser cela
    Le format .3ds est décrit sur www.wotsit.org

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 74
    Points
    74
    Par défaut yop
    sinon maxscript:
    -Les FileStream

    puis tu peut modifier les position
    en cherchant tes objets ainsi

    pour acceder a la position en x:
    objects["nom de l'objet"].pos.x
    ou objects[1].pos.x


    je ne vais pas tout te detaillé mais il y a un chm qui s appelle maxscript.chm qui est tres pratique,il est dispo sur le site de max il me semble,

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Merci pour vos réponses.

    Je ne comprends pas très bien la démarche avec le Filestream : quel est le type de fichier qu'ouvre la maxscript ? nécessairement un format 3D type vrml ou OBJ ou bien peut-il ouvrir un fichier qui contient une matrice avec les positions et les orientations (dans ce cas, il reste à associer un objet à une position/orientation comme le suggère ubenz ) ?

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 74
    Points
    74
    Par défaut yop
    maxscript peut ouvrir un fichier fait de zero et de 1 ^^

    je ne sait pas si il code les nombre pareil que matlab,

    par contre maxscript lit les fichier ASCII tres simplement,
    et a des outils pour te découpé les chaines de caractères en fonction de séparateur

    comme le disait Ange_Blond VRML ca serait pratique,
    le .obj est facile a lire aussi

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Je vais m'orienter vers un export en VRML.

    La démarche est la suivante :

    1/ créer avec Max un fichier VRML qui va servir de modèle. Les objets sont de simples box afin que le fichier VRML ne soit pas pollué par la position et l'orientation de milliers de facettes

    2/ à partir de Matlab, mise au format VRML de la matrice avec les fonction textscan et fprintf.

    3/ import du fichier VRML dans 3DSmax, la scène est composée de box. Remplacement des box par les "vrais" objets (ici des isosurfaces de protéines) avec la fonction "Replace" de Max.

    C'est pas super direct mais cela marchera.

    Je joins le fichier VRML qui servira de modèle avec une question :

    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
    #VRML V2.0 utf8
     
    # Produced by 3D Studio MAX VRML97 exporter, Version 9, Revision 1
    # Date: Tue Jun 16 15:11:16 2009
     
    DEF Box01 Transform {
      translation 1.085 0 3.697
      rotation -1 0 0 -0.8016
      children [
          Transform {
            translation 0 11.99 0
            children [
              Shape {
                appearance Appearance {
                  material Material {
                    diffuseColor 0.5294 0.2314 0.03137
                  }
                }
                geometry Box { size 23.22 23.99 22.13 }
              }
        ] }
      ]
    }
    DEF Box02 Transform {
      translation 9.268 -35.81 65.7
      rotation 0 1 0 -0.6455
      children [
          Transform {
            translation 0 12.82 0
            children [
              Shape {
                appearance Appearance {
                  material Material {
                    diffuseColor 0.6941 0.1098 0.5843
                  }
                }
                geometry Box { size 24.22 25.65 17.67 }
              }
        ] }
      ]
    }
    On remarque que les box sont repérés par des coordonnées de position et de rotation. Je ne saisis pas comment elles sont obtenues ! Si je demande les coordonnées dans Max via le Maxscript listener, j'obtiens des valeurs pour les quaternions très différentes. La position aussi est différente dans Max et dans le fichier VRML. Quelqu'un a-t-il une idée concernant la conversion utilisée ?

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 74
    Points
    74
    Par défaut yop
    il te faut utilisé une matrice de changement de repère,le repère utilisé dans max est assez peu commun, et il est apparament different de celui de math lab

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    OK, merci. Je vais tenter de trouver cela en suivant dans le help de Max le concept de Node matrix. J'en rends compte.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    La réponse se trouve à :

    http://web.archive.org/web/200410290...atest.html#Q33

    Q57. How do I convert a quaternion to a rotation axis and angle?
    ----------------------------------------------------------------
    A quaternion can be converted back to a rotation axis and angle
    using the following algorithm:

    quaternion_normalise( |X,Y,Z,W| );
    cos_a = W;
    angle = acos( cos_a ) * 2;
    sin_a = sqrt( 1.0 - cos_a * cos_a );
    if ( fabs( sin_a ) < 0.0005 ) sin_a = 1;
    axis -> x = X / sin_a;
    axis -> y = Y / sin_a;
    axis -> z = Z / sin_a;


    Dans Max, à partir d'un quaternion, il faut simplement changer y et z par :

    y = Z / sin_a;
    z = - Y / sin_a;

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 74
    Points
    74
    Par défaut yop^^
    hum oui mais le problème c est qu'il faut modifié les positions aussi

    il me semble de mémoire que ça revient a multiplier par l inverse de cette matrice (A) la matrice identité,et tu obtient une matrice de changement de repère

    matrice A = {1,0,0,
    0,0,1,
    0,-1,0}

    matrice CHANGEMENT_REPERE = M_IDENTITE * A^(-1)
    vecteur NouveauxPoint = MonPoint * CHANGEMENT_REPERE

    pour les rotation,
    tu peut ensuite convertir cette matrice en quaternion pour obtenir le quaternion de conversion

    pour la conversion de quaternion je ne suis pas sur que ca marche , je l ai lu mais je n'ai pas essayé,,
    par contre quand je passe des maillages de polygones de max a opengl , j'utilise le calcul au dessus,et ca marche^^

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Oui effectivement, il faut modifier les positions X => X, Y => Z, Z => -Y.

    Le système de Max reste toutefois mystérieux pour moi :

    En convertissant ainsi le quaternion et les positions, je ne retrouve toujours pas les objets correctement orientés.

    J'abandonne l'idée d'un export depuis Matlab au format VRML contenant des boites qui sont ensuite remplacées par le mesh final (via $baseobject=$nomdumesh.baseobject). Cela ne marche pas, les orientations sont incorrectes.

    Ma problématique reste la suivante : comment importer une scène dans 3DSMax contenant des centaines d'objets formés chacun de milliers de facettes ? Cette scène a été créée à partir de Matlab mais aurait très bien pu être créée dans OSG ou Blender.

    Si j'exporte en VRML ou OBJ, le fichier sera trop lourd.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Points : 13
    Points
    13
    Par défaut
    Finalement je m'en suis sorti de la façon suivante :

    j'exporte mes données au format VRML en utilisant une seule fois la description de la géométrie de l'objet : j'ai utilisé "geometry USE _..." dans le fichier VRML lorsque l'objet est présent plusieurs fois dans la scène.

    J'utilise le système de coordonnées d'OpenGL. Ainsi, la conversion vers Max d'un quaternion (q1 q2 q3 w) en un axe de rotation et un angle est la suivante :

    X = X, Y=Z, Z= -Y pour la position

    Pour la rotation :
    cos_a = w
    angle = (-1)*acos( cos_a ) * 2
    sin_a = sqrt( 1.0 - cos_a * cos_a )
    x = -q1/sin_a
    y = -q3/sin_a
    z = q2/sin_a

    On obtient un axe de coordonnées x,y, z et une rotation autour de cet axe d'une valeur donnée par Angle.

Discussions similaires

  1. [Débutant] Enregistrer une image sous format .txt
    Par mehdi.crespo dans le forum Images
    Réponses: 3
    Dernier message: 08/02/2012, 01h12
  2. Réponses: 2
    Dernier message: 02/06/2008, 10h57
  3. Vider une scène sous ActionScript
    Par Devil Shark dans le forum Flash
    Réponses: 4
    Dernier message: 01/03/2007, 16h18
  4. importer un texte sous format xml
    Par gorgonite dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/08/2006, 22h16
  5. Réponses: 13
    Dernier message: 23/06/2006, 12h12

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