// initialisation d'openGL void initialisation (void) { // modèle de rendu glShadeModel(GL_SMOOTH); // couleur de l'arrière-plan glClearColor (1.0, 1.0, 1.0, 1.0); // activer les etats openGL glEnable(GL_NORMALIZE); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glEnable(GL_FOG); // fonction de profondeur glDepthFunc(GL_LEQUAL); // amélioration de la perspective glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE ); // two-side mode in openGL glEnable( GL_VERTEX_PROGRAM_TWO_SIDE ); // two-side mode in GLSL glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); // charger les textures chargerTextures(); }
void initialisation() { // donner la couleur de fond glClearColor( 0.7, 0.3, 0.0, 1.0 ); // activer les etats openGL glEnable( GL_NORMALIZE ); glEnable( GL_DEPTH_TEST ); chargerTextures(); // charger les nuanceurs chargerNuanceurs(); }
//////////////////////////////////////////////////////////////////////// /// /// @fn void Modele3D::charger( const std::string& nomModele, const std::string& nomFichier ) /// /// Cette fonction charge un modèle 3D à partir d'un fichier supporté /// par la librairie 'assimp'. Les textures OpenGL afférentes sont /// également chargées. /// /// @param[in] nomFichier : nom du fichier modèle (normalement .mtl) /// /// @return Aucune. /// //////////////////////////////////////////////////////////////////////// bool Modele3D::charger( const std::string& nomFichier ) { if(!utilitaire::fichierExiste(nomFichier)) { utilitaire::afficherErreur("Fichier du modele "+nomFichier+" Inexistant"); return false; } // Construire l'objet scene const aiScene* scene = importer_.ReadFile(nomFichier, aiProcessPreset_TargetRealtime_MaxQuality); if (scene==NULL) { utilitaire::afficherErreur("Impossible de charger l'objet 3d!"); return false; } scene_ = scene; // Charger les textures chargerTextures(); return true; }
void DrawPlateau() { glColor3f(1.0,1.0,1.0); glClearColor (1.0,1.0,1.0,1.0); glEnable(GL_TEXTURE_2D); chargerTextures(0,"texture/sombre.tga"); chargerTextures(1,"texture/wood_wide1.tga"); glBindTexture(GL_TEXTURE_2D, aTexture[0].texID); //les bords superieur glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.0,0.0,-1.0); //a ----> 1point de la grille glTexCoord2i(0,1); glVertex3f(-1.058,0.0,-1.058); //A glTexCoord2i(0,0); glVertex3f(-1.058,0.0,1.058); //B glTexCoord2i(1,0); glVertex3f(-1.0,0.0,1.0);//b ----> 2point de la grille glTexCoord2i(1,1); glVertex3f(-1.0,0.0,1.0);//b glTexCoord2i(0,1); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(0,0); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(1,0); glVertex3f(1.0,0.0,1.0);//c ----> 3point de la grille glTexCoord2i(1,1); glVertex3f(1.0,0.0,1.0);//c glTexCoord2i(0,1); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(0,0); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(1,0); glVertex3f(1.0,0.0,-1.0);//d glTexCoord2i(1,1); glVertex3f(1.0,0.0,-1.0);//d ----> 4point de la grille glTexCoord2i(0,1); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(0,0); glVertex3f(-1.058,0.0,-1.058);//A glTexCoord2i(1,0); glVertex3f(-1.0,0.0,-1.0); //a glEnd(); //les bords lateral glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.058,0.0,-1.058);//A glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,-1.058); //A2 glTexCoord2i(0,0); glVertex3f(-1.058,-0.02,1.058); //B2 glTexCoord2i(1,0); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(1,1); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,1.058);//B2 glTexCoord2i(0,0); glVertex3f(1.058,-0.02,1.058);//C2 glTexCoord2i(1,0); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(1,1); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(0,1); glVertex3f(1.058,-0.02,1.058);//C2 glTexCoord2i(0,0); glVertex3f(1.058,-0.02,-1.058);//D2 glTexCoord2i(1,0); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(1,1); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(0,1); glVertex3f(1.058,-0.02,-1.058);//D2 glTexCoord2i(0,0); glVertex3f(-1.058,-0.02,-1.058); //A2 glTexCoord2i(1,0); glVertex3f(-1.058,0.0,-1.058); //A glEnd(); if(reflet) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0,1.0,1.0,0.5); glClearColor (1.0,1.0,1.0,0.5); } //la face posterieur glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.058,-0.02,-1.058); glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,1.058); glTexCoord2i(0,0); glVertex3f(1.058,-0.02,1.058); glTexCoord2i(1,0); glVertex3f(1.058,-0.02,-1.058); glEnd(); DrawGrille(); if(reflet) { glDisable(GL_BLEND); glColor3f(1.0,1.0,1.0); glClearColor (1.0,1.0,1.0,1.0); } DrawSky(); glDeleteTextures(1, &aTexture[0].texID); glDeleteTextures(1, &aTexture[1].texID); glDisable(GL_TEXTURE_2D); //le plan de pojection de l'ombre vfloor[0][0]=-1.058; vfloor[0][1]=0.0001; vfloor[0][2]=-1.058; vfloor[1][0]=-1.058; vfloor[1][1]=0.0001; vfloor[1][2]=1.058; vfloor[2][0]=1.058; vfloor[2][1]=0.0001; vfloor[2][2]=1.058; vfloor[3][0]=1.058; vfloor[3][1]=0.0001; vfloor[3][2]=-1.058; }
int main(int argc, char *argv[]) { SDL_Event event; const Uint32 time_per_frame = 1000/FPS; unsigned int width = LARGEUR_FENETRE; unsigned int height = HAUTEUR_FENETRE; Uint32 last_time,current_time,elapsed_time; //for time animation Uint32 start_time,stop_time; //for frame limit SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); atexit(stop); /* playsound("alig.mp3"); --------------------------------- MUSIC */ SDL_WM_SetCaption("Brutal Gore", NULL); SDL_SetVideoMode(width, height, 32, SDL_OPENGL); //initFullScreen(&width,&height); glMatrixMode( GL_PROJECTION ); glLoadIdentity( ); gluPerspective(70,(double)width/height,0.001,1000); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); chargerTextures(); camera = new FreeFlyCamera(Vector3D(0,0,2)); last_time = SDL_GetTicks(); for (;;) { start_time = SDL_GetTicks(); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: exit(0); break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_p: takeScreenshot("test.bmp"); break; case SDLK_ESCAPE: exit(0); break; default : camera->OnKeyboard(event.key); } break; case SDL_KEYUP: camera->OnKeyboard(event.key); break; case SDL_MOUSEMOTION: camera->OnMouseMotion(event.motion); break; case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: camera->OnMouseButton(event.button); break; } } current_time = SDL_GetTicks(); elapsed_time = current_time - last_time; last_time = current_time; camera->animate(elapsed_time); DrawGL(); stop_time = SDL_GetTicks(); if ((stop_time - last_time) < time_per_frame) { SDL_Delay(time_per_frame - (stop_time - last_time)); } } return 0; }