![]() |
GLam Collection version 0.4 - | ACCUEIL - CLASSES - HIERARCHIE - MEMBRES - EXEMPLES |
Classe de base abstraite. Plus de détails...
#include <glamobject.h>
Fonctions membres publiques | |
GLamObject () | |
~GLamObject () | |
bool | isDefault () const |
uint | id () const |
float | red () const |
float | green () const |
float | blue () const |
virtual void | setColor (float r, float g, float b, bool shiny=false) |
bool | isSimpleColor () const |
virtual void | setSimpleColor (bool simpleColor=true) |
bool | isShiny () const |
virtual void | setShiny (bool shiny=true) |
float | material (int i) const |
virtual void | setMaterial (float mat[10]) |
double | thickness () const |
virtual void | setThickness (double thickness) |
virtual void | update () |
bool | isUpdate () const |
void | draw (GLamObject *parent=NULL) |
virtual void | setSelected (bool selected=true) |
void | setName (const string &name) |
XamMatrix | defaultTransform () |
void | setDefaultTransform (const XamMatrix &matrix) |
void | multDefaultTransform (const XamMatrix &matrix) |
void | resetDefaultTransform () |
XamMatrix | transform () |
void | setTransform (const XamMatrix &matrix) |
void | multTransform (const XamMatrix &matrix) |
void | resetTransform () |
void | attachSound (GLamSound *sound) |
void | detachSound () |
Fonctions membres publiques statiques | |
static GLamObject * | objectAddress (uint id) |
static string | objectClass (uint id) |
static string | objectName (uint id) |
static void | translatePoints (double *pts, int numPts, double xOffset, double yOffset) |
static void | rotatePoints (double *pts, int numPts, double angle) |
static void | scalePoints (double *pts, int numPts, double xScale, double yScale) |
static int | bSplinePoints (double *ptsCtrl, int numPtsCtrl, double *pts, int numPts) |
Fonctions membres protégées | |
virtual void | create ()=0 |
void | restoreId (uint id) |
void | updateNeeded () |
void | setDefault (bool v=true) |
void | setNormal (float *a, float *b, float *c) |
void | setNormal (XamPoint &p1, XamPoint &p2, XamPoint &p3) |
uint | addToObjectsList (GLamObject *obj) |
void | delFromObjectsList (uint id) |
Attributs protégés | |
string | m_name |
nom de l'objet | |
string | m_class |
classe de l'objet |
Classe de base abstraite.
La classe GLamObject est une classe abstraite servant de modèle de développement pour l'ensemble des classes de la bibliothèque GLam. Elle assure la gestion de la liste d'affichage d'un élément (OpenGL display list), le maintien des données liées à son rendu (couleur de base, matériau, ...), et permet de provoquer son affichage proprement dit.
La classe GLamObject se charge aussi de la gestion de la liste courante des objets. Elle maintient pour cela une table de correspondance entre les identifiants de display list et l'adresse mémoire des objets.
Chaque objet peut être nommé par setName(). Cette fonctionnalité peut faciliter l'identification des objets sur une scène complexe.
Si le «picking» (technique OpenGL) est mis en place, chaque objet peut donc être sélectionné sur une scène d'affichage et ses caractéristiques peuvent être atteintes grâce aux méthodes statiques objectClass(), objectName() et objectAddress().
La classe GLamObject est abstraite, les classes dérivées de spécialisation doivent implémenter la méthode virtuelle pure create() qui décrit la procédure OpenGL de dessin d'un objet, typiquement encadrée par des appels à glPushMatrix() et glPopMatrix(). Une classe dérivée de GlamObject utilisant d'autres objets enfants eux ausssi dérivés de la classe de base devra surcharger les méthodes virtuelles de classe de base -modificateurs de propriétés et méthode update()- afin d'en propager les effets vers ses enfants.
simpleColor
: Indicateur de mode de rendu (couleur ou matériau). La valeur par défaut est true
. Le mode simpleColor
est activé automatiquement lors d'un appel à setColor().
color
: Couleur de l'objet en mode simpleColor
. Les proportions RGB sont transmissibles sous forme de valeurs réelles dans l'intervalle [0;1] (pourcentage/100) ou sous forme de valeurs entières ]1;255] (proportion codée sur 8 bits). Elles sont toujours retournées sous la forme [0;1]. La couleur par défaut est égale à {0.7,0.7,0.7}.
shiny
: Aspect mat ou brillant en mode simpleColor
. La valeur par défaut est false
.
material
: Paramètres de réflexion de l'objet. Ces paramètres sont spécifiés sous forme d'un tableau de dix valeurs représentant successivement les proportions RGB de la réflexion ambiante, diffuse et spéculaire ; la dernière valeur correspond au coefficient de brillance codé entre 0.0 et 128.0. Tout appel à setMaterial() révoque automatiquement le mode simpleColor
. La méthode material() avec un argument compris entre 0 et 9 permet de récupérer si nécessaire les caractéristiques de réflexion. Le matériau par défaut est fixé à (0.05,0.05,0.0, 0.5,0.5,0.4, 0.7,0.7,0.05, 10.0), ce qui correspond à un aspect «yellow rubber».
thickness
: Epaisseur de l'objet. Cette propriété correspond en général à la dimension suivant l'axe 0Z.
La classe de base GLamObject propose un moyen d'appliquer des transformations un tout objet de classe dérivée. Le terme transformation regroupe toutes les possibilités de modifications géométriques de l'objet par rapport au repère de la scène dans laquelle il est projeté :
Les transformations sont en général appliquées par multiplications de matrices, il est donc possible de combiner plusieurs transformations soit directement au sein d'une même matrice, soit par applications successives de plusieurs matrices de transformations élémentaires.
La méthode transform() retourne la matrice courante de transformation. Cette matrice correspond par défaut à la matrice identité, ce qui n'induit aucune transformation de la géométrie de l'objet par rapport à la scène.
La méthode setTransform(const XamMatrix& matrix ) applique la matrice transmise en argument en tant que nouvelle matrice de transformation. Pour appliquer une transformation supplémentaire sans annuler les transformations en cours, il suffit de combiner les matrices comme dans l'exemple suivant :
GLamObject* currentObject ; XamMatrix matrix ; ... ... matrix.toTranslate( 1.0, 2.0, 3.0 ) ; currentObject->setTransform( currentObject->transform() * matrix ) ; ... ...
Les écritures peuvent être simplifiées grâce à la méthode multTransform(const XamMatrix& matrix ) qui multiplie la pile des transformations courantes par la matrice transmise en argument.
multTransform
( m ) est donc équivalent à setTransform
( transform() * m ).
La méthode resetTransform() force le retour de la matrice de transformation à la matrice identité afin d'annuler toute transformation.
Les méthodes defaultTransform(), setDefaultTransform(const XamMatrix& matrix ), multDefaultTransform(const XamMatrix& matrix ) et resetDefaultTransform() agissent de la même manière sur une deuxième pile de matrices prise en compte avant la pile de transformations courantes. Les transformations par défaut sont celles à appliquer pour fixer la position et l'orientation initiale de l'objet sur la scène, en évitant ainsi les traditionnels appels aux primitives OpenGL avant l'invocation de la méthode draw().
Exemple (extrait de celui de la classe GLamCube) :
// solution 1 : // transformations initiales par primitives OpenGL GLamCube* cube1 ; GLamCube* cube2 ; GLamCube* cube3 ; // construction cube1 = new GLamCube(3, 2.4, 1.3 ) ; cube2 = new GLamCube( *cube1 ) ; cube2->setThickness(0.5 ) ; cube3 = new GLamCube(2, 4, 0 ) ; // projection sur la scène cube1->draw() ; glTranslated( 5.0, 0.0, 0.0 ) ; cube2->draw() ; glTranslated( -2.0, -3.0, 3.0 ) ; glRotated(-45, 1, 1, 0 ) ; cube3->draw() ; | // solution 2 : // transformations initiales par GLamObject GLamCube* cube1 ; GLamCube* cube2 ; GLamCube* cube3 ; // construction et mise en scène cube1 = new GLamCube(3, 2.4, 1.3 ) ; cube2 = new GLamCube( *cube1 ) ; cube2->setThickness(0.5 ) ; cube3 = new GLamCube(2, 4, 0 ) ; XamMatrix m1, m2 ; m1.toTranslate( 5.0, 0.0, 0.0 ) ; cube2->setDefaultTransform( m1 ) ; m2.toTranslate(-2.0, -3.0, 3.0 ) ; cube3->setDefaultTransform( m1 * m2 ) ; m2.toRotate(-45, XamVector(1, 1, 0 ) ) ; m2 = cube3->defaultTransform() * m2 ; cube3->setDefaultTransform( m2 ) ; // projection sur la scène cube1->draw() ; cube2->draw() ; cube3->draw() ; |
L'intérêt de la deuxième solution est que les transformations initiales sont maintenues par l'objet et non par le programme client...
GLamObject::GLamObject | ( | ) |
Constructeur par défaut.
GLamObject::~GLamObject | ( | ) |
Destructeur. Cette méthode assure le retrait de l'objet de la liste des objets.
uint GLamObject::addToObjectsList | ( | GLamObject * | obj | ) | [protected] |
Enregistrement manuel d'un objet dans la liste des objets actifs utilisée par le processus de 'picking'. Le numéro identifiant retourné est supérieur ou égal à 10000. Cette méthode ne doit normalement jamais être invoquée par les programmes clients, l'enregistrement des objets étant automatiquement pris en charge par la méthode update()... Elle est cependant utile lorsque une classe dérivée de GLamObject ne peut passer par cette procédure.
void GLamObject::attachSound | ( | GLamSound * | sound | ) | [inline] |
Attache une source sonore OpenAL à l'objet OpenGL. La position spatiale du son est ainsi liée à celle de l'objet 3D...
float GLamObject::blue | ( | ) | const [inline] |
Propriété color.
int GLamObject::bSplinePoints | ( | double * | ptsCtrl, | |
int | numPtsCtrl, | |||
double * | pts, | |||
int | numPts | |||
) | [static] |
Méthode de calcul de numPts points (x,y) d'une courbe BSpline à partir d'une liste de points de contrôle.
Les points de contrôle extrèmes sont automatiquement doublés en interne afin que la courbe passe par ces points.
Le réceptacle pts doit être dimensionné à 2 * numPts.
La méthode retourne la valeur de numPts éventuellement corrigée à la baisse de manière à ce que numPtsCtrl soit un diviseur entier de numPts.
virtual void GLamObject::create | ( | ) | [protected, pure virtual] |
Méthode virtuelle pure.
Implémenté dans GLamAxis, GLamCircle, GLamCorner, GLamRoundedCorner, GLamCurve3D, GLamGear, GLamGrid, GLamGroup, GLamHole, GLamMap, GLamObjFile, GLamPipe, GLamPolygon, GLamProfile, GLamRevolution, GLamSpring, GLamTesselation, GLamPoint, GLamVector, et GLamWire.
XamMatrix GLamObject::defaultTransform | ( | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::delFromObjectsList | ( | uint | id | ) | [protected] |
Suppression de l'objet spécifié de la liste des objets actifs. Le numéro identifiant doit avoir été obtenu par la méthode addToObjectsList().
void GLamObject::detachSound | ( | ) | [inline] |
Détache la source sonore.
void GLamObject::draw | ( | GLamObject * | parent = NULL |
) |
Dessin effectif de l'objet par appel de sa display list. L'argument optionnel parent permet de spécifier le groupe à qui appartient l'objet. Cet argument n'est normalemnt jamais utilisé par les programmes clients.
float GLamObject::green | ( | ) | const [inline] |
Propriété color.
uint GLamObject::id | ( | ) | const [inline] |
Retourne l'identifiant de l'objet.
bool GLamObject::isDefault | ( | ) | const [inline] |
Indique si l'objet a été construit avec le constructeur par défaut.
bool GLamObject::isShiny | ( | ) | const [inline] |
Propriété shiny.
bool GLamObject::isSimpleColor | ( | ) | const [inline] |
Propriété simpleColor.
bool GLamObject::isUpdate | ( | ) | const [inline] |
Indique si la display list de l'objet est à jour.
float GLamObject::material | ( | int | i | ) | const [inline] |
Propriété material.
void GLamObject::multDefaultTransform | ( | const XamMatrix & | matrix | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::multTransform | ( | const XamMatrix & | matrix | ) | [inline] |
Méthode relative au Moteur de scène.
GLamObject * GLamObject::objectAddress | ( | uint | id | ) | [static] |
Récupération de l'adresse mémoire d'un objet à partir de son identifiant de display list. La zone mémoire de l'objet doit être visible depuis le programme client (typiquement, membre de la classe cliente).
string GLamObject::objectClass | ( | uint | id | ) | [static] |
Récupération de la classe de l'objet à partir de son identifiant de display list.
string GLamObject::objectName | ( | uint | id | ) | [static] |
float GLamObject::red | ( | ) | const [inline] |
Propriété color.
void GLamObject::resetDefaultTransform | ( | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::resetTransform | ( | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::restoreId | ( | uint | id | ) | [inline, protected] |
Force le numéro identifiant.
void GLamObject::rotatePoints | ( | double * | pts, | |
int | numPts, | |||
double | angle | |||
) | [static] |
Rotation d'angle angle (en degrés) d'une liste de points (x,y).
void GLamObject::scalePoints | ( | double * | pts, | |
int | numPts, | |||
double | xScale, | |||
double | yScale | |||
) | [static] |
Application de facteurs d'échelle à une liste de points (x,y).
void GLamObject::setColor | ( | float | r, | |
float | g, | |||
float | b, | |||
bool | shiny = false | |||
) | [virtual] |
Propriété color.
Réimplémentée dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, GLamTesselation, GLamPoint, et GLamVector.
void GLamObject::setDefault | ( | bool | v = true |
) | [inline, protected] |
Indicateur de construction par défaut.
void GLamObject::setDefaultTransform | ( | const XamMatrix & | matrix | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::setMaterial | ( | float | mat[10] | ) | [virtual] |
Propriété material.
Réimplémentée dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, et GLamTesselation.
void GLamObject::setName | ( | const string & | name | ) |
Méthode permettant d'attribuer un nom à l'objet. Le nom par défaut est "?".
Calcul et fixation par glNormal3d() de la normale au plan défini par les trois objets XamPoint p1, p2, et p3.
void GLamObject::setNormal | ( | float * | a, | |
float * | b, | |||
float * | c | |||
) | [protected] |
Calcul et fixation par glNormal3d() de la normale au plan défini par les trois points (x,y,z) a, b, et c.
void GLamObject::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 dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, et GLamTesselation.
void GLamObject::setShiny | ( | bool | shiny = true |
) | [virtual] |
Propriété shiny.
Réimplémentée dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, et GLamTesselation.
void GLamObject::setSimpleColor | ( | bool | simpleColor = true |
) | [virtual] |
Propriété simpleColor.
Réimplémentée dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, et GLamTesselation.
void GLamObject::setThickness | ( | double | thickness | ) | [virtual] |
Propriété thickness.
Réimplémentée dans GLamCylinder, GLamPipe, GLamSpring, GLamTesselation, et GLamTorus.
void GLamObject::setTransform | ( | const XamMatrix & | matrix | ) | [inline] |
Méthode relative au Moteur de scène.
double GLamObject::thickness | ( | ) | const [inline] |
Propriété thickness.
XamMatrix GLamObject::transform | ( | ) | [inline] |
Méthode relative au Moteur de scène.
void GLamObject::translatePoints | ( | double * | pts, | |
int | numPts, | |||
double | xOffset, | |||
double | yOffset | |||
) | [static] |
Décalage dans le plan XY d'une liste de points (x,y).
void GLamObject::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 dans GLamGroup, GLamPipe, GLamRevolution, GLamSpring, GLamTesselation, GLamPoint, et GLamVector.
void GLamObject::updateNeeded | ( | ) | [inline, protected] |
Demande de mise à jour de la display list.