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

Architecture Discussion :

Meilleure architecture pour application3D/kinect


Sujet :

Architecture

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Meilleure architecture pour application3D/kinect
    Bonjour,

    Je développe une application 3D (XNA) qui utilise le système Kinect. J'ai quelques hésitations dans l'architecture à utiliser. Au début, je voulais me tourner vers l'architecture MVC. Mais la partie présentation de mon application ne présente aucune interaction avec l'utilisateur. L'utilisateur se contente de regarder l'animation 3D et interagit avec la kinect. Quelle serait l'utilité dans ce cas de la partie contrôleur ?

    Merci beaucoup pour vos explications

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 89
    Points : 170
    Points
    170
    Par défaut
    Bonjour,

    Je ne connais pas les frameworks et autres utilisés par kinect, donc s'il y a des spécificités à ce système, je vais peut-être répondre à coté.

    Dans MVC, toute interaction de l'utilisateur impliquant un changement dans le modèle doit passer par le contrôleur, même si l'interaction ne provient pas d'un élément de la vue (un clic sur un bouton par exemple).

    Dans votre cas, si je comprend bien, la vue de votre application ne va générer aucun évènement. Elle va donc exclusivement servir à l'affichage des données du modèle.
    Vous êtes donc exactement dans le cas d'utilisation prévu à l'origine par MVC : Le périphérique d'entrée (kinect en l'occurence) est complètement géré par le contrôleur.

    En supposant que l'application permette de faire tourner un objet de l'animation par une rotation de la main, voici un schéma, grossier, des traitements effectués :
    • Kinect détecte une interaction de l'utilisateur -> quart de tour de la main
    • L'interaction est envoyée au contrôleur
    • Le contrôleur traduit l'interaction 'quart de tour de la main' en action à réaliser sur le modèle -> tourner l'objet de 90°
    • Le contrôleur envoie l'action 'tourner l'objet de 90°' au modèle
    • Le modèle exécute l'action -> l'objet fait une rotation de 90°
    • Le modèle notifie la vue d'un changement.
    • La vue met à jour l'orientation de l'objet et s'affiche -> sur l'écran, l'objet a fait un quart de tour


    Le contrôleur a donc le rôle majeur d'interpréter les commandes envoyées par kinect comme des actions à effectuer dans l'application.

    D'un point de vue personnel, qui n'engage que moi donc, je dirais que votre application correspond bien au cas d'utilisation "prévu" par MVC.
    Les différentes opérations à effectuer peuvent être réparties de façon claire et équilibrée (en termes de responsabilités) sur les 3 parties (Modèle, Vue et Contrôleur).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse claire et précise. Cependant, j'aurais encore une question.

    Mon programme est formé d'une application XNA (la vue) et d'une dll qui comprend la contrôleur et le modèle. Le problème vient que l'application XNA possède une méthode Update() du framework XNA qui doit inclure toutes les mises à jours de la vue. Cette méthode est appelée en boucle. Je ne peux donc pas utiliser d’évènement pour que le modèle avertisse la vue qu'elle doit se mettre à jour. Mon seul moyen de procéder est que la vue se mette à jour continuellement sur le modèle. Est ce correct ?

    Je vous remercie.
    Bonne soirée

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 89
    Points : 170
    Points
    170
    Par défaut
    Bonjour,

    Je ne connais pas non plus le framework XNA, donc je suppose que la méthode Update() est une méthode que vous devez implémenter dans votre application?

    Si j'ai bien compris la solution que vous proposez, vous suggérez que la vue récupère les données du modèle à chaque affichage. Mais je ne saisis pas bien quand est-ce que le modèle est mis à jour?

    Personnellement, je vois 2 façons de faire (l'une d'entre elle est peut être celle que vous proposez?).

    Solution 1
    La première solution consiste à avoir 2 threads :
    • Un thread qui s'occupe du traitement des données (controleur->modèle->vue)
    • Un thread qui s'occupe de l'affichage (vue)

    La méthode Update() du framework XNA est donc dans un thread réservé à l'affichage. Les mises à jour sont dans un autre thread.
    Cette décomposition permet d'avoir une indépendance entre le nombre d'images par seconde et les mises à jour des données, ainsi qu'un gain potentiel en performances.
    Le GROS inconvénient est que les données internes à la vue sont partagées par plusieurs threads.


    Solution 2
    L'autre solution, plus simple à mettre en oeuvre, consiste à faire de la méthode Update() de XNA, la boucle principale de votre application.
    Votre méthode Update() va contenir deux appels :
    1. Demander au contrôleur de se mettre à jour
    2. Demander à la vue de s'afficher

    Au cours de la première étape, le contrôleur récupère les évènements de Kinect, ce qui va déclencher l'envoi d'une action au modèle.
    Le modèle se met alors à jour, ce qui va envoyer une notification à la vue.
    La vue se met donc à jour en récupèrant les données du modèle.

    Au cours de la deuxième étape, la vue affiche simplement les données qui ont été mises à jour au cours de la première étape.

    Avec cette solution, l'application possède un thread unique, ce qui est plus simple.
    Par contre, pour chaque image affichée, il faut mettre à jour tout le reste de l'application (récupération des données de kinect et mise à jour du modèle).
    On peut, cela dit, ne pas faire la mise à jour du contrôleur à chaque boucle, via l'utilisation d'un compteur ou d'un timer.


    Ces solutions supposent que la DLL soit capable d'envoyer des notifications.
    Si ce n'est pas le cas, il faut effectivement que l'application XNA aille interroger régulièrement la DLL à la recherche de mises à jour, et envoyer une notification à la vue.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Je vous remercie. Je vais donc opter pour la première solution car dans XNA il y a deux méthodes implémentées Update() et Draw() (appelées en boucle).

    Bonne journée

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

Discussions similaires

  1. Les meilleurs livres pour PHP ?
    Par Community Management dans le forum Livres
    Réponses: 187
    Dernier message: 24/05/2015, 03h30
  2. Quels sont les meilleurs livres pour UML ?
    Par Matthieu Brucher dans le forum Livres
    Réponses: 33
    Dernier message: 31/01/2014, 10h36
  3. Les meilleurs livres pour l'Assembleur
    Par gtr dans le forum Livres
    Réponses: 52
    Dernier message: 25/09/2010, 10h25
  4. Meilleure architecture pour un moteur 3D
    Par djo.mos dans le forum Moteurs 3D
    Réponses: 117
    Dernier message: 26/05/2006, 11h29
  5. [Architecture][Strategie]Meilleur technique pour le distribué
    Par dinver dans le forum Général Java
    Réponses: 9
    Dernier message: 08/12/2004, 15h58

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