Bonjour,
Contexte :
Je suis actuellement entrain de travailler sur un programme utilisant OpenGL. Avec les nouvelles spécificités OpenGL beaucoup de fonctions sont devenues dépréciées notamment toutes les fonctions concernant la manipulation des matrices Modelview et Projection.
Pour me faciliter la gestion mathématique de mon programme et notamment tout ce qui touche aux matrices j'utilise la bibliothèque mathématique : OpenGL Mathematics (ou GLM, site : http://glm.g-truc.net/). Néanmoins cette bibliothèque ne propose pas la gestion des piles de matrices à la similitude des fonctions OpenGL glPushMatrix et glPopMatrix, fonctions dépréciées. J'ai donc par conséquent voulu reproduire ce type de fonction pour cela j'ai utilisé une classe du type :
Mon problème est que je voudrais utiliser de façon transparente un objet de ma classe pile_matrix comme étant un objet mat4. En gros avoir un cast automatique de ma classe pile_matrix en mat4 mais ce que je n'arrive pas à obtenir. Par exemple le code suivant ne fonctionne pas :
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
22
23
24
25 class pile_matrix { public: //constructeur/destructeur pile_matrix(const glm::mat4& m); pile_matrix(); ~pile_matrix(); /* .... méthodes sur ma pile .... */ operator glm::mat4&() //cast qui ne va pas ou fait pas ce que je voudrai { return pile.back(); } private: std::vector<mat4> pile; }
Est-il nécessaire que je redéfinisse la globalité des opérateurs entre mat4 et pile_matrix ? ou une autre solution existe notamment au niveau du cast ? je fais une erreur quelque part ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4pile_matrix modelview, projection; glm::mat4 matriceA, matriceB; buffer = matriceA + modelview * projection * matriceB; //erreur lors de la compilation sur les operateurs
(Je me suis permis de poster sur le forum c++ et non OpenGL étant donné que c'est plus un problème de langage que OpenGL, néanmoins si je me trompe de forum je déplacerai mon post)
Partager