L'exécutable


Le source: NormalesMoyennes.cpp
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <math.h>
static GLfloat view_rotx=-90.0 ;
static GLfloat view_roty=0.0 ;
static GLfloat view_rotz=0.0;
static int s = 0 ;
void myinit(void) {
GLfloat specular[] = { 0.0,0.0,0.0,0.0 };
GLfloat shinines[] = { 0.0 };
GLfloat l_pos[] = { 1.0,1.0,1.0,0.0 };
glClearColor(1.0,1.0,1.0,1.0) ;
glMaterialfv(GL_FRONT,GL_SPECULAR,specular);
glMaterialfv(GL_FRONT,GL_SHININESS,shinines);
glLightfv(GL_LIGHT0,GL_POSITION,l_pos);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
}
void normal(float px,float py,float pz,float dx,float dy,float dz) {
float vx = dy ;
float vy = -dx ;
float vz = 0.0F ;
float d =(float) sqrt(dy*dy+dx*dx) ;
vx /= d ;
vy /= d ;
float vx1 = (2.0F*dx+vx)/3.0F ;
float vy1 = (2.0F*dy+vy)/3.0F ;
float vz1 = (2.0F*dz+vz)/3.0F ;
float vx2 = (2.0F*dx-vx)/3.0F ;
float vy2 = (2.0F*dy-vy)/3.0F ;
float vz2 = (2.0F*dz-vz)/3.0F ;
glPushMatrix() ;
glTranslatef(px,py,pz) ;
glBegin(GL_LINES) ;
glVertex3f(0.0F,0.0F,0.0F) ;
glVertex3f(dx,dy,dz) ;
glVertex3f(dx,dy,dz) ;
glVertex3f(vx1,vy1,vz1) ;
glVertex3f(dx,dy,dz) ;
glVertex3f(vx2,vy2,vz2) ;
glEnd() ;
glPopMatrix() ;
}
void scene1(void) {
GLfloat noir[] = { 0.0F,0.0F,0.0F,1.0F };
GLfloat rouge[] = { 1.0F,0.0F,0.0F,1.0F };
GLfloat vert[] = { 0.0F,1.0F,0.0F,1.0F };
GLfloat gris[] = { 0.7F,0.7F,0.7F,1.0F };
glMaterialfv(GL_FRONT,GL_DIFFUSE,gris);
glEnable(GL_LIGHTING);
glPushMatrix();
float p[] = { 0.0F,0.0F,0.0F } ;
float p1[] = { -5.0F,-4.0F,-3.0F } ;
float p2[] = { 1.0F,-5.0F,-4.0F } ;
float p3[] = { 4.0F,1.0F,-5.0F } ;
float p4[] = { 2.0F,5.0F,-4.0F } ;
float p5[] = { -2.0F,4.0F,-4.0F } ;
glRotatef(view_rotx,1.0,0.0,0.0);
glRotatef(view_roty,0.0,1.0,0.0);
glRotatef(view_rotz,0.0,0.0,1.0);
glBegin(GL_TRIANGLES) ;
glNormal3f(0.94F,0.26F,2.84F) ;
glVertex3fv(p) ;
glNormal3f(-1.19F,-0.53F,2.7F) ;
glVertex3fv(p1) ;
glNormal3f(1.33F,-1.52F,2.22F) ;
glVertex3fv(p2) ;
glNormal3f(0.94F,0.26F,2.84F) ;
glVertex3fv(p) ;
glNormal3f(1.33F,-1.52F,2.22F) ;
glVertex3fv(p2) ;
glNormal3f(2.35F,-0.12F,1.86F) ;
glVertex3fv(p3) ;
glNormal3f(0.94F,0.26F,2.84F) ;
glVertex3fv(p) ;
glNormal3f(2.35F,-0.12F,1.86F) ;
glVertex3fv(p3) ;
glNormal3f(1.46F,1.4F,2.21F) ;
glVertex3fv(p4) ;
glNormal3f(0.94F,0.26F,2.84F) ;
glVertex3fv(p) ;
glNormal3f(1.46F,1.4F,2.21F) ;
glVertex3fv(p4) ;
glNormal3f(-0.84F,1.66F,2.35F) ;
glVertex3fv(p5) ;
glNormal3f(0.94F,0.26F,2.84F) ;
glVertex3fv(p) ;
glNormal3f(-0.84F,1.66F,2.35F) ;
glVertex3fv(p5) ;
glNormal3f(-1.19F,-0.53F,2.7F) ;
glVertex3fv(p1) ;
glEnd() ;
glMaterialfv(GL_FRONT,GL_DIFFUSE,noir);
glLineWidth(2.0) ;
glDisable(GL_LIGHTING);
glColor3f(0.0F,0.0F,1.0F);
normal(-1.33F,-3.0F,-2.33F,0.081F,-1.86F,2.34F) ;
normal(1.66F,-1.33F,-3.0F,2.32F,-0.88F,1.68F) ;
normal(2.0F,2.0F,-3.0F,2.23F,0.64F,1.91F) ;
normal(0.0F,3.0F,-2.66F,0.49F,1.97F,2.21F) ;
normal(-2.33F,0.0F,-2.33F,-2.0F,1.0F,2.0F) ;
glColor3f(1.0F,0.0F,0.0F);
normal(0.0F,0.0F,0.0F,0.94F,0.26F,2.84F) ;
glColor3f(0.0F,1.0F,0.0F);
normal(p1[0],p1[1],p1[2],-1.19F,-0.53F,2.7F) ;
normal(p2[0],p2[1],p2[2],1.33F,-1.52F,2.22F) ;
normal(p3[0],p3[1],p3[2],2.35F,-0.12F,1.86F) ;
normal(p4[0],p4[1],p4[2],1.46F,1.4F,2.21F) ;
normal(p5[0],p5[1],p5[2],-0.84F,1.66F,2.35F) ;
glPopMatrix();
}
void scene2(void) {
GLfloat noir[] = { 0.0F,0.0F,0.0F,1.0F };
GLfloat gris[] = { 0.7F,0.7F,0.7F,1.0F };
glMaterialfv(GL_FRONT,GL_DIFFUSE,gris);
glEnable(GL_LIGHTING);
glPushMatrix();
float p[] = { 0.0F,0.0F,0.0F } ;
float p1[] = { -5.0F,-4.0F,-3.0F } ;
float p2[] = { 1.0F,-5.0F,-4.0F } ;
float p3[] = { 4.0F,1.0F,-5.0F } ;
float p4[] = { 2.0F,5.0F,-4.0F } ;
float p5[] = { -2.0F,4.0F,-4.0F } ;
glRotatef(view_rotx,1.0,0.0,0.0);
glRotatef(view_roty,0.0,1.0,0.0);
glRotatef(view_rotz,0.0,0.0,1.0);
glBegin(GL_TRIANGLES) ;
glNormal3f(0.081F,-1.86F,2.34F) ;
glVertex3fv(p) ;
glVertex3fv(p1) ;
glVertex3fv(p2) ;
glNormal3f(2.32F,-0.88F,1.68F) ;
glVertex3fv(p) ;
glVertex3fv(p2) ;
glVertex3fv(p3) ;
glNormal3f(2.23F,0.64F,1.91F) ;
glVertex3fv(p) ;
glVertex3fv(p3) ;
glVertex3fv(p4) ;
glNormal3f(0.49F,1.97F,2.21F) ;
glVertex3fv(p) ;
glVertex3fv(p4) ;
glVertex3fv(p5) ;
glNormal3f(-2.0F,1.0F,2.0F) ;
glVertex3fv(p) ;
glVertex3fv(p5) ;
glVertex3fv(p1) ;
glEnd() ;
glMaterialfv(GL_FRONT,GL_DIFFUSE,noir);
glLineWidth(2.0) ;
glDisable(GL_LIGHTING);
glColor3f(0.0F,0.0F,1.0F);
normal(-1.33F,-3.0F,-2.33F,0.081F,-1.86F,2.34F) ;
normal(1.66F,-1.33F,-3.0F,2.32F,-0.88F,1.68F) ;
normal(2.0F,2.0F,-3.0F,2.23F,0.64F,1.91F) ;
normal(0.0F,3.0F,-2.66F,0.49F,1.97F,2.21F) ;
normal(-2.33F,0.0F,-2.33F,-2.0F,1.0F,2.0F) ;
glColor3f(1.0F,0.0F,0.0F);
normal(0.0F,0.0F,0.0F,0.94F,0.26F,2.84F) ;
glColor3f(0.0F,1.0F,0.0F);
normal(p1[0],p1[1],p1[2],-1.19F,-0.53F,2.7F) ;
normal(p2[0],p2[1],p2[2],1.33F,-1.52F,2.22F) ;
normal(p3[0],p3[1],p3[2],2.35F,-0.12F,1.86F) ;
normal(p4[0],p4[1],p4[2],1.46F,1.4F,2.21F) ;
normal(p5[0],p5[1],p5[2],-0.84F,1.66F,2.35F) ;
glPopMatrix();
}
void CALLBACK display(void) {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if ( s )
scene1() ;
else
scene2() ;
glFlush();
auxSwapBuffers();
}
void CALLBACK myReshape(int w,int h) {
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-8.5,8.5,-8.5*(float)h/(float)w,8.5*(float)h/(float)w,-8,8);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0F,1.0F,0.0F);
}
void CALLBACK up(void) {
view_rotx++ ;
}
void CALLBACK down(void) {
view_rotx-- ;
}
void CALLBACK left(void) {
view_roty++ ;
}
void CALLBACK right(void) {
view_roty-- ;
}
void CALLBACK keyz(void) {
view_rotz++ ;
}
void CALLBACK keyZ(void) {
view_rotz-- ;
}
void CALLBACK keySpace() {
s = 1 - s ;
}
void main(void) {
auxInitDisplayMode(AUX_DOUBLE|AUX_RGB|AUX_DEPTH);
auxInitPosition(0,0,350,250);
auxInitWindow("Calcul des normales moyennes");
myinit();
auxKeyFunc(AUX_UP,up) ;
auxKeyFunc(AUX_DOWN,down) ;
auxKeyFunc(AUX_LEFT,left) ;
auxKeyFunc(AUX_RIGHT,right) ;
auxKeyFunc(AUX_z,keyz) ;
auxKeyFunc(AUX_Z,keyZ) ;
auxKeyFunc(AUX_SPACE,keySpace) ;
auxReshapeFunc(myReshape);
auxMainLoop(display);
}
RETOUR