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


Référence de la classe GLamMap

Surface bicubique. Plus de détails...

#include <glammap.h>

Graphe d'héritage de GLamMap:
GLamObject

Liste de tous les membres

Types publics

enum  Mode { Bezier, CatmullRom, NRUBS }

Fonctions membres publiques

 GLamMap ()
 GLamMap (double *pts, int numPts=4, int numSectors=100)
 GLamMap (double *pts, double *vectors, int numVectors=4, int numSectors=100)
 GLamMap (const GLamMap &obj)
 ~GLamMap ()
GLamMapoperator= (const GLamMap &obj)
void create ()
XamPoint ctrlPoint (int index) const
double ctrlPointX (int index) const
double ctrlPointY (int index) const
double ctrlPointZ (int index) const
void setCtrlPoint (int index, const XamPoint &point)
void setCtrlPoint (int index, double x, double y, double z)
void toHorseSaddle (double a=1.0, double b=1.0, double c=1.0)
void toMonkeySaddle (double a=1.0, double b=1.0, double c=1.0)
void toEllipticParaboloid (double a=1.0, double b=1.0, double c=1.0)
int numSectors () const
void setNumSectors (int numSectors)
double max (int axis) const
double min (int axis) const
Mode mode1 () const
Mode mode2 () const
void setMode (Mode mode1, Mode mode2)
bool isRoughMode () const
void setRoughMode (bool roughMode=true)
bool isSideChanged () const
void changeSide (bool changeSide=true)
bool isClosed () const
void setClosed (bool closed=true)
bool isInversed () const
void setInversed (bool inversed=true)

Description détaillée

Surface bicubique.

La classe GLamMap autorise la construction de surfaces bicubiques définies par un ensemble de 16 points de contrôle (x,y,z) repérés comme suit dans le plan XY. La définition des 16 points peut être réalisée de 4 manières différentes (notée def1 à def4) :

   0 --- 1 --- 2 --- 3    def1 :  4 points        p0,p3,pC,pF
   |     |     |     |
   |     |     |     |    def2 : 16 points        p0 .. pF
   4 --- 5 --- 6 --- 7
   |     |     |     |    def3 :  4 points        p0,p3,pC,pF
   |     |     |     |              4 vecteurs      v01,v32,vCD,vFE
   8 --- 9 --- A --- B
   |     |     |     |    def4 :  4 points        p0,p3,pC,pF
   |     |     |     |             12 vecteurs      v01,v05,v04,v37,v36,v32,vC8,vC9,vCD,vFE,vFA,vFB
   C --- D --- E --- F

Propriétés

points : Points de contrôle de la surface. L'argument index doit être compris entre 0 et 15.

numSectors : Nombre de facettes pour chaque axe de la surface (100 par défaut). Le nombre total de facettes de la surface est égal au carré de numSectors.

mode : Mode de calcul de la surface. Par défaut, le calcul de la surface est réalisé par produit de matrices de Bézier (chaque ligne et chaque colonne de la grille des 16 points de contrôle sert d'enveloppe à une courbe lisse de Bézier). Ce mode de calcul peut être modifié, chaque argument de la méthode setMode() accepte une valeur parmi GLamMap::Bezier, GLamMap::CatmullRom ou GLamMap::NRUBS...

roughMode : Mode ébauche. Dans ce mode, seule la grille des points de contrôle est montrée.

changeSide : Inversion du coté de la surface sensible au rendu.

closed : Fermeture de la surface perpendiculairement au plan XY.

inversed : Inversion de la surface par symétrie par rapport au plan médian XY.


Exemple

// attributs

GLamMap*  map1 ;
GLamMap*  map2 ;
GLamMap*  map3 ;
GLamMap*  map4 ;

// construction

double ptsmap1[][3] = { {-3, 2, 2}, { 3, 2, 1}, {-3,-2, 3}, { 3,-2, 0} } ;
double vecmap1[][3] = { { 1, 1, 1}, {-1,-1, 1}, { 1, 1, 1}, {-1, 0, 1} } ;

// avec 4 points et 4 vecteurs
map1 = new GLamMap( (double*)ptsmap1, (double*)vecmap1 ) ;

map1->setSimpleColor( false ) ;
map1->setClosed() ;

map2 = new GLamMap( *map1 ) ;
map2->setRoughMode() ;

double ptsmap3[][3] = {
  { -3, -3, -1 }, { -3, -1,  5 }, { -3, 1,  5 }, { -3, 3, -1 },
  { -1, -3,  5 }, { -1, -1,  0 }, { -1, 1,  0 }, { -1, 3,  5 },
  {  1, -3,  5 }, {  1, -1,  0 }, {  1, 1,  0 }, {  1, 3,  5 },
  {  3, -3, -1 }, {  3, -1,  5 }, {  3, 1,  5 }, {  3, 3, -1 } } ;

// avec 16 points
map3 = new GLamMap((double*)ptsmap3, 16, 20 ) ;
map3->setColor(191, 239, 255, true ) ;

double ptsmap4[][3] = { {-3, 2, 2}, { 3, 2, 1}, {-3,-2, 3}, { 3,-2, 0} } ;

// avec 4 points
map4 = new GLamMap((double*)ptsmap4 ) ;
map4->toHorseSaddle(2) ;
map4->setClosed() ;
map4->setColor(205, 133, 63, true ) ;

// projection sur la scène

glPushMatrix() ;
  glTranslated(0, -5, 0 ) ;
  map1->draw() ;
  map2->draw() ;
  glTranslated(-5, 6, 0 ) ;
  map3->draw() ;
  glTranslated( 8, 2, -map4->min(2) ) ;
  map4->draw() ;
glPopMatrix() ;
glammap_example.png



Documentation des énumérations membres

Propriété mode. Enumération : Bezier, CatmullRom, NRUBS.


Documentation des constructeurs et destructeur

GLamMap::GLamMap (  ) 
Constructeur par défaut.

Le constructeur par défaut crée une surface construite à partir de 4 points répartis en +/- 0.5 autour de l'origine du repère , apparaissant sous sa forme fil de fer (wireframe). Cet état est révocable par modification des points de contrôle ou par copie d'un autre objet de même classe (cf. sélecteur isDefault() de la classe de base).
glammap_default.png
GLamMap::GLamMap ( double *  pts,
int  numPts = 4,
int  numSectors = 100 
)

Construction à partir d'une liste de numPts points (x,y,z) transmis au moyen du tableau pts, avec 2 possibilités :

  • seulement les 4 points représentant les coins p0,p3,pC,pF de la surface,
  • ou l'ensemble des 16 points de contrôle dans l'ordre p0 à pF. L'argument numSectors spécifie le nombre de facettes pour chaque axe de la surface (le nombre total de facettes de la surface est donc égal au carré de numSectors).
GLamMap::GLamMap ( double *  pts,
double *  vectors,
int  numVectors = 4,
int  numSectors = 100 
)

Construction à partir d'une liste de 4 points (x,y,z) transmis au moyen du tableau pts, et d'une liste de vecteurs relatifs (x,y,z) transmis par le tableau vectors, avec 2 possibilités :

  • les 4 points représentant les coins p0,p3,pC,pF de la surface et 4 vecteurs v01,v32,vCD,vFE,
  • ou les 4 points représentant les coins p0,p3,pC,pF de la surface et 12 vecteurs dans l'ordre v01,v05,v04,v37,v36,v32,vC8,vC9,vCD,vFE,vFA,vFB. L'argument numSectors spécifie le nombre de facettes pour chaque axe de la surface (le nombre total de facettes de la surface est donc égal au carré de numSectors).
GLamMap::GLamMap ( const GLamMap obj  ) 

Constructeur de copie.

GLamMap::~GLamMap (  ) 

Destructeur.


Documentation des fonctions membres

void GLamMap::changeSide ( bool  changeSide = true  ) 

Propriété changeSide.

void GLamMap::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.

XamPoint GLamMap::ctrlPoint ( int  index  )  const [inline]

Propriété points.

double GLamMap::ctrlPointX ( int  index  )  const [inline]

Propriété points.

double GLamMap::ctrlPointY ( int  index  )  const [inline]

Propriété points.

double GLamMap::ctrlPointZ ( int  index  )  const [inline]

Propriété points.

bool GLamMap::isClosed (  )  const [inline]

Propriété closed.

bool GLamMap::isInversed (  )  const [inline]

Propriété inversed.

bool GLamMap::isRoughMode (  )  const [inline]

Propriété roughMode.

bool GLamMap::isSideChanged (  )  const [inline]

Propriété changeSide.

double GLamMap::max ( int  axis  )  const [inline]

Accès aux valeurs maximales de la surface. L'argument axis vaut 0, 1 ou 2 respectivement pour les axes X,Y ou Z.

double GLamMap::min ( int  axis  )  const [inline]

Accès aux valeurs minimales de la surface. L'argument axis vaut 0, 1 ou 2 respectivement pour les axes X,Y ou Z.

Mode GLamMap::mode1 (  )  const [inline]

Propriété mode.

Mode GLamMap::mode2 (  )  const [inline]

Propriété mode.

int GLamMap::numSectors (  )  const [inline]

Propriété numSectors.

GLamMap & GLamMap::operator= ( const GLamMap obj  ) 

Surcharge de l'opérateur d'affectation.

void GLamMap::setClosed ( bool  closed = true  ) 

Propriété closed.

void GLamMap::setCtrlPoint ( int  index,
double  x,
double  y,
double  z 
)

Propriété points.

void GLamMap::setCtrlPoint ( int  index,
const XamPoint point 
)

Propriété points.

void GLamMap::setInversed ( bool  inversed = true  ) 

Propriété inversed.

void GLamMap::setMode ( Mode  mode1,
Mode  mode2 
)

Propriété mode.

void GLamMap::setNumSectors ( int  numSectors  ) 

Propriété numSectors.

void GLamMap::setRoughMode ( bool  roughMode = true  ) 

Propriété roughMode.

void GLamMap::toEllipticParaboloid ( double  a = 1.0,
double  b = 1.0,
double  c = 1.0 
)

Force une paraboloïde elliptique.

  • a : niveau de courbure dans le plan 0XZ
  • b : niveau de courbure dans le plan 0YZ
  • c : facteur d'échelle élévation (axe 0Z)
void GLamMap::toHorseSaddle ( double  a = 1.0,
double  b = 1.0,
double  c = 1.0 
)

Force une paraboloïde hyperbolique de type "selle de cheval".

  • a : niveau de courbure le long de l'axe 0X
  • b : niveau de courbure le long de l'axe 0Y
  • c : facteur d'échelle élévation (axe 0Z)
void GLamMap::toMonkeySaddle ( double  a = 1.0,
double  b = 1.0,
double  c = 1.0 
)

Force une paraboloïde hyperbolique de type "selle de singe".

  • a : niveau de courbure dans le plan 0XZ
  • b : niveau de courbure dans le plan 0YZ
  • c : facteur d'échelle élévation (axe 0Z)

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