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

OpenSceneGraph Discussion :

stockage de matrice (sous osg)


Sujet :

OpenSceneGraph

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut stockage de matrice (sous osg)
    Bonjour,

    J'ai des difficultés à manipuler des matrices sous openscengraph. En effet, je fais un nombre d'acquisitions, à chaque acquisition je calcule une matrice de rotation R. et je voudrais récupérer toutes mes matrices de rotation après ma boucle for (sur le nombre d'acquisitions).

    J'ai pensé à stocker mes matrices au fur et à mesure dans une grande matrice. Mais je ne vois pas comment écrire cela (je suis débutant en c++, et encore plus en osg !!).

    Merci de votre aide!!

  2. #2
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par hell_ Voir le message
    Bonjour,

    Re-bonjour,

    en quelque sorte, ce que j'aimerai faire c'est ce que bush_back fait avec les vecteurs!!!

    Merci de votre aide!!

  3. #3
    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
    Bonjour,

    Ce n'est pas un probleme d'OSG que tu as mais de C++.

    Les vectors sont une excellent solution a ton probleme.
    Un std::vector est un containeur qui peut contenir ce que tu veux, icompris des matrices.

    Il te suffit donc de déclarer un vector de matrices,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector< osg::Matrix > myVector;
    De faire des push_back a chaque tour de boucle avec les matrioces de rotation,

    Et enfin tu as ton vector qui contient tes matrices (dans l'ordre) et tu peut en faire ce que tu veux.
    "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"

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Je vous remercie bcp de votre réponse!!!

    J'ai une deuxième question, cette fois-ci elle concerne bien OSG. Auriez vous une idée de la convention des angles d'euler dans OSG:
    Est ce que c'est bien : roll-> rotation autour de l'axe X,
    pitch-> autour de l'axe Y
    yaw -> autour de l'axe Z
    C'est ce que j'ai trouvé sur un forum, sur le site d'OSG il n'y'a pas plus de détails!!

    Merci de votre aide

  5. #5
    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
    Heuu je n'en ai aucune idée.

    Pour convertir une matrice en angles d'Eulers et vice versa, j'ai utilisé la FAQ

    http://jeux.developpez.com/faq/math/...formations#Q37
    et
    http://jeux.developpez.com/faq/math/...formations#Q36
    "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"

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je continue à avoir des difficulter à manipuler les vecteurs et matrices de type osg, en c++ (n'étant pas à la base très douée en programation c++). Cette fois-ci, je souhaite réutiliser un vecteur que je nomme 'g_camera0' (calculé à l'extérieur d'une boucle) à l'intérieur d'une boucle for, mais je m'aperçois qu'une fois dans la boucle, le vecteur 'g_camera0' est inconnu. Pour vous donner une idée plus précise de mon pb, voici un bout de mon code:


    if (calibration) {

    std::cout << "Press key to begin"<< std::endl;
    getch();

    int nb_acq = 3; // nombre d'acquisitions

    mat G_IMU = mat(3,nb_acq );
    mat Ez_marker = mat(3,nb_acq ;
    mat HPR1 = mat(3nb_acq );

    // phase d'initialisation du vecteur g_camera
    CaptureCalibration(img, key,img_4ch,&viewer,pImage,capture);
    osg::Matrix rotation0 = osg::Matrix();
    rotation0 = osg::Matrix::inverse(rotation0);
    osg::Vec3 g_camera0 = rotation0 * osg::Vec3(0,1.0,0); // ici je calcule mon vecteur g_camera0 initial (que je souhaite utilisé par la suite)

    // phase de calibrage
    for (int i =0; i< nb_acq; i++){
    CaptureCalibration(img, key,img_4ch,&viewer,pImage,capture);
    osg::Matrix rotation = osg::Matrix();
    rotation.makeRotate(g_marker->getAttitude());
    osg::Vec3 ez_marker = rotation * osg::g_camera0; // ici je dois multiplier ma rotation par le vecteur g_camera0 issu de l'initialisation...le problème c'est qu'il ne l'a plus en mémoire!!!

    Faut-il faire un pointeur? j'ai essayé mais cela ne marche pas, auriez vous une idée de code pour mon pb?? en vous remerciant d'avance!!

    H

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ca y est ca marche, pas besoin de pointeur en fait...je n'ai rien rajouté, et maintenant il le reconnait (alors que j'avais essayé plein de fois avant, mais ce ne marchais pas) ... je comprends pas ce qui s'est passsé (mais je suis bien contente que ca fonctionne )

    merci tout de même

  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
    Citation Envoyé par hell_ Voir le message
    // phase d'initialisation du vecteur g_camera
    CaptureCalibration(img, key,img_4ch,&viewer,pImage,capture);
    osg::Matrix rotation0 = osg::Matrix();
    rotation0 = osg::Matrix::inverse(rotation0);
    osg::Vec3 g_camera0 = rotation0 * osg::Vec3(0,1.0,0); // ici je calcule mon vecteur g_camera0 initial (que je souhaite utilisé par la suite)
    Il est tout a fait inutile ici de récuperer l'inverse de ta matrice. Comme ta matrice a juste été intialisée avec le constructeur par défaut, je suis a peu pres certain qu'elle est l'identité, et l'inverse de l'identité, ben c'est l'identité.
    Meme chose ensuite pour le produit avec le vecteur : identité * vecteur = vecteur.
    En somme tout ceci pourrait avoir été écrit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // phase d'initialisation du vecteur g_camera
    CaptureCalibration(img, key,img_4ch,&viewer,pImage,capture); 
    osg::Matrix rotation0;
    osg::Vec3 g_camera0osg::Vec3(0,1.0,0);

    Citation Envoyé par hell_ Voir le message
    // phase de calibrage
    for (int i =0; i< nb_acq; i++){
    CaptureCalibration(img, key,img_4ch,&viewer,pImage,capture);
    osg::Matrix rotation = osg::Matrix();
    rotation.makeRotate(g_marker->getAttitude());
    osg::Vec3 ez_marker = rotation * osg::g_camera0; // ici je dois multiplier ma rotation par le vecteur g_camera0 issu de l'initialisation...le problème c'est qu'il ne l'a plus en mémoire!!!
    Salut,
    Quand tu utilise une variable locale, il ne faut pas réutiliser le namespace (osg:: ) devant la variable en question
    En le virant de là, ça doit marcher tout comme il faut
    "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
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci de vos précédentes indications qui m'ont bien été utiles. Aujourd'hui c'est une nouvelle difficulté que j'ai. J'obtiens à l'aide de mon programme (osg/c++) une matrice de type osg::Matrix M 50x3. Je souhaite faire un tirage aléatoire sur les 50 lignes de la matrice M, en extraire (aléatoirement donc) 15 lignes par exemple, et obtenir en fin de compte une nouvelle matrice M' 15x3. (tout en préservant les élements constituant chaque ligne).

    Petit exemple pour bien me faire comprendre,
    Soit M=[ 1 2 3
    4 5 6
    7 8 9
    10 11 12
    13 14 15]
    j'aimerai par ex,que M'=[ 10 11 12
    1 2 3]

    Auriez-vous une idée, ou un exemple de code (en c++), sur comment il faut procéder?

    Merci d'avance,

    H

  10. #10
    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 autant je comprend la notion de tirage aleatoire de lignes, mais alors par contre je ne vois pas du tout comme tu peux instancier des matrices osg de 50*3 sachant que par definition (et donc implementation ) les matrices OSG sont des matrices 4*4 ...

    Sinon pour ton soucis, il suffit d'imbriquer 2 boucles : une qui va parcourir les lignes a copier, et une qui va copier les elements de ces dernieres.
    Rien de bien méchant.
    "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"

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Points : 4
    Points
    4
    Par défaut fonction osg::getPosition
    Bonjour,

    je souhaite à l'aide d'une caméra récupérer la position d'un marqueur via osg. J'ai vu que la fontion getPosition permet de faire cela...je m'en suis servi, mais cela donne des résultats (vecteur position en x y z) qui ne semble pas très correcte.j'aimerai savoir en quelle unité le vecteur vec::osg::getPosition est il exprimé? pensez vous qu'elle est fiable cette fonction??

    merci de votre aide!

  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
    Bonjour.

    D'une part cette question manque de contexte, qu'est ce qu'un marqueur par exemple ?
    D'autre part ça n'a rien a voir alors je vous invite a ouvrir un nouveau topic dans ce forum pour cette nouvelle question.
    "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"

Discussions similaires

  1. manipulation des matrices sous SSRS
    Par linram dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/07/2007, 12h31
  2. dimension d'une matrice sous VBA
    Par galaguiloe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/06/2007, 11h20
  3. Stockage des mails sous squirremail
    Par ziseb dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 26/04/2007, 12h36
  4. [Installation] Serveur SVN sous linux, stockage du dépôt sous Windows
    Par gk14fire dans le forum Subversion
    Réponses: 1
    Dernier message: 20/12/2006, 07h26
  5. Problème : modifier une matrice sous contraintes
    Par andjeo dans le forum Algorithmes et structures de données
    Réponses: 44
    Dernier message: 27/03/2006, 17h04

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