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

PhysX et APEX Discussion :

Translation d'un mesh


Sujet :

PhysX et APEX

  1. #1
    Membre averti Avatar de Jonyjack
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 149
    Points : 425
    Points
    425
    Par défaut Translation d'un mesh
    Bonjour à tous,

    alors voilà j'ai décidé d'utiliser PhysX pour un de mes projets. Je m'occupe actuellement de l'IA et après avoir implémenté mon algorithme de recherche définissant les points du chemin à suivre, j'aimerai pouvoir faire en sorte que mon mesh suive ce chemin.
    Logiquement, il suffirait simplement de faire translater le mesh vers chaque point de contrôle et c'est justement là que je coince. Je ne trouve pas de fonctions dans PhysX qui pourrait me faire cela...

    Par exemple avec un prototype du genre :

    void Translation(NxVec3 to, NxVec3 velocity);
    (avec un paramètre "from" ou pas, peu importe).

    Je ne peux qu'ajouter de la velocité, ce que je trouve assez limité (et en plus ça me fait dévier mon actor).

    Voila voila merci d'avance pour toute aide

  2. #2
    Membre actif 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 : 38
    Localisation : France

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

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


    Tout dépend du type de l'objet que tu souhaites déplacer.

    Pour un Acteur dynamique regarde du coté de la classe NxActor avec les fonctions :

    Pour un NxActor dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    virtual void  setGlobalPose (const NxMat34 &mat)=0 
    virtual void  setGlobalPosition (const NxVec3 &vec)=0
    virtual void  setGlobalOrientation (const NxMat33 &mat)=0  
    virtual void  setGlobalOrientationQuat (const NxQuat &mat)=0
    Pour un NxActor cinématique (Kinematic) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    virtual void  moveGlobalPose (const NxMat34 &mat)=0 
    virtual void  moveGlobalPosition (const NxVec3 &vec)=0
    virtual void  moveGlobalOrientation (const NxMat33 &mat)=0  
    virtual void  moveGlobalOrientationQuat (const NxQuat &mat)=0
    Après pour des objets avec une gestion plus poussée c'est la classe NxController et la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual void  move (const NxVec3 &disp, NxU32 activeGroups, NxF32 minDist, NxU32 &collisionFlags, NxF32 sharpness=1.0f, const NxGroupsMask *groupsMask=NULL)=0

    Dans ton cas pour une simple translation (sans orientation) de l'objet regarde du coté de setGlobalPosition/moveGlobalPosition.

    Petite remarque : il faut bien faire attention à utiliser la bonne méthode set/move en fonction de la nature de ton objet pour éviter des comportements bizarres.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

  3. #3
    Membre averti Avatar de Jonyjack
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 149
    Points : 425
    Points
    425
    Par défaut
    Merci pour cette réponse mais j'avais déjà essayé ces fonctions.
    Ça ne fait qu'une téléportation dans les deux cas.
    J'aimerai lui donner une destination, et PhysX gère la translation.
    Pour l'instant je lui applique une linearvelocity mais je trouve pas ça beau :/
    Si il n'existe pas d'autres solutions, c'est pas grave. Et je veux pas non plus mettre un controller pour chaque ennemie ^^

  4. #4
    Membre actif 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 : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    Effectivement ça fait une téléportation.

    Après c'est à toi de lisser ton déplacement en rajoutant des points intermédiaires pour justement simuler un déplacement du point A au point B. Il faut calculer les points intermédiaires C entre ces deux points à chaque frame/affichage de ton application pour une vitesse de déplacement donnée.
    Rien de bien compliqué.

    Petit exemple :
    on suppose que ton personnage marche ou cours à une vitesse v et tu veux le faire déplacer au point B sans téléportation mais bien avec un déplacement progressif, une petite fonction en code pour faire ca :

    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
     
    void moveCharacter(NxActor *myActor, NxVec3 B, float v, float deltaTime)
    {
        NxVec3 A = myActor->getGlobalPosition();
        NxVec3 dir = B-A
     
        if(dir.magnitude() >= v*deltaTime)  //attention a ne pas depasser le point B
        {
             myActor->setGlobalPosition(B);
             //myActor->moveGlobalPosition(B);
     
        }
        else //calcul du point intermédiaire C
        {
             dir.normalise();
             NxVec3 C = A + dir*(v*deltaTime)
             myActor->setGlobalPosition(C);
             //myActor->moveGlobalPosition(C);
        }
     
    }
    avec deltaTime : le temps entre deux frames (1/fps) de ton application.
    Après si tu sais que ton personnage/objet va passer par plusieurs points tu peux lisser la trajectoire à l'aide de spline ou autre pour faire plus joli par exemple.
    J'utilise ce procédé pour déplacer mes plateformes cinématiques et ça rend très bien.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

  5. #5
    Membre averti Avatar de Jonyjack
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 149
    Points : 425
    Points
    425
    Par défaut
    ... Pourquoi j'y ai pas pense
    J'essayerai ce soir, voir ce que ca donne

    Merci beaucoup en tout cas, et hop un bisous


  6. #6
    Membre averti Avatar de Jonyjack
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 149
    Points : 425
    Points
    425
    Par défaut
    Eh bien après beaucoup de changements, j'ai réussi à mettre ton idée en pratique

    Merci beaucoup je passe en résolu

  7. #7
    Membre actif 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 : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    Heureux d'avoir pu aider.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

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

Discussions similaires

  1. Meshes clignotantes ! (2)
    Par Francky033 dans le forum DirectX
    Réponses: 11
    Dernier message: 17/08/2003, 01h38
  2. Un autre débutant ... désoler - Les mesh
    Par oxor3 dans le forum DirectX
    Réponses: 4
    Dernier message: 15/08/2003, 18h41
  3. Meshes clignotantes !
    Par Francky033 dans le forum DirectX
    Réponses: 3
    Dernier message: 30/07/2003, 15h19
  4. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34
  5. Mesh & Light
    Par MAx44 dans le forum DirectX
    Réponses: 4
    Dernier message: 27/04/2003, 11h11

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