![]() |
GLam Collection version 0.4 - | ACCUEIL - CLASSES - HIERARCHIE - MEMBRES - EXEMPLES |
Groupement d'objets. Plus de détails...
#include <glamgroup.h>
Fonctions membres publiques | |
GLamGroup () | |
~GLamGroup () | |
void | create () |
void | update () |
int | numObjects () const |
int | addObject (GLamObject *obj) |
void | addObjectTranslate (int index, double tx, double ty, double tz) |
void | addObjectRotate (int index, double rx, double ry, double rz) |
void | addObjectScale (int index, double sx, double sy, double sz) |
void | setColor (float r, float g, float b, bool shiny=false) |
void | setShiny (bool shiny=true) |
void | setSimpleColor (bool simpleColor=true) |
void | setMaterial (float mat[10]) |
void | setSelected (bool selected=true) |
Groupement d'objets.
La classe GLamGroup permet de regrouper plusieurs objets GLamObject dans une seule entité. Les objets du groupement sont ainsi assemblés et peuvent alors subir en une seule opération toute requête de transformation ou de rendu.
La capacité d'un groupement est limitée à 100 objets. Chaque objet est ajouté grâce à la méthode addObject() qui retourne un numéro d'ordre attribué à l'objet dans le groupe. L'ordre d'ajout des objets est sans importance.
Chaque objet, par l'intermédiaire de son numéro, peut ensuite se voir affecter des transformations (translation, rotation, facteur d'échelle) permettant de régir sa géométrie au sein du groupe. Le nombre de transformations par objet est limité à 5, et l'ordre de spécification de ces transformations est important : en effet, en OpenGL, une translation suivie d'une rotation ne donne pas forcément le même résultat que la même rotation suivie de la même translation...
Les modifications liées au rendu (setColor(), setMaterial(),.. ) affectent tous les objets du groupe.
L'ajout d'objet à un groupe est réalisé sous forme d'agrégation. Une instance GLamGroup peut se voir ajouter plusieurs fois le même objet avec des listes de transformations différentes ; mais par contre, les modifications de rendu sur l'objet affectent tous les exemplaires dans le groupe (puisqu'il s'agit du même objet en mémoire...).
Un groupement peut contenir d'autres groupements.
// attributs GLamPolygon* poly ; GLamProfile* prof ; GLamCorner* corn ; GLamGroup* side ; GLamGroup* grp ; // construction double pts[][2] = { {3,2}, {2,3}, {-2,3}, {-3,2}, {-3,-2}, {-2,-3}, {2,-3}, {3,-2} } ; poly = new GLamPolygon((double *)pts, 8 ) ; poly->setColor(1.0, 0.6, 0.4 ) ; double pts2[][2] = { {0,0},{0,1} } ; double vec1[][2] = { {0.5,0},{0.5,0} } ; prof = new GLamProfile((double *)pts2, (double *)vec1, 40, 4 ) ; prof->setColor(0.4, 0.6, 1.0, true ) ; corn = new GLamCorner( *prof ) ; corn->setBevel( 1 ) ; side = new GLamGroup ; side->addObject( prof ) ; side->addObject( corn ) ; grp = new GLamGroup ; int obj[6] ; obj[0] = grp->addObject( poly ) ; obj[1] = grp->addObject( poly ) ; grp->addObjectTranslate(obj[0], 0, 0, 1 ) ; grp->addObjectRotate(obj[1], 180, 0, 0 ) ; for (int i = 2 ; i <= 5 ; i++ ) obj[i] = grp->addObject( side ) ; grp->addObjectRotate(obj[2], 0, 90, 90 ) ; grp->addObjectRotate(obj[3], 0, -90, -90 ) ; grp->addObjectRotate(obj[4], -90, 0, 180 ) ; grp->addObjectRotate(obj[5], 90, 0, 0 ) ; for (int i = 2 ; i <= 5 ; i++ ) grp->addObjectTranslate(obj[i], 3, 0, -2 ) ; // projection sur la scène glPushMatrix() ; glTranslated(-3, -3, 1 ) ; grp->draw() ; glPopMatrix() ; | ![]() |
GLamGroup::GLamGroup | ( | ) |
Constructeur.
GLamGroup::~GLamGroup | ( | ) |
Destructeur.
int GLamGroup::addObject | ( | GLamObject * | obj | ) |
Ajout d'un objet dans le groupement.
La méthode retourne un identifiant unique associé à l'objet ajouté.
void GLamGroup::addObjectRotate | ( | int | index, | |
double | rx, | |||
double | ry, | |||
double | rz | |||
) |
Ajout d'une rotation pour l'objet spécifié par index.
void GLamGroup::addObjectScale | ( | int | index, | |
double | sx, | |||
double | sy, | |||
double | sz | |||
) |
Ajout d'un changement d'échelle pour l'objet spécifié par index.
void GLamGroup::addObjectTranslate | ( | int | index, | |
double | tx, | |||
double | ty, | |||
double | tz | |||
) |
Ajout d'une translation pour l'objet spécifié par index.
void GLamGroup::create | ( | ) | [virtual] |
Méthode de dessin utilisée par la classe de base pour générer la display list de l'objet. Les programmes clients ne doivent normalement pas invoquer directement cette méthode, mais préférer la méthode draw() qui exploite la primitive OpenGL glCallList()
.
Implémente GLamObject.
int GLamGroup::numObjects | ( | ) | const [inline] |
Retourne le nombre courant d'objets contenus dans le groupement.
void GLamGroup::setColor | ( | float | r, | |
float | g, | |||
float | b, | |||
bool | shiny = false | |||
) | [virtual] |
Propriété color.
Réimplémentée à partir de GLamObject.
void GLamGroup::setMaterial | ( | float | mat[10] | ) | [virtual] |
Propriété material.
Réimplémentée à partir de GLamObject.
void GLamGroup::setSelected | ( | bool | selected = true |
) | [virtual] |
Force ou non l'état 'sélectionné' de l'objet. Le cas échéant, celui-ci est alors regénéré avec un aspect cyan semi-transparent.
Réimplémentée à partir de GLamObject.
void GLamGroup::setShiny | ( | bool | shiny = true |
) | [virtual] |
Propriété shiny.
Réimplémentée à partir de GLamObject.
void GLamGroup::setSimpleColor | ( | bool | simpleColor = true |
) | [virtual] |
Propriété simpleColor.
Réimplémentée à partir de GLamObject.
void GLamGroup::update | ( | ) | [virtual] |
Fixation du mode de rendu de l'objet et fabrication de la display list. Mise à jour de l'identifiant de l'objet dans la liste des objets.
Réimplémentée à partir de GLamObject.