Boutique Cinema 4D
Affichage des résultats 1 à 6 sur 6

Discussion: Comment contrôler l'ordre d'évaluation entre tag Python et animation de caméra

  1. #1
    Gourou Avatar de bru
    Date d'inscription
    août 2009
    C4D version
    R21 Perpétuelle
    OS
    Windows 11
    Messages
    4 102

    Comment contrôler l'ordre d'évaluation entre tag Python et animation de caméra

    Bonjour !

    Je fais enfin mes premières expériences avec Python.

    J'essaye d'utiliser un tag python pour calculer la position dans l'image d'objets générés par un cloneur.

    J'ai créé le tag sur le cloneur en question. Dans le code, j'ai utilisé la fonction de conversion "basedraw.WS()" qui permet de passer de l'espace mode aux coordonnées d'écran.

    Cela fonctionne relativement bien jusqu'au moment ou j'essaye d'animer ma caméra.

    En fait, je constate que le tag est évalué avant le calcul de l'animation de la caméra. Il y a donc systématiquement un décalage d'une trame dans le résultat.

    Je sais qu'un tag est évalué au moment ou l'objet qui le supporte est évalué. Mais je ne trouve nulle part d'information précise par rapport à l'ordre dans lequel l'évaluation des différents objets est faite. Je suppose que cela s'établit en fonction des dépendances entre les objets.

    Il y a bien les "priorités" associées au tag, mais j'avais l'impression que cela ne concerne que les tags associés au même objet. Il y a aussi la coche "dépendance de la caméra" mais elle n'a pas l'air d'avoir un effet.

    Donc ma question: comment faire en sorte que l'animation de caméra se fasse avant l'évaluation de mon objet?

    Merci pour votre aide !
    Dernière modification par bru ; 17/12/2021 à 16h24.


  2. #2
    Gourou Avatar de bru
    Date d'inscription
    août 2009
    C4D version
    R21 Perpétuelle
    OS
    Windows 11
    Messages
    4 102
    Le mystère s'épaissit...

    Si je mets un tag Python sur la caméra, avec un "print" dedans, je constaste que le script sur la caméra est bien exécuté avant le script sur le cloneur, ce qui paraît correct vu que les générateurs doivent être évalués en dernier.

    Si je récupère l'objet caméra dans le script attaché au cloneur et reprends sa position, celle-ci est la même que celle observée dans le script attaché à la caméra, et correspond bien à ce qui est présenté dans l'interface.

    Par contre, on dirait que la fonction "WS" retourne des résultats qui correspondent à la position précédente de la caméra.

    Je continue à creuser !
    Dernière modification par bru ; 10/12/2021 à 11h19.


  3. #3
    Gourou Avatar de bru
    Date d'inscription
    août 2009
    C4D version
    R21 Perpétuelle
    OS
    Windows 11
    Messages
    4 102
    Un indice supplémentaire:

    Lorsque je récupère la matrice de projection de la vue, avec la fonction "GetViewMatrix(0)", je constate que la matrice suit effectivement l'animation de la caméra avec une trame de retard. Bref, la matrice de projection reste la matrice de la trame précédente (ou précédemment affichée).

    Comme si cette matrice était mise à jour après toutes les autres opérations.

    EDIT: Si on prend la fonction "GetMg()", qui rend la matrice de transformation de la caméra sans la projection conique, et dans laquelle la position de la caméra se retrouve dans le membre "off", on voit très clairement que les coordonnées de caméra utilisées sont bien celles de la trame précédente.

    En fait, c'est peut-être logique... L'erreur est peut-être dans le fait de vouloir utiliser un tag Python. Mais y a t'il moyen d'exécuter du code au bon moment via un script ou un plugin ?
    Dernière modification par bru ; 10/12/2021 à 12h11.


  4. #4
    Pilier Avatar de iolofato
    Date d'inscription
    juillet 2003
    C4D version
    R24 Souscription
    OS
    10.14.6
    Messages
    1 157
    Billets dans le blog
    1
    Afin que tu ne sois plus tout seul à soliloquer, je me mets là dans un coin, sans pour autant pouvoir t'apporter la moindre aide. Pour moi Python c'est soit une arme qu'utilise l'inspecteur Harry Callahan, soit un serpent qui menace l'inspecteur, soit le truc qui permet d'accrocher le diplôme d'inspecteur de l'inspecteur dans son bureau d'inspecteur.

    Au fait j'essaie quand même de comprendre ce que tu veux, c'est obtenir la position d'une instance dans l'image 2D, pourquoi pas dans l'espace 3D ? en raison du déplacement de la cam ? mais avec une opération tu pourrais soustraire ou additionner la position de la cam à la position de l'instance dans l'espace XY monde non ?

    Enfin je suis une bille en code de toute façon…
    Dernière modification par iolofato ; 10/12/2021 à 13h11.

  5. #5
    Gourou Avatar de bru
    Date d'inscription
    août 2009
    C4D version
    R21 Perpétuelle
    OS
    Windows 11
    Messages
    4 102
    Non, ce n'est pas pour l'inspecteur Harry !

    Et ton passage me fait toujours le plus grand plaisir !

    A ce stade, je crois que j'ai trouvé une solution. En fait, au lieu d'utiliser le tag "Python", il faut plutôt utiliser le tag "interaction" qui est une autre forme de tag permettant la programmation en Python autour d'un objet.

    Dans celui-ci, on peut définir une fonction "Draw" qui s'exécute une fois toute la scène générée. J'y ai poussé mon code et tout a l'air de fonctionner correctement.

    N'hésitez pas à faire des commentaires !


  6. #6
    Gourou Avatar de bricoman
    Date d'inscription
    février 2005
    C4D version
    R13 Studio
    OS
    un crâne et des phalanges,...pour l'essentiel
    Messages
    2 503
    Citation Envoyé par bru Voir le message
    N'hésitez pas à faire des commentaires !
    Salut les zamis !

    Non, Yolo‘ Bru n’est pas tout seul : j’étais tapis dans l’ombre .

    J’aime en effet les énigmes rédigée en langue étrange , et ce coin du forum dédié à la programmation vaut pour moi un voyage spacial à la rencontre de nouvelles formes de vies .

    Hello programmeur : moi ami , ..pas “tager Python” !

    Ceci dit , bru : ça fait vachement plaisir de te revoir ! J’espère que ces temps perturbés t’on laissé à flot et en pleine santé ?! .

    J’allais justement signaler à notre binamé Yolofrio que ton problème étais plus de l’ordre de la synchronisation que de la situation .
    C'est çui qui dit qui l'est ! ...non, peut-être ?! Le Bric©neum est ouvert : à vos risques et périls !

Discussions similaires

  1. Contrôler une animation avec un seul slider
    Par OrlaV dans le forum Xpresso
    Réponses: 20
    Dernier message: 18/04/2013, 13h38
  2. [Résolu] Comment definir un objet en python ?
    Par paspas dans le forum Programmation
    Réponses: 2
    Dernier message: 13/11/2012, 11h55
  3. [Question] Xpresso comment contrôler un relief d'un matériaux
    Par ateo9480 dans le forum Xpresso
    Réponses: 5
    Dernier message: 04/05/2012, 13h19
  4. Réponses: 5
    Dernier message: 02/05/2011, 21h19
  5. Réponses: 8
    Dernier message: 12/06/2008, 15h40

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet