Je suis en train de trouver mes voies dans le C de la terre et je suis de plus en plus confus maintenant. L'application jouet est un moteur OpenGL très basique. Alors, voici le (je suppose simplement) problème: Je voudrais gérer des mailles de différentes données de sommet, donc je l'aurais par exemple Maintenant, j'ai besoin d'une classe Mesh qui contient les données et les dessine. J'ai essayé quelque chose comme ceci:modèles vs commutateur
template<class T>
class Mesh
{
public:
Mesh();
~Mesh();
void load(const T * vertices, int num);
void draw();
protected:
T * vertices_;
};
Les différents sommets doivent être chargés et dessinés différemment, ce qui peut être fait avec une spécialisation de gabarit. Mon problème est que j'aime avoir une autre classe qui contient des instances d'objets Mesh, mais les membres de classe modélisés ne sont évidemment pas autorisés. L'autre solution que je peux penser est de maintenir des pointeurs sur la structure de base Vertex dans Mesh, passer un identifiant pour le type Vertex utilisé et ensuite utiliser les instructions switch dans load() et draw() pour autoriser les différentes implémentations .
Quelle est la meilleure façon d'y parvenir?
Toute aide est grandement appréciée.
Le modèle sur Mesh peut-il également être supprimé étant donné l'héritage des classes Vertex? – drfrogsplat
@drfrogsplat: Uniquement si vous voulez stocker des pointeurs sur des sommets individuels, ce qui n'est probablement pas souhaitable pour des raisons de performances. Je n'utiliserais pas l'héritage du tout pour une classe de vertex: implémentez simplement chaque type de vertex en tant que classe indépendante ou en utilisant un template (c'est par exemple ce que fait OpenSceneGraph). –
Essayez de préférer 'boost :: ptr_vector' à' std :: vector 'si vous avez accès à boost (cela fait partie de Boost.PointerContainer). En C++ 0x, vous pouvez utiliser 'std :: vector ' pour éviter la dépendance au boost. –