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

OpenGL Discussion :

Trajectoire selon un cercle


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut Trajectoire selon un cercle
    Bonjour,

    Je souhaiterais faire avancer un Tore selon un cercle.
    Le faire translater et donc aussi le mettre dans la bonne direction.

    Pour le moment j'en suis à le faire tourner avancer selon le cercle.

    glTranslatef => Tore Positionné sur le cercle et fait le tour
    glPush
    glRotate => en Z pour qu'il tourne
    glPop

    il faut donc que j'arrive à le mettre tangent au cercle

    Avez-vous une idée ?

    Merci

  2. #2
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut
    Salut,

    Dans l'ordre où tu appliques tes transformations, t'es sur que ça fait ce dont tu décrit ? A première vue, l'objet tourne sur lui même et il est ensuite translaté, si j'ai bien compris.

    Si non pour faire ce que tu demandes. Je procéderai ainsi :
    je dessinerai le tore dans le plan XZ centré sur Y( ou YZ centré sur X), j’effectuerai une translation sur l'axe Y (ou X) de mon tore qui est alors tangent au cercle et enfin je ferais une rotation de mon tore autour de l'axe Z.
    ex : Dans le cas ou le tore est dans le plan XZ centré sur Y.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void Draw()
    {
       static float angle = 0;
       glPushMatrix();
         glRotatef(angles,0.0,0.0,1.0);
         glTranslatef(0.0, r,0.0);
         DessinToreCentreSurY();
       glPopMatrix();
       angle += step;
    }
    r : rayon du cercle sur lequel tu veux faire tourner ton tore.

    Si j'ai tout bien compris dans ce que tu voulais faire, ce qui n'est pas certain

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut
    Merci de ton aide.

    Je confirme,
    je fais bel et bien ce que j'ai marqué.
    Voici d'ailleurs l'exactitude de ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    glTranslatef(posx+rayon*cos(iangle),0,posy+rayon*sin(iangle)); // Tore sur le cercle
    //tore
    glPushMatrix();
    		glRotatef(thetardeg,0,0,1); // rotation d'axe z
    		glColor3f(1.0,1.0,0.0);
    		glutSolidTorus(rt,RT,10,10); // rt : petit rayon RT grand rayon + Resolution
    glPopMatrix();

    - posx=posy=0 (centré selon les axes d'Opengl)
    - iangle++ à chaque idle
    - rayon (du cercle) = 5

    Et voilà ce que j'obtiens actuellement:



    Je vais regarder de mon côté ce que tu as proposé.

    Edit : J'ai testé : ton code me permet de tourner mais ce n'est pas tangent au cercle, ca tourne beaucoup trop vite par rapport à la position =/

  4. #4
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut
    Très bien, c'est bien ce à quoi je pensais.

    La rotation de ton tore via un glTranslatef comme tu le proposes avec l’équation du cercle sur x et z, c'est je pense se compliquer la tache, d'autant plus que Opengl met à disposition des outils tout beau tout près à notre disposition tels que glRotatef comme tu as déjà pu l'utiliser.

    Je pense que tu prends le problème à l'envers. Dans ton cas si j'ai bien compris, tu fais d'abords tourner ton tore autour du cercle et ensuite tu veux essayer de l'orienté correctement sur la tangente. Ce qui complique grandement la chose sachant que la tangente va changer à chaque position sur le cercle.

    Dans l'exemple que je t'ai proposé, en fait ce que je fais c'est de translater directement le tore sur la tangente, et une fois que je sais que la translation est placé sur la tangente, j'applique, à ma translation et donc à mon tore, la rotation via glRotatef. De cette façon aucun calcul supplémentaire n'est nécessaire pour calculer la tangente vu que je fais une rotation du même cercle de la tangente donc ça reste une tangente.

    Je ne sais pas si j'ai été plus claire ou pas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut
    Merci bien. Tout roule

    C'est effectivement plus simple de faire comme tu l'as proposé.
    Et oui je voulais en gros calculer la tangente à chaque fois, mais pas besoin.

    J'avais presque compris le fait de faire tourner "selon la tangente sur place".
    Mon erreur était due à ma volonté de Translater ensuite, selon X et Z (vu que je suis dans ce plan).
    Et une fois ton message ça c'est tout réglé.

    Autre question : J'ai lu il y a quelques temps qu'en Opengl on utilise le Modèle TRS : Translate, Rotate, Scale, avant de dessiner un objet.
    Je suis quasiment sûr que d'avoir lu ça m'a induit en erreur.

    En as-tu déjà entendu parlé ?

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 035
    Billets dans le blog
    12
    Par défaut
    C'est pas seulement en OpenGL mais en 3D tout simplement qu'on utilise ce modèle. Généralement on l'applique sur des matrices de transformation.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #7
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut
    Honnêtement non, jamais entendu parlé.

    Mais, comme je n'ai pas la science infuse malheureusement, ça ne veut pas dire que c'est faux.

    glTranslate, Rotate, Scale sont juste des applications de transformation. Tu peux les appliquer dans n'importe quel sens du moment que tu obtiens ce que tu veux.

    Après, pour l'orientation dans l'espace d'un objet via la matrice de transformation M quelconque, je dirais que si tu cherches à décomposer ta matrice, c'est vrai que généralement on effectue en premier le redimensionnement (scale), puis l'orientation dans l'espace (rotate) et enfin on positionne l'objet (translate) ce qui correspond à ton model TRS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    M = TRS.
     
          s1*a  s2*d  s3*g  x       1 0 0 x       a d g 0    s1 0  0  0
    M =   s1*b  s2*e  s3*h  y   =   0 1 0 y    *  b e h 0  * 0  s2 0  0
          s1*c  s2*f  s3*i  z       0 0 1 z       c f i 0    0  0  s3 0
          0     0    0      1       0 0 0 1       0 0 0 1    0  0  0  1
    C'est l'ordre de décomposition le plus trivial.

    Mais bon généralement on ne s’embête pas à décomposer sa matrice de transformation sous opengl. On l'utilise directement avec glMultMatrix. Surtout qu'avec opengl il faut encore décomposer la matrice R en matrices de rotation selon les axes X,Y et Z (détermination des angles d'Euler).

    Enfin bref. Pour plus d'info, il y a la très bonne faq Mathématique, ici même sur le site développez, ça sera surement plus claire et précis que mes explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/03/2014, 17h36
  2. déplacement selon une trajectoire sinusoïdale ?
    Par WhiteTigerZ dans le forum Flash
    Réponses: 1
    Dernier message: 14/10/2007, 14h42
  3. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55
  4. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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