Affichage repère 3D en C++
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Affichage repère 3D en C++



  1. #1
    Rdoume

    Affichage repère 3D en C++


    ------

    Bonjour,

    J'aurais aimé afficher un repère en 3D dans l'espace qui va varier par rapport à un repère initial, à la manière de cette vidéo : http://www.youtube.com/watch?v=Egl75nv9E7s


    Concrètement, j'aurais les 3 composantes de mon vecteur, et aimerai gérer l'affichage 3D. J'ai lu qu'openGL pouvait peut être m'aider, qu'en pensez vous? Et auriez vous des tutoriels utiles pour ma question?

    -----

  2. #2
    Dlzlogic

    Re : Affichage repère 3D en C++

    Bonjour,
    Je ne vois pas où est le problème.
    D'une part il y a l'objet que vous voulez visualiser, en l'occurrence les 3 composantes d'un vecteur, d'autre part le plan de visualisation, en l'occurrence l'écran. Il suffit de projeter les 3 composantes sur le plan de l'écran.

  3. #3
    Rdoume

    Re : Affichage repère 3D en C++

    Il n'y a pas de vrai problème si ce n'est mon manque de savoir.
    Ce dont vous parlez est exactement ce à quoi je veux aboutir, juste je demande quels sont les moyens pour y parvenir, quels outils vous pouvez me conseiller, parce que dans ce domaine je suis proche du zéro

  4. #4
    Dlzlogic

    Re : Affichage repère 3D en C++

    Vous avez mis C++ dans le titre, donc, je suppose que vous développez en C++. Quelle librairie graphique utilisez-vous ?
    En fait en C/C++ le nombre de fonctions graphiques est très limité mais largement suffisant.
    1- moveto(x,y)
    2- lineto(x,y)
    3- couleurs de crayon etc.
    Il faudrait que j'en sache un peu plus pour vous aider. Si c'est confidentiel, il y a les MP, mails etc.

  5. A voir en vidéo sur Futura
  6. #5
    Rdoume

    Re : Affichage repère 3D en C++

    En effet, mon but est de développer en C++. Toutefois, je n'ai pas de librairie graphique, ne sachant laquelle utiliser. Je suis a peu près au niveau 0 quand au développement graphique.

    En gros pour mon application, j'obtiens à partir d'une centrale inertielle 3 vecteurs formant un repère orthonormé. J'aimerai afficher ce nouveau repère en 3dimensions, par rapport à mon repère de base ( qui est le plan de la caméra).

  7. #6
    Dlzlogic

    Re : Affichage repère 3D en C++

    Le développement en graphique n'a rien de difficile. La seule réelle difficulté est que tant qu'on n'a pas quelque-chose d'à peu près bon on a RIEN. Et ça, c'est pas beaucoup. Il m'est souvent arrivé de faire un simple rectangle avec une diagonale pour "avoir quelque-chose".

    Moi, j'utilise Borland Builder C++. Sinon, la librairie graphique la plus courante est qt. En fait tout dépend beaucoup plus de votre niveau en développement et du temps que vous pouvez y consacrer que du choix de la librairie.

    Si c'est pour une application particulière et très ciblée, c'est à dire parfaitement définie, je peux vous aider.

  8. #7
    Rdoume

    Re : Affichage repère 3D en C++

    Mon application est parfaitement définie.

    J'utilise une centrale inertielle 6 degré de liberté, afin de savoir une position. Je me sers de ceci comme base pour mon vecteur : http://www.starlino.com/imu_guide.html

    A la fin, j'obtiens un repère composé de 3 vecteurs normés. Mon but est de représenter ce repère ( Et donc, ca me permet de savoir dans quel direction sont orientés mes vecteurs. ) .

    J'avais déja installé Qt dans le cadre d'un tutoriel pour la création d'interface ( celle du site du zéro ).

    Au niveau développement, j' ai des bases solides en programmation, un peu moins en C++, mais ma connaissance du Java et du C me permette d'assimiler suffisamment vite.
    Et au niveau du temps, j'ai environ 80% de mon temps libre entre 9h et 17h, ce qui me laisse pas mal de marge.

  9. #8
    Rdoume

    Re : Affichage repère 3D en C++

    Et a terme, c'est à dire le plus rapidement possible, mon but est de pouvoir dessiner un plan 2D, avec un point de couleur, ce point de couleur étant l'endroit que je pointe.

  10. #9
    Dlzlogic

    Re : Affichage repère 3D en C++

    On peut faire un petit applicatif très simple, au centre de l'écran la représentation des 3 composantes de la base. Le point O étant toujours fixe. Et un petit objet dont la position dépend en plan pour l'écran de la position de la souris et en éloignement du plan de l'écran des boutons gauche et droite ou de la roulette de la souris. Le vecteur suit en permanence la direction de l'objet.

  11. #10
    Rdoume

    Re : Affichage repère 3D en C++

    Cela me semble correspondre à mes attentes, mais je n'ai pas bien compris ce que vous entendiez par "Et un petit objet dont la position dépend en plan pour l'écran de la position de la souris".
    On ferait appartenir le pointeur de la souris à un plan ( qui correspond à l'écran que je veux pointer) et la molette permettrait d'éloigner ce plan ( et à fortiori la position du petit objet) ?

  12. #11
    Dlzlogic

    Re : Affichage repère 3D en C++

    Oui, c'est ça, naturellement en soi, cela ne servirait à rien par contre ce serait une base de départ, le petit objet ne serait pas bougé par la souris, mais correspondrait à une réalité de quelque-chose.

  13. #12
    Rdoume

    Re : Affichage repère 3D en C++

    Il est vrai que ça me ferai une bonne base pour continuer mon applicatif.
    Comment suis-je censé m'y prendre pour faire cela?

  14. #13
    Dlzlogic

    Re : Affichage repère 3D en C++

    Je vais le faire, et je vous donne les sources. Il est plus facile d'expliquer à partir de quelque-chose.
    De votre côté, dessinez un rectangle, sa diagonale, l'ellipse inscrite dans le rectangle, modifiez la couleur des traits l'épaisseur etc., ce sont des bases qui servent toujours. N'hésitez pas à partir d'exemples existants. Comme je n'ai pas Qt, je ne pourrai rien faire concernant le nom des fonctions à utiliser.

  15. #14
    Dlzlogic

    Re : Affichage repère 3D en C++

    Bon, voila un début :
    Code:
    void __fastcall TVisuDir::FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    //
      sX=X-Width/2;
      sY=Width/2-Y;
      Graphics::TBitmap *FormImage=new Graphics::TBitmap(); // = GetFormImage();
      FormImage->Width=Image->Width;
      FormImage->Height=Image->Height;
      FormImage->Canvas->Brush->Color=clCream;
      FormImage->Canvas->Rectangle(0,0,Image->Width,Image->Height);
      int a=Image->Width/2;
      int ecran=Image->Height/2;
      float L=sqrt(sX*sX + sY*sY + sZ*sZ);
      vX=MulDiv(a,sX,ecran);
      vY=MulDiv(a,sY,ecran);
      int xO=Image->Width/2;
      int yO=Image->Height/2;
      FormImage->Canvas->MoveTo(xO,yO);
      int Xp=vX;
      int Yp=0;
      FormImage->Canvas->Pen->Color=clRed;
      FormImage->Canvas->Pen->Width=3;
      FormImage->Canvas->LineTo(Xp,Yp);
    
      FormImage->Canvas->MoveTo(xO,yO);
      Xp=0;
      Yp=vY;
      FormImage->Canvas->Pen->Color=clLime;
      FormImage->Canvas->Pen->Width=3;
      FormImage->Canvas->LineTo(Xp,Yp);
      Image->Picture->Assign(FormImage);
      Image->Invalidate();
    }
    Pour l'instant c'est assez simplifié, il n'y a que les composantes X et Y, et surtout ça ne représente pas la réalité. Par contre, concernant le dessin lui-même, il y a tout.
    On verra la suite demain.

  16. #15
    Rdoume

    Re : Affichage repère 3D en C++

    Merci, je vais explorer tout ca pour demain !

  17. #16
    Rdoume

    Re : Affichage repère 3D en C++

    Bonjour,

    J'ai donc regardé le code, je n'ai pas de problème pour comprendre la syntaxe.
    Toutefois je vous avoue être un peu perdu quand à son utilisation concrète. Dites moi si je me trompe sur ces points là :

    TVisuDir: est la classe dans la quelle vous définissez la fonction.

    TShiftState permet de connaitre une interaction utilisateur

    TObject indique l'utilisation d'un object, et donc les fonctions qui s'y réfèrent

    Quels sont les librairies que vous utilisez au sein de votre classe? Vous avez développez cela sous Cbuilder? Merci pour vos réponses.

  18. #17
    Jack
    Modérateur

    Re : Affichage repère 3D en C++

    Tout ce code ne fonctionnera que sous C++ builder.

    Ne vaudrait-il pas mieux utiliser une autre librairie? Celle de Qt me semble très bien et peut à priori résoudre tous les problème d'affichage.

    A+

  19. #18
    Dlzlogic

    Re : Affichage repère 3D en C++

    Bonjour,
    Oui, c'est vrai, ce code ne fonctionnera qui sous Builder.
    Mais il me semble que la logique restera la même, quelque soit le langage utilisé, et il me semblait que c'était justement le point de départ nécessaire pour démarrer.
    J'aurai pu l'écrire en pseudo-code, mais je ne suis pas très doué pour ça, et tant qu'à faire, j'aime autant avoir pour moi un résultat visuel.

  20. #19
    Dlzlogic

    Re : Affichage repère 3D en C++

    Complément à mon message précédent
    TVisuDir: est la classe dans la quelle vous définissez la fonction.
    Oui
    TShiftState permet de connaitre une interaction utilisateur
    Oui
    Code:
    TObject indique l'utilisation d'un object, et donc les fonctions qui s'y réfèrent
    Pas exactement. Le paramètre Sender est un pointeur su l'objet qui a provoqué cette fonction. Ce paramètre est très rarement utilisé.
    Quels sont les librairies que vous utilisez au sein de votre classe? Vous avez développez cela sous Cbuilder?
    J'utilise la librairie VCL de Borland. Mais je suis sûr que Qt conviendra parfaitement.

Discussions similaires

  1. Réponses: 48
    Dernier message: 01/07/2009, 06h48
  2. Passage d'un repère sphérique vers un repère sphérique
    Par invitee38386b3 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 08/06/2009, 13h01
  3. repére relative et repére absolu
    Par lamiss09 dans le forum Physique
    Réponses: 2
    Dernier message: 14/01/2009, 00h36
  4. Trouver les coordonnées d'un repère en fonction d'un autre repère
    Par crossrobotik dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 19/11/2008, 09h57
  5. Changer de repère | passer d'un repère 3D à un 2D
    Par invite83742b11 dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 24/01/2008, 11h55