GLam Collection version 0.4 -  ACCUEIL -  CLASSES -  HIERARCHIE -  MEMBRES -  EXEMPLES


Référence de la classe GLamObject

Classe de base abstraite. Plus de détails...

#include <glamobject.h>

Graphe d'héritage de GLamObject:
GLamAxis GLamCircle GLamCorner GLamCurve3D GLamGear GLamGrid GLamGroup GLamHole GLamMap GLamObjFile GLamPipe GLamPoint GLamPolygon GLamProfile GLamRevolution GLamSpring GLamVector

Liste de tous les membres

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 GLamObjectobjectAddress (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

Description détaillée

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.


Propriétés

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.


Moteur de scène

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.


Transformations courantes (animations...)

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.


Transformations par défaut

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...



Documentation des constructeurs et destructeur

GLamObject::GLamObject (  ) 

Constructeur par défaut.

GLamObject::~GLamObject (  ) 

Destructeur. Cette méthode assure le retrait de l'objet de la liste des objets.


Documentation des fonctions membres

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]
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.

Voir également:
GLamGroup
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).

Voir également:
id()
string GLamObject::objectClass ( uint  id  )  [static]

Récupération de la classe de l'objet à partir de son identifiant de display list.

Voir également:
id()
string GLamObject::objectName ( uint  id  )  [static]

Récupération du nom de l'objet à partir de son identifiant de display list.

Voir également:
id(), setName()
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.

Voir également:
id()
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.

Voir également:
isDefault()
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 "?".

Voir également:
objectName()
void GLamObject::setNormal ( XamPoint p1,
XamPoint p2,
XamPoint p3 
) [protected]

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.

Voir également:
isUpdate(), updateNeeded()

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.

Voir également:
isUpdate()

Doxygen version 1.6.3 - GLam Collection - (c) 2009-2010 Alain Menu