![]() |
GLam Collection version 0.4 - | ACCUEIL - CLASSES - HIERARCHIE - MEMBRES - EXEMPLES |
Surface bicubique. Plus de détails...
#include <glammap.h>
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 () | |
GLamMap & | operator= (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) |
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
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.
// 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() ; | ![]() |
enum GLamMap::Mode |
Propriété mode. Enumération : Bezier, CatmullRom, NRUBS.
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::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 :
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 :
GLamMap::GLamMap | ( | const GLamMap & | obj | ) |
Constructeur de copie.
GLamMap::~GLamMap | ( | ) |
Destructeur.
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.
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.
int GLamMap::numSectors | ( | ) | const [inline] |
Propriété numSectors.
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::setInversed | ( | bool | inversed = true |
) |
Propriété inversed.
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.
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".
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".