/* Affichage de la fonction de Rosenbrock à l'aide de polygones. Francois faure, UJF-Grenoble, 2003 */ #include #include #include #include #include "traqueboule.h" const int W_fen = 600; // largeur fenetre const int H_fen = 600; // hauteur fenetre // fonction de Rosenbrock tabulée const int w_img = 10; // largeur tableau ros const int h_img = 10; // hauteur tableau ros GLfloat ros[h_img*w_img*3]; // points (x,y,z) GLfloat norm[h_img*w_img*3]; // normales (x,y,z) GLfloat tex[h_img*w_img*2]; // coordonnees de texture GLuint indices[2*(w_img-1)*h_img]; // indices pour des TRIANGLE_STRIP // espace couvert par la fonction const float xmin = -1.0, xmax=1.0, ymin=-1.0, ymax = 1.0; float zMax = 0; // mode d'affichage du treillis bool wireFrame = false; // matériau GLfloat m_emission[] = {0, 0, 0}; GLfloat m_ambient[] = {1,1,1}; GLfloat m_diffuse[] = {0.5,0.5,0.5}; GLfloat m_specular[] = {0.5,0.5,0.5}; GLfloat m_shininess = 20.0; // caractéristiques globales de l'éclairage GLfloat l_ambient[] = {0.1,0.1,0.1}; GLint l_localViewer = GL_TRUE; GLint l_twoSides = GL_TRUE; GLint l_separateDiffuseAndSpecular = GL_SINGLE_COLOR; //GLint l_separateDiffuseAndSpecular = GL_SEPARATE_SPECULAR_COLOR; // lumière 0 bool lumiere0 = true; GLfloat l0_position[] = {0,0,0,1}; GLfloat l0_ambient[] = {0.1,0.1,0.1}; GLfloat l0_diffuse[] = {1,0,0}; GLfloat l0_specular[] = {0,1,0}; // lumière 1 bool lumiere1 = false; GLfloat l1_position[] = {0,0,0,1}; GLfloat l1_ambient[] = {0.1,0.1,0.1}; GLfloat l1_diffuse[] = {1,0,0}; GLfloat l1_specular[] = {0,1,0}; GLfloat lattitude1 = 90; GLfloat longitude1 = 0; GLfloat distance1 = 2; static GLubyte checkImage[2][2][3]; static GLuint texName; void init_textures() { checkImage[0][0][0]=checkImage[0][0][1]=checkImage[0][0][2]=(GLubyte) 50; checkImage[0][1][0]=checkImage[0][1][1]=checkImage[0][1][2]=(GLubyte) 255; checkImage[1][0][0]=checkImage[1][0][1]=checkImage[1][0][2]=(GLubyte) 255; checkImage[1][1][0]=checkImage[1][1][1]=checkImage[1][1][2]=(GLubyte) 50; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, checkImage); glBindTexture(GL_TEXTURE_2D, 0); } // calcul des points d'échantillonnage void calculer_rosenbrock() { int index=0; for( int i=0; izMax) zMax=z; //printf("%f %f %f\n",x,y,z); tex[2*(i*h_img+j) ] = (GLfloat) i/(w_img-1); tex[2*(i*h_img+j)+1] = (GLfloat) j/(h_img-1); } // enumeration des indices pour un parcours TRIANGLE_STRIP index=0; for(int i=1; i