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

Delphi Discussion :

[GLScene] Déplacement d'un objet dans une certaine direction


Sujet :

Delphi

  1. #1
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut [GLScene] Déplacement d'un objet dans une certaine direction
    Bonjour à tous !

    Tout est dans le titre : je voudrais trouver une méthode ou une procedure qui me permette de déplacer un objet dans n'importe quelle direction (sans orienter l'objet lui-même). Par exemple, je voudrais le faire reculer, sans qu'il ne tourne ... J'ai trouver pleins de moyens, mais ils font tous tourné l'objet ...


    Voilà ... ma question peut paraître bête mais ça fait un certain temps que je crois avoir trouvé, et que à chaque fois, ça ne marche pas ... et ça commence à m'énerver quelque peu ...

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut heuu...
    Citation Envoyé par Matt2094
    Bonjour à tous !

    Tout est dans le titre : je voudrais trouver une méthode ou une procedure qui me permette de déplacer un objet dans n'importe quelle direction (sans orienter l'objet lui-même). Par exemple, je voudrais le faire reculer, sans qu'il ne tourne ... J'ai trouver pleins de moyens, mais ils font tous tourné l'objet ...


    Voilà ... ma question peut paraître bête mais ça fait un certain temps que je crois avoir trouvé, et que à chaque fois, ça ne marche pas ... et ça commence à m'énerver quelque peu ...

    Merci d'avance.
    le retour de glscene....

    Je dirais en quelques mots: hein??? koi koi koi... c'est dingue ca... figures toi que je dev des petits jeux avce glscene et je n'ai jamais vu un truc pareil...

    tu peux me faire un petit zip avec une demo du probleme (bien expliqué) que je jette un coup d'oeil...

    ou encore me mettre un bout de code.

    Je ne comprend pas ton probleme (ou du moins si mais pas les symptomes...)
    C'est dingue ca...

    Quand tu depalces un objet il ne tourne pas, quef si tu lui fais faire une rotation.

    Tu utilises quoi pour le déplacer?

    Un systeme de nodes? (pathcontrol)? ou autre chose?

    Est-ce que cet objet est l'enfant d'un autre qui tourne?

    Dites m'en plus mon cher...

  3. #3
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    J'utilise la méthode Move pour déplacer mon objet, après l'avoir orienter avec les propriétés de Direction ...

    Je l'oriente comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GlFreeForm1.Direction.X := MaValeur;
    GlFreeForm1.Direction.Y := MaValeur;
    GlFreeForm1.Direction.Z := MaValeur;
    Et après, je le bouge comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GlFreeForm1.Move(MaDistance);
    Mais le problème, c'est que mon objet tourne lorsque je change sa direction ...

    Edit : Ce qui m'empêche de déplacer l'objet latéralement par exemple ...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut
    juste pour savoir quelle est l'objet cible de ta camera?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut
    Bon essayons d'etre clair, c'est pas facile avec la 3D... C'est pas instinctif.
    La dircetion représente un vecteur. Qui indique ou l'objet pointe.
    Ce vecteur à pour origine l'origine de ton objet (si tu mets la propriété showaxes a true, c'est l'intersection des trois ligne).

    Et Glscene utilise un systeme de vecteur normalisé à 1.

    Bon tu ne peux pas changer la direction d'un objet sans faire tourner ton objet...

    Arrrg c'est dur a expliquer

    prend une feuille de papier.
    C'est ton objet.

    Dessine une fleche dessus.

    C'est la direction (un vecteur somme toute).
    essaye de changer la direction de ce vecteur sans changer la position de ta feuille...

    Tu ne peux pas... Ben oui la fleche est dessinée dessus... La direction est la direction de l'objet lui meme

    Bon admettons maintenant que tu veuilles faire une translation de 3 unités en Z

    plutot que de changer sa direction, et faire un move... il faut que tu lui dises Mon_objet.Translate(0, 0, 3);


    le translate prend la forme translate (x,y,z).

    Tu peux par exemple aussi lui donner sa nouvelle position.

    mon_objet.position.x:=ce que tu veux;
    mon_objet.position.y:=ce que tu veux;
    mon_objet.position.z:=ce que tu veux;

    tu peux changer son angle aussi, son orientation... pfff enfin tout.

    Je te demandais aussi quelle est la cible de la camera, car ca donne des effets trompeurs.

    Si tu essayes de bouger ton objet dans l'espace et que la camera prend cet objet pour cible, elle va tourner pour garder l'objet comme cible justement... Et donc ton objet aura bougé Mais tu auras l'impression qu'il aura tourné.

    C'est pour cela qu'en général tu fais pointer la caméra sur un Dummy cube au milieux de ta scene et que celui ci ne bouge jamais.

    Comme ca tu creer une sorte de referentiel.

    C'est compliqué tout ca.

    Je te donne un lien avec tuto...

    http://glscene.sourceforge.net/wikka/UserTutorials

    les 4 tutos de base pour ces histoires de referentiels en 3D...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut
    Bon je dis peut etre une connerie mais je n'ai pas le temps de tester là, je suis sur des problemes de C++ pour le travail (et oui je suis obligé de m'y mettre) et j'ai l'impresion de me retrouver débutant... En bref je n'arrive pas à compiler un programme que j'aurais finit en 20 mn sous delphi... Grrrrr ... Et les outils crosoft sont d'horribles usines à gaz...grrrr bis..

    Bref...

    Une solution astucieuse (mais a tester car non validée) pour deplacer ton freeform en direction+distance sans rotation (et sans utiliser les maths ou plutot en laissant le soin a glscene de le faire) passerait (tu testeras) par...

    Tadadadada... Un dummyCube (comme toujours le dummy cube solutionnerait tous les problemes)

    Tu creer un dummycube comme child de ton freeform (achtung pas l'inverse!)

    tu lui donnes une nouvelle direction...
    Tu lui fais le move de x unités

    comme tu faisais avec le freeform...

    Et ensuite tu fais freeform.position:=dummycube.position;
    Dit mois si ca marche?

    j'aurais pas le temps de tester avant une bonne semaine.

    Et ces tutoriaux ca t'as un peu éclairé?

  7. #7
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    J'ai trouvé encore plus simple (selon moi), qui est très proche de la tienne, darkvadr : je met le freeform en child d'un dummycube, j'oriente le dummycube comme je veux (il faut effectuer le mouvement inverse avec le freeform), et je déplace le dummycube ... Ca fait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      GlDummyCube1.TurnAngle := GlDummyCube1.TurnAngle + 1;
      GlFreeform1.TurnAngle := GlFreeform1.TurnAngle - 1;
    Et quand je déplace l'objet, je déplace le dummy cube, et non le freeform.


    Mais pour le direction de la caméra, soyez sans crainte, il était dirigé vers le DummyCube. En plus, j'ai d'autres objets dans la scène qui me sèrvent de référenciel ...

    Et pour les tutos, j'ai mis à peu près un quart-d'heure à trouver quelque chose pouvant traduire ces pages, et j'avoue que ça l'air vraiment intéressant ... je regarderais ça ce soir ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Matt2094
    J'ai trouvé encore plus simple (selon moi), qui est très proche de la tienne, darkvadr : je met le freeform en child d'un dummycube, j'oriente le dummycube comme je veux (il faut effectuer le mouvement inverse avec le freeform), et je déplace le dummycube ... Ca fait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      GlDummyCube1.TurnAngle := GlDummyCube1.TurnAngle + 1;
      GlFreeform1.TurnAngle := GlFreeform1.TurnAngle - 1;
    Et quand je déplace l'objet, je déplace le dummy cube, et non le freeform.


    Mais pour le direction de la caméra, soyez sans crainte, il était dirigé vers le DummyCube. En plus, j'ai d'autres objets dans la scène qui me sèrvent de référenciel ...

    Et pour les tutos, j'ai mis à peu près un quart-d'heure à trouver quelque chose pouvant traduire ces pages, et j'avoue que ça l'air vraiment intéressant ... je regarderais ça ce soir ...
    Oui c'est une autre solution...
    Je la trouve plus compliquée, mais tant que ca marche, c'est nikel.
    En 3D il te faut surtout une approche qui te convienne à toi.

    Donc... parfait

    Hooo des soucis d'anglais?

    LE jour ou j'ai le temps je ferais une traduction.
    Au bug d'ortograf prré (je suis mové en ortograf LoooL).

    Ha...Fais gaffe quand meme avec les pitch / turn et roll angle... Tant que tu n'en bouge qu'un tout va bien... sinon, lorsque tu combines les rotations ... payes tes calculs... Pas trivial...

    Le dernier tuto traite de se probleme... Et le solutionne avec des dummycubes.

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

Discussions similaires

  1. lancer de rayon et déplacements d'objets dans une scene
    Par oclama dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 17/02/2010, 16h16
  2. lancer de rayon et déplacements d'objets dans une scene
    Par oclama dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 17/02/2010, 09h16
  3. Réponses: 10
    Dernier message: 07/01/2010, 13h53
  4. Déplacement d'un objet dans une stringgrid
    Par QAYS dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/10/2007, 11h56
  5. Savoir si un objet d'une certaine classe est dans une liste
    Par Denti-fritz dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2007, 09h05

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