Lumières colorées et lumières blanches sur cubes sans normales
Lumières colorées et lumières blanches sur cubes avec normales
Cylindres par facette
Cylindre par facette (peu de facettes)
Fichier source : EnsembleFacettesCubeCylindre.cpp
Modules utilitaires
/* Scenes dessinees */
static void mySolidCubeSansNormales(double ct) {
float c =(float) ct/2.0F;
glPushMatrix();
glBegin(GL_QUADS);
{ glVertex3f(-c, c,-c);
glVertex3f(-c,-c,-c);
glVertex3f( c,-c,-c);
glVertex3f( c, c,-c); }
{ glVertex3f( c, c, c);
glVertex3f(-c, c, c);
glVertex3f(-c,-c, c);
glVertex3f( c,-c, c); }
{ glVertex3f(-c, c,-c);
glVertex3f(-c,-c,-c);
glVertex3f(-c,-c, c);
glVertex3f(-c, c, c); }
{ glVertex3f( c, c, c);
glVertex3f( c,-c, c);
glVertex3f( c,-c,-c);
glVertex3f( c, c,-c); }
{ glVertex3f(-c,-c, c);
glVertex3f(-c,-c,-c);
glVertex3f( c,-c,-c);
glVertex3f( c,-c, c); }
{ glVertex3f( c, c, c);
glVertex3f( c, c,-c);
glVertex3f(-c, c,-c);
glVertex3f(-c, c, c); }
glEnd();
glPopMatrix();
}
static void mySolidCubeAvecNormales(double ct) {
float c =(float) ct/2.0F;
/* Protection contre la modification de la normale */
/* et du flag normalisation */
GLboolean nm = glIsEnabled(GL_NORMALIZE);
if ( !nm )
glEnable(GL_NORMALIZE);
float normale[4];
glGetFloatv(GL_CURRENT_NORMAL,normale);
/* Modelisation geometrique */
glPushMatrix();
glBegin(GL_QUADS);
{ glNormal3f(0.0F,0.0F,-1.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f( c, c,-c);
glTexCoord2f(0.0F,1.0F);
glVertex3f( c,-c,-c);
glTexCoord2f(1.0F,1.0F);
glVertex3f(-c,-c,-c);
glTexCoord2f(1.0F,0.0F);
glVertex3f(-c, c,-c); }
{ glNormal3f(0.0F,0.0F,1.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f( c, c, c);
glTexCoord2f(0.0F,1.0F);
glVertex3f(-c, c, c);
glTexCoord2f(1.0F,1.0F);
glVertex3f(-c,-c, c);
glTexCoord2f(1.0F,0.0F);
glVertex3f( c,-c, c); }
{ glNormal3f(-1.0F,0.0F,0.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f(-c, c,-c);
glTexCoord2f(0.0F,1.0F);
glVertex3f(-c,-c,-c);
glTexCoord2f(1.0F,1.0F);
glVertex3f(-c,-c, c);
glTexCoord2f(1.0F,0.0F);
glVertex3f(-c, c, c); }
{ glNormal3f(1.0F,0.0F,0.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f( c, c, c);
glTexCoord2f(0.0F,1.0F);
glVertex3f( c,-c, c);
glTexCoord2f(1.0F,1.0F);
glVertex3f( c,-c,-c);
glTexCoord2f(1.0F,0.0F);
glVertex3f( c, c,-c); }
{ glNormal3f(0.0F,-1.0F,0.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f(-c,-c, c);
glTexCoord2f(0.0F,1.0F);
glVertex3f(-c,-c,-c);
glTexCoord2f(1.0F,1.0F);
glVertex3f( c,-c,-c);
glTexCoord2f(1.0F,0.0F);
glVertex3f( c,-c, c); }
{ glNormal3f(0.0F,1.0F,0.0F);
glTexCoord2f(0.0F,0.0F);
glVertex3f( c, c, c);
glTexCoord2f(0.0F,1.0F);
glVertex3f( c, c,-c);
glTexCoord2f(1.0F,1.0F);
glVertex3f(-c, c,-c);
glTexCoord2f(1.0F,0.0F);
glVertex3f(-c, c, c); }
glEnd();
glPopMatrix();
/* Restoration de la normale et du flag normalisation */
glNormal3f(normale[0],normale[1],normale[2]);
if ( !nm )
glDisable(GL_NORMALIZE);
}
static void mySolidCylindre(double hauteur,double rayon,int ns) {
/* Protection contre la modification de la normale */
/* et du flag normalisation */
GLboolean nm = glIsEnabled(GL_NORMALIZE);
if ( !nm )
glEnable(GL_NORMALIZE);
float normale[4];
glGetFloatv(GL_CURRENT_NORMAL,normale);
/* Modelisation geometrique */
glPushMatrix();
hauteur /= 2.0F;
glBegin(GL_QUAD_STRIP);
for( int i = 0 ; i <= ns ; i++ ){
float a = (2*M_PI*i)/ns;
float cs = cos(a);
float sn = -sin(a);
glNormal3f(cs,0.0F,sn);
float x = rayon*cs;
float z = rayon*sn;
glVertex3f(x,hauteur,z);
glVertex3f(x,-hauteur,z); }
glEnd();
glPopMatrix();
/* Restoration de la normale et du flag normalisation */
glNormal3f(normale[0],normale[1],normale[2]);
if ( !nm )
glDisable(GL_NORMALIZE);
}
static void mySolidCylindre(double hauteur,double rayon,int ns,int nl) {
GLboolean nm = glIsEnabled(GL_NORMALIZE);
if ( !nm )
glEnable(GL_NORMALIZE);
float normale[4];
glGetFloatv(GL_CURRENT_NORMAL,normale);
glPushMatrix();
for ( int j = 0 ; j < nl ; j++ ) {
float hi = hauteur/2-j*hauteur/nl;
float hf = hi-hauteur/nl;
glBegin(GL_QUAD_STRIP);
for( int i = 0 ; i <= ns ; i++ ) {
float a = (2*M_PI*i)/ns;
float cs = cos(a);
float sn = -sin(a);
glNormal3f(cs,0.0F,sn);
float x = rayon*cs;
float z = rayon*sn;
glVertex3f(x,hi,z);
glVertex3f(x,hf,z); }
glEnd(); }
glPopMatrix();
glNormal3f(normale[0],normale[1],normale[2]);
if ( !nm )
glDisable(GL_NORMALIZE);
}
static void mySolidCylindre(double hauteur,double rayon,int ns,int nl,int bases) {
GLboolean nm = glIsEnabled(GL_NORMALIZE);
if ( !nm )
glEnable(GL_NORMALIZE);
float normale[4];
glGetFloatv(GL_CURRENT_NORMAL,normale);
glPushMatrix();
for ( int j = 0 ; j < nl ; j++ ) {
float hi = hauteur/2-j*hauteur/nl;
float hf = hi-hauteur/nl;
glBegin(GL_QUAD_STRIP);
for( int i = 0 ; i <= ns ; i++ ) {
float a = (2*M_PI*i)/ns;
float cs = cos(a);
float sn = -sin(a);
glNormal3f(cs,0.0F,sn);
float x = rayon*cs;
float z = rayon*sn;
glVertex3f(x,hi,z);
glVertex3f(x,hf,z); }
glEnd(); }
if ( bases ) {
glBegin(GL_POLYGON);
glNormal3f(0.0F,1.0F,0.0F);
for( int i = 0 ; i < ns ; i++ ) {
float a = (2*M_PI*i)/ns;
float cs = cos(a);
float sn = -sin(a);
float x = rayon*cs;
float z = rayon*sn;
glVertex3f(x,hauteur/2.0F,z); }
glEnd();
glBegin(GL_POLYGON);
glNormal3f(0.0F,-1.0F,0.0F);
for( int i = 0 ; i < ns ; i++ ) {
float a = (2*M_PI*i)/ns;
float cs = cos(a);
float sn = sin(a);
float x = rayon*cs;
float z = rayon*sn;
glVertex3f(x,-hauteur/2.0F,z); }
glEnd(); }
glPopMatrix();
glNormal3f(normale[0],normale[1],normale[2]);
if ( !nm )
glDisable(GL_NORMALIZE);
}