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

Moteurs 3D Discussion :

[Design] Gestion des managers et réduction des dépendances


Sujet :

Moteurs 3D

  1. #1
    Invité
    Invité(e)
    Par défaut [Design] Gestion des managers et réduction des dépendances
    Bonjour,

    J'ai commencé il y a peu à coder un moteur 3D, et j'ai quelques problèmes au niveau de mes loaders.

    Je me suis en grande partie inspiré de l'exemple de début de moteur 3D de Laurent Gomila, a savoir Yes::Engine. Seules différences, je n'utilise que directX, et j'ai essayer de supprimer au maximum les singletons.

    je me retrouve donc avec ceci pour les loaders :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template <class T>
    class ILoader
    {
    public:
    	virtual T* LoadFromFile(const std::string &filename);
    	virtual void SaveToFile(const std::string &filename, const T* obj);
    }; // class ILoader
    que je dérive ensuite pour charger les différentes parties.

    Voici maintenant ma classe de modeles :
    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
     
    class Model : public IResource
    {
       Model(const TVertex*     Vertices, 
    	   unsigned long        VerticesCount, 
    	   const TIndex*       Indices, 
    	   unsigned long        IndicesCount, 
    	   const std::string& Texture,
    	   Renderer*	         render);
     
       void Render(Renderer* render) const;
     
    private :
        CDeclarationPtr   m_Declaration;
        Buffer<TVertex>  m_VertexBuffer;
        Buffer<TIndex>   m_IndexBuffer;
       Texture              m_Texture;
    }; // class Model
    Si on oublie le fait que la fonction render() n'a rien a faire là, tout va bien.

    Seulement, j'ai besoin du renderer pendant la création du mesh, pour creer les vertexBuffers, indexBuffers, et le format de vertex. Pas génant pour le moment, mais ca se gate au moment d'écrire le loader pour un mesh, je ne peux pas, a cause de la classe de loaders passer le renderer en parametre à LoadFromFile(), mais pourtant il faudrait.

    Je me pose donc 2 questions :
    • D'où viens le problème ?
    • Est-ce que je devrait eviter de faire les appels au renderer dans la creation du modele ?


    J'ai le même genre de problemes au niveau des gestionnaires de ressources et du gestionnaire de Loaders, quoique pour les loaders, cela pose moins de problemes (je peux virer betement et simplement le singleton sans me poser de questions, et le gerer moi même derriere, ou bien mettre tout ca en fonctions statiques, cela reste a peu pres correct).

    Merci d'avance pour vos eclaircissements.

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    le problème, c'est que tu fusionne deux conceptes completement different : le chargement des informations sur le disque et leur envoie à la carte graphique. en plus, un problème de ton systeme, c'est que si tu veut créer 15 instances de ton modele, il va falloire les charger 15 fois depuis le disque dur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci tout d'abord pour cette réponse.

    Tout d'abord, je ne l'ai pas signalé ici, mais je n'ai pas de probleme avec la gestion de cache, elle est faite, au travers d'un cache pour les ressources
    (qui lui aussi est encore un singleton, mais je travaille dessus).

    D'après ce que tu me dit, il faut que je sépare la phase qui cree un mesh de la phase qui enregistre les VertexBuffer/IndexBuffers dans le device DirectX.

    Dans le loader, je ne touche pas au renderer du tout, mais je doit renvoyer un modele, cela donne donc (en pseudo-code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Model LoadFromFile(string filename)
    {
       ouvrirlefichier()
       creation d'un tableau de vertices et d'un tableau d'index()
     
       return( Model( tableau de vertices, tableau d'indices ) );
    }
    Voila. Je crois que mon premier post n'etait pas tres clair, je vais essayer de refaire ceci plus proprement.

    Je ne vois quand même vraiment pas comment je peux séparer la creation du modele de la mise dans le device.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon, à force de réfléchir, je suis arrivé à 2 solutions plus ou moins acceptable à mes yeux, bien que la première me semble plus de la triche qu'autre chose :
    • charger les données dans un buffer temporaire et ajouter un booléen pour savoir si les données ont été chargées dasn le device ou non. Ensuite, au moment d'afficher, si c'est chargé, on affiche sans se poser de question, et sinon, on charge. Problème, c'est une solution qui me parait sale, et j'ai peur que cela ne soit que temporaire (et que cela cause d'autres problemes dans d'autres cas)
    • 2eme solution, implementer un systeme de messages complet. On envoie donc une demande de creation d'un buffer au device, qui nous le renvoie par la suite. Seul problème, je ne sais pas vraiment comment faire (mais ça devrait pouvoir s'arranger)


    Si vous avez d'autres suggestions, conseils, ou renvois d'expériences, je suis preneur.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2014, 16h19
  2. Réponses: 1
    Dernier message: 28/06/2012, 17h04
  3. Réponses: 1
    Dernier message: 27/04/2012, 17h41
  4. [2.3][Designer] Gestion des sessions en BIRT
    Par hawaa dans le forum BIRT
    Réponses: 1
    Dernier message: 09/07/2009, 14h05
  5. Gestion des managed beans (scope, ajax etc.)
    Par Malone dans le forum JSF
    Réponses: 4
    Dernier message: 26/06/2009, 17h30

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