Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DEMO OPENGL


Information sur la source

Description

Cliquez pour voir la capture en taille normale
Bonjour, ce projet à été réalisé dans le cadre de mon cours Correction de Programmes au Cégep. Le but était de trouver un programme sur cppfrance et d'y apporter des modifications.

Source écrite par Kled: http://www.cppfrance.com/code.aspx?ID=35513


J'ai enlever des DLL pour pouvoir mettre le zip sur cppfrance.
  glut32.dll : http://www.dll-files.com/dllindex/dll-files.shtml?glut32
  fmod.dll   : http://www.dll-files.com/dllindex/dll-files.shtml?fmod
 

Source

  • /*
  • Auteur: Jean-Sébastien Bilodeau
  • Projet: Demo OpenGL
  • Date: 2008/05/11
  • - Les info sont dans le fichier readme.txt
  • - Version initiale du code:
  • Auteur: Kled
  • Titre: DOOM LIKE EN OPENGL
  • Lien: http://www.cppfrance.com/code.aspx?ID=35513
  • */
  • #ifdef WIN32
  • #include <windows.h>
  • #endif
  • #include <GL/openglut_std.h>
  • #include <string>
  • #include <cstring>
  • #include <sstream>
  • #include <iostream>
  • using namespace std ;
  • #include <fmod/fmod.h>//2008/05/04:FMOD v375
  • #include "Affichage.h"
  • #include "camera.h"
  • //Variables générales
  • GLint nWindowID;
  • GLboolean pleinEcran=false;
  • GLint lecran=800,hecran=600;
  • GLint width = glutGet(GLUT_SCREEN_WIDTH); //Largeur (pixels)
  • GLint height= glutGet(GLUT_SCREEN_HEIGHT); //Hauteur
  • GLdouble x=0, y=5, z=92; //Position de la camera
  • GLboolean zoom=false,affText=false;
  • GLdouble current_time,last_time;
  • FSOUND_SAMPLE *tir = NULL;
  • FSOUND_SAMPLE *pla = NULL;
  • FMUSIC_MODULE *backgrnd = NULL;
  • //Déclare les objets
  • Affichage ini;
  • Camera fpscam;
  • //Prototypes des fonctions
  • GLvoid initFmod ();//2008/05/04: Initialise FMOD
  • GLvoid delFmod ();//2008/05/04: Fermeture FMOD
  • GLvoid keyboard (GLubyte key, GLint sourisX, GLint sourisY);
  • GLvoid keyboardUP (GLubyte key, GLint sourisX, GLint sourisY);
  • GLvoid special (GLint key, GLint sourisX, GLint sourisY);
  • GLvoid specialUP (GLint key, GLint sourisX, GLint sourisY);
  • GLvoid mouse (GLint button, GLint state, GLint sourisX, GLint sourisY);
  • GLvoid vue (GLint sourisX, GLint sourisY);
  • GLvoid attente(GLvoid);
  • GLvoid display(GLvoid);
  • GLvoid display1(GLvoid);
  • GLvoid theDisplay ();
  • //Convertir n'importe quel type d'objet en string
  • template<typename T>
  • string to_string( const T & Value )
  • {
  • //Utiliser un flux de sortie pour créer la chaîne
  • ostringstream oss;
  • //Écrire la valeur dans le flux
  • oss << Value;
  • //Renvoyer une string
  • return oss.str();
  • }
  • //Cette fonction utiliser dans glut ne marche pas directement.
  • GLvoid reshape (GLint w, GLint h){ini.reshape(w,h,45.0f);}
  • /*******************************************************************************
  • int main(int argc, char** argv) ;
  • *******************************************************************************/
  • GLint main (GLint argc, char* argv[])
  • {
  • string resoPleinEcran;
  • GLint rep;
  • rep = MessageBox(NULL, "Voulez-vous entrer en mode plein écran?", "Plein écran ?",
  • MB_ICONQUESTION | MB_YESNO);
  • if(rep==IDYES) pleinEcran = true;
  • //Initialiser OpenGL
  • glutInit(&argc, argv);
  • glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);
  • //Construire la fenêtre
  • if (pleinEcran==true)
  • {
  • //2008/04/06: Récupérer la résolution
  • resoPleinEcran =to_string(width);
  • resoPleinEcran +='x';
  • resoPleinEcran +=to_string(height);
  • resoPleinEcran +=":32";//32bpp Mode
  • //glutGameModeString() n'acepte pas de string
  • size_t size = resoPleinEcran.size() + 1;
  • char * buffer = new char[ size ];
  • strncpy( buffer, resoPleinEcran.c_str(),size );
  • glutGameModeString(buffer);
  • if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE))
  • glutEnterGameMode();// Mode plein écran
  • }
  • else
  • {
  • glutInitWindowSize(lecran, hecran);
  • glutInitWindowPosition (width/2-lecran/2, 100);
  • nWindowID=glutCreateWindow ("Demo OpenGL");//Nom de la fenêtre
  • width=lecran;//2008/04/24: Changer les valeurs de la résolution
  • height=hecran;
  • }
  • ini.init1 (); //Blending
  • ini.InitTexture(); //Fonction utilisée pour charger les textures
  • ini.init2(); //Blending
  • fpscam.initCam(x,y,z); //Initialiser la camera
  • initFmod (); //Initialisation de FMOD
  • glutDisplayFunc(display); //Monde normal
  • glutReshapeFunc(reshape);
  • //Gestion du clavier
  • glutIgnoreKeyRepeat(true); //2008/04/27: Désactive la répétition auto
  • glutKeyboardFunc (keyboard); //Clavier (PRESS)
  • glutKeyboardUpFunc (keyboardUP); //2008/04/25: Touche clavier relâcher
  • glutSpecialFunc (special); //Touche spécial (PRESS)
  • glutSpecialUpFunc (specialUP); //2008/04/25: Touche spécial relâcher
  • //Gestion de la souris
  • glutMouseFunc (mouse); //Gestion des boutons de la souris
  • glutMotionFunc (vue); //2008/04/15: Si un bouton de la souris est appuyer
  • glutPassiveMotionFunc (vue); //S'il y a aucun bouton de la souris d'appuyer
  • glutIdleFunc (attente);
  • glutSetCursor(GLUT_CURSOR_NONE); //GLUT_CURSOR_CROSSHAIR | GLUT_CURSOR_NONE
  • glutMainLoop();
  • ini.DelTexture(); //2008/05/05: Suprime les textures
  • delFmod(); //2008/05/05: Suprime les musiques et ferme FMOD
  • return 0;
  • }
  • /*******************************************************************************
  • Initialisation de FMOD et des sons
  • *******************************************************************************/
  • GLvoid initFmod ()//2008/05/05: Date de création
  • {
  • FSOUND_Init(44100, 32, 0);
  • //Son au commencement
  • backgrnd = FMUSIC_LoadSong("./Data/Son/backgrnd.mid");//Charger un MIDI
  • if (backgrnd == NULL)
  • MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/backgrnd.mid","ERROR",MB_OK|MB_ICONEXCLAMATION);
  • else
  • {
  • FMUSIC_PlaySong(backgrnd); //Jouer un MIDI
  • FMUSIC_SetLooping(backgrnd, 1); //Répéter un MIDI
  • FMUSIC_SetMasterVolume(backgrnd, 200); //Modifier le volume (0 à 256)
  • }
  • tir = FSOUND_Sample_Load(FSOUND_FREE, "./Data/Son/shot.wav", 0, 0, 0);
  • if (tir == NULL)
  • MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/shot.wav","ERROR",MB_OK|MB_ICONEXCLAMATION);
  • pla = FSOUND_Sample_Load(FSOUND_FREE, "./Data/Son/pla.wav", 0, 0, 0);
  • if (tir == NULL)
  • MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/pla.wav","ERROR",MB_OK|MB_ICONEXCLAMATION);
  • }
  • GLvoid delFmod ()//2008/05/05: Date de création
  • {
  • FSOUND_Sample_Free(tir); //Libérer le son de la mémoire
  • FSOUND_Sample_Free(pla);
  • FMUSIC_FreeSong(backgrnd); //Libérer la musique MIDI
  • FSOUND_Close(); //Fermer FMOD
  • }
  • /*******************************************************************************
  • Gestion du clavier
  • *******************************************************************************/
  • GLvoid keyboard(GLubyte key, GLint sourisX, GLint sourisY)
  • {
  • switch (key)
  • {
  • //Changement de vue
  • case 'v':glutDisplayFunc(display1); break;
  • case 'V':glutDisplayFunc(display); break;
  • //Audio pour tir
  • case 'z':FSOUND_PlaySound(FSOUND_FREE, tir);break;//PlaySound("shot.wav",NULL,SND_ASYNC);
  • case 'x':FSOUND_PlaySound(FSOUND_FREE, pla);break;//PlaySound("pla.wav",NULL,SND_ASYNC);
  • //2008/04/07: Mode d'affichage
  • case 'b':ini.Brouillard(); break;//Brouillard
  • case 'B':glDisable(GL_FOG); break;
  • case 'n':ini.initNight(); break;//Faire tomber la nuit
  • case 'N':glDisable(GL_LIGHTING);break;
  • //case 'm':ini.initSpot();break; //Lumiere spot
  • //case 'M':glDisable(GL_LIGHTING);break;
  • //2008/05/11:Change l'état de l'affichage du texte
  • case '\t':affText=!affText;break;
  • //Utilisez les W-S-A-D pour les mouvements.
  • case 'w':case 'W':fpscam.avance(); break; //UP
  • case 's':case 'S':fpscam.recule(); break; //DOWN
  • case 'a':case 'A':fpscam.gauche(); break; //LEFT
  • case 'd':case 'D':fpscam.droite(); break; //RIGHT
  • case ' ':fpscam.saut();break; //JUMP
  • //2008/05/05: Pour mettre en pause la musique de fond
  • case 'p':case 'P':
  • if (FMUSIC_GetPaused(backgrnd)) // Si la chanson est en pause
  • FMUSIC_SetPaused(backgrnd, 0); // On enlève la pause
  • else // Sinon, elle est en cours de lecture
  • FMUSIC_SetPaused(backgrnd, 1); // On active la pause
  • break;
  • //ESCAPE pour quitter
  • case 27:if (pleinEcran==false)
  • glutDestroyWindow(nWindowID);//Destruction de la fenêtre
  • exit (0);break;
  • default:break;
  • }
  • glutPostRedisplay();
  • }
  • //2008/04/25: Quand la toucheUT_UP est relaché, on arrête le mouvement.
  • GLvoid keyboardUP (GLubyte key, GLint sourisX, GLint sourisY)
  • {
  • switch (key)
  • {
  • //Utilisez les UT_UP W-S-A-D pour les mouvements.
  • case 'w':case 'W':fpscam.avanceUP(); break; //UP
  • case 's':case 'S':fpscam.reculeUP(); break; //DOWN
  • case 'a':case 'A':fpscam.gaucheUP(); break; //LEFT
  • case 'd':case 'D':fpscam.droiteUP(); break; //RIGHT
  • default:break;
  • }
  • glutPostRedisplay();
  • }
  • //2008/04/25: Date de modification
  • GLvoid special(GLint key,GLint sourisX, GLint sourisY)
  • {
  • switch (key)
  • {
  • case GLUT_KEY_UP :fpscam.avance(); break;//UP
  • case GLUT_KEY_DOWN :fpscam.recule(); break;//DOWN
  • case GLUT_KEY_LEFT :fpscam.gauche(); break;//LEFT
  • case GLUT_KEY_RIGHT:fpscam.droite(); break;//RIGHT
  • case GLUT_KEY_F1:glutFullScreen();break;
  • default:break;
  • }
  • glutPostRedisplay();
  • }
  • GLvoid specialUP(GLint key,GLint sourisX, GLint sourisY)
  • {
  • switch (key)
  • {
  • case GLUT_KEY_UP :fpscam.avanceUP(); break;//UP
  • case GLUT_KEY_DOWN :fpscam.reculeUP(); break;//DOWN
  • case GLUT_KEY_LEFT :fpscam.gaucheUP(); break;//LEFT
  • case GLUT_KEY_RIGHT:fpscam.droiteUP(); break;//RIGHT
  • default:break;
  • }
  • glutPostRedisplay();
  • }
  • /*******************************************************************************
  • Gestion de , int sourisX, int sourisYla souris
  • *******************************************************************************/
  • GLvoid mouse (GLint button, GLint state, GLint sourisX, GLint sourisY)
  • {
  • //Si l'on appuie sur le bouton gauche
  • if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN )
  • FSOUND_PlaySound(FSOUND_FREE, tir);//PlaySound("shot.wav",NULL,SND_ASYNC);
  • //2008/04/25: Zoom si le bouton droit de la souris est appuyer
  • if ( state == GLUT_UP && button == GLUT_RIGHT_BUTTON)
  • zoom=!zoom;
  • else
  • if ( state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON)
  • zoom=!zoom;
  • vue (sourisX,sourisY);
  • }
  • GLvoid vue (GLint sourisX, GLint sourisY)
  • {
  • GLdouble dx=sourisX-width/2;
  • GLdouble dy=sourisY-height/2;
  • fpscam.calculMouvementS(dx,dy);
  • }
  • /*******************************************************************************
  • void attente(void) ;
  • - Fonction appelée lorsque l'application fait rien.
  • *******************************************************************************/
  • GLvoid attente(GLvoid)
  • {
  • //2008/04/16: Centrer la souris
  • glutWarpPointer(width/2,height/2) ;
  • //2008/04/24: Zoom
  • GLboolean reshape=false;
  • if (zoom)
  • {
  • ini.reshape(width,height,25.0f);
  • reshape=true;
  • }
  • else
  • //2008/04/28: Pour ne pas faire de reshape à chaque fois
  • if (reshape=true)
  • {
  • ini.reshape(width,height,45.0f);
  • reshape=false;
  • }
  • //2008/04/28: Calculer un délais
  • current_time = glutGet(GLUT_ELAPSED_TIME);
  • double elapsed_time = current_time - last_time;
  • last_time = current_time;
  • fpscam.calculMouvement (elapsed_time);
  • glutPostRedisplay();//Pour rafraichir l'affichage
  • }
  • /*******************************************************************************
  • void display(void);
  • *******************************************************************************/
  • GLvoid display(GLvoid)//VUE FPS
  • {
  • glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • glColor3f (1.0, 1.0, 1.0);
  • glLoadIdentity();
  • //Position et direction de la camera
  • fpscam.fixeCam();//gluLookAt
  • ini.ciel ();
  • ini.theDisplay ();
  • if(affText) {
  • ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.96 );
  • ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.93 );
  • }
  • ini.drawT("+", GLUT_BITMAP_HELVETICA_18, 1.0f, 1.0f, 1.0f, 0.5, 0.5 );//2008/05/11: Viseur
  • glutSwapBuffers();
  • }
  • /*******************************************************************************
  • void display1(void);
  • *******************************************************************************/
  • GLvoid display1(GLvoid)// VUE DU CIEL
  • {
  • glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • glColor3f (1.0, 1.0, 1.0);
  • glLoadIdentity();
  • gluLookAt (0.0, 95.0, 150.0f, 0.0, 0.0,40.0, 0.0, 1.0, 0.0);
  • ini.theDisplay();
  • if(affText) {
  • ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.96 );
  • ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.935 );
  • }
  • glutSwapBuffers();
  • }
/*
    Auteur: Jean-Sébastien Bilodeau
    Projet: Demo OpenGL
    Date:   2008/05/11

    - Les info sont dans le fichier readme.txt
    - Version initiale du code:
        Auteur: Kled
        Titre:  DOOM LIKE EN OPENGL
        Lien:   http://www.cppfrance.com/code.aspx?ID=35513
*/

#ifdef WIN32
    #include <windows.h>
#endif
#include <GL/openglut_std.h>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
using namespace std ;

#include <fmod/fmod.h>//2008/05/04:FMOD v375

#include "Affichage.h"
#include "camera.h"

//Variables générales
GLint nWindowID;
GLboolean pleinEcran=false;
GLint lecran=800,hecran=600;
GLint width = glutGet(GLUT_SCREEN_WIDTH);     //Largeur (pixels)
GLint height= glutGet(GLUT_SCREEN_HEIGHT);    //Hauteur
GLdouble  x=0, y=5, z=92;                     //Position de la camera
GLboolean zoom=false,affText=false;
GLdouble current_time,last_time;

FSOUND_SAMPLE *tir = NULL;
FSOUND_SAMPLE *pla = NULL;
FMUSIC_MODULE *backgrnd = NULL;

//Déclare les objets
Affichage ini;
Camera  fpscam;

//Prototypes des fonctions
GLvoid initFmod ();//2008/05/04: Initialise FMOD
GLvoid delFmod  ();//2008/05/04: Fermeture FMOD

GLvoid keyboard   (GLubyte key, GLint sourisX, GLint sourisY);
GLvoid keyboardUP (GLubyte key, GLint sourisX, GLint sourisY);
GLvoid special    (GLint key,   GLint sourisX, GLint sourisY);
GLvoid specialUP  (GLint key,   GLint sourisX, GLint sourisY);

GLvoid mouse (GLint button, GLint state, GLint sourisX, GLint sourisY);
GLvoid vue   (GLint sourisX, GLint sourisY);
GLvoid attente(GLvoid);

GLvoid display(GLvoid);
GLvoid display1(GLvoid);
GLvoid theDisplay ();

//Convertir n'importe quel type d'objet en string
template<typename T>
string to_string( const T & Value )
{
    //Utiliser un flux de sortie pour créer la chaîne
    ostringstream oss;
    //Écrire la valeur dans le flux
    oss << Value;
    //Renvoyer une string
    return oss.str();
}

//Cette fonction utiliser dans glut ne marche pas directement.
GLvoid reshape (GLint w, GLint h){ini.reshape(w,h,45.0f);}
/*******************************************************************************
                    int main(int argc, char** argv) ;
*******************************************************************************/
GLint main (GLint argc, char* argv[])
{
    string resoPleinEcran;
    GLint rep;

	rep = MessageBox(NULL, "Voulez-vous entrer en mode plein écran?", "Plein écran ?",
						MB_ICONQUESTION | MB_YESNO);
	if(rep==IDYES) pleinEcran = true;

    //Initialiser OpenGL
    glutInit(&argc, argv);
    glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);

    //Construire la fenêtre
    if (pleinEcran==true)
    {
        //2008/04/06: Récupérer la résolution
        resoPleinEcran  =to_string(width);
        resoPleinEcran +='x';
        resoPleinEcran +=to_string(height);
        resoPleinEcran +=":32";//32bpp Mode

        //glutGameModeString() n'acepte pas de string
        size_t size   = resoPleinEcran.size() + 1;
        char * buffer = new char[ size ];
        strncpy( buffer, resoPleinEcran.c_str(),size );

		glutGameModeString(buffer);
		if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE))
			glutEnterGameMode();// Mode plein écran
    }
    else
    {
		glutInitWindowSize(lecran, hecran);
		glutInitWindowPosition (width/2-lecran/2, 100);
		nWindowID=glutCreateWindow ("Demo OpenGL");//Nom de la fenêtre

        width=lecran;//2008/04/24: Changer les valeurs de la résolution
        height=hecran;
	}

    ini.init1 ();               //Blending
    ini.InitTexture();          //Fonction utilisée pour charger les textures
    ini.init2();                //Blending
    fpscam.initCam(x,y,z);      //Initialiser la camera
    initFmod ();                //Initialisation de FMOD

    glutDisplayFunc(display);   //Monde normal
    glutReshapeFunc(reshape);

    //Gestion du clavier
    glutIgnoreKeyRepeat(true);       //2008/04/27: Désactive la répétition auto
    glutKeyboardFunc   (keyboard);   //Clavier (PRESS)
    glutKeyboardUpFunc (keyboardUP); //2008/04/25: Touche clavier relâcher
    glutSpecialFunc    (special);    //Touche spécial (PRESS)
    glutSpecialUpFunc  (specialUP);  //2008/04/25: Touche spécial relâcher

    //Gestion de la souris
    glutMouseFunc      (mouse);      //Gestion des boutons de la souris
    glutMotionFunc     (vue);        //2008/04/15: Si un bouton de la souris est appuyer
    glutPassiveMotionFunc (vue);     //S'il y a aucun bouton de la souris d'appuyer

    glutIdleFunc (attente);
    glutSetCursor(GLUT_CURSOR_NONE); //GLUT_CURSOR_CROSSHAIR | GLUT_CURSOR_NONE

    glutMainLoop();
    ini.DelTexture(); //2008/05/05: Suprime les textures
    delFmod();        //2008/05/05: Suprime les musiques et ferme FMOD
    return 0;
}
/*******************************************************************************
                    Initialisation de FMOD et des sons
*******************************************************************************/
GLvoid initFmod ()//2008/05/05: Date de création
{
    FSOUND_Init(44100, 32, 0);

    //Son au commencement
    backgrnd = FMUSIC_LoadSong("./Data/Son/backgrnd.mid");//Charger un MIDI
    if (backgrnd == NULL)
        MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/backgrnd.mid","ERROR",MB_OK|MB_ICONEXCLAMATION);
    else
    {
        FMUSIC_PlaySong(backgrnd);              //Jouer un MIDI
        FMUSIC_SetLooping(backgrnd, 1);         //Répéter un MIDI
        FMUSIC_SetMasterVolume(backgrnd, 200);  //Modifier le volume (0 à 256)
    }

    tir = FSOUND_Sample_Load(FSOUND_FREE, "./Data/Son/shot.wav", 0, 0, 0);
    if (tir == NULL)
        MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/shot.wav","ERROR",MB_OK|MB_ICONEXCLAMATION);

    pla = FSOUND_Sample_Load(FSOUND_FREE, "./Data/Son/pla.wav", 0, 0, 0);
    if (tir == NULL)
        MessageBox(NULL,"Erreur chargement du son:\n./Data/Son/pla.wav","ERROR",MB_OK|MB_ICONEXCLAMATION);
}
GLvoid delFmod ()//2008/05/05: Date de création
{
    FSOUND_Sample_Free(tir);    //Libérer le son de la mémoire
    FSOUND_Sample_Free(pla);
    FMUSIC_FreeSong(backgrnd);  //Libérer la musique MIDI
    FSOUND_Close();             //Fermer FMOD
}
/*******************************************************************************
                           Gestion du clavier
*******************************************************************************/
GLvoid keyboard(GLubyte key, GLint sourisX, GLint sourisY)
{
    switch (key)
    {
        //Changement de vue
        case 'v':glutDisplayFunc(display1); break;
        case 'V':glutDisplayFunc(display);  break;

        //Audio pour tir
        case 'z':FSOUND_PlaySound(FSOUND_FREE, tir);break;//PlaySound("shot.wav",NULL,SND_ASYNC);
        case 'x':FSOUND_PlaySound(FSOUND_FREE, pla);break;//PlaySound("pla.wav",NULL,SND_ASYNC);

        //2008/04/07: Mode d'affichage
        case 'b':ini.Brouillard();  break;//Brouillard
        case 'B':glDisable(GL_FOG); break;

        case 'n':ini.initNight(); break;//Faire tomber la nuit
        case 'N':glDisable(GL_LIGHTING);break;

        //case 'm':ini.initSpot();break; //Lumiere spot
        //case 'M':glDisable(GL_LIGHTING);break;

        //2008/05/11:Change l'état de l'affichage du texte
        case '\t':affText=!affText;break;

        //Utilisez les W-S-A-D pour les mouvements.
        case 'w':case 'W':fpscam.avance(); break; //UP
        case 's':case 'S':fpscam.recule(); break; //DOWN
        case 'a':case 'A':fpscam.gauche(); break; //LEFT
        case 'd':case 'D':fpscam.droite(); break; //RIGHT

        case ' ':fpscam.saut();break;             //JUMP

        //2008/05/05: Pour mettre en pause la musique de fond
        case 'p':case 'P':
            if (FMUSIC_GetPaused(backgrnd)) // Si la chanson est en pause
                FMUSIC_SetPaused(backgrnd, 0); // On enlève la pause
            else // Sinon, elle est en cours de lecture
                FMUSIC_SetPaused(backgrnd, 1); // On active la pause
            break;

        //ESCAPE pour quitter
        case 27:if (pleinEcran==false)
                    glutDestroyWindow(nWindowID);//Destruction de la fenêtre
                exit (0);break;

        default:break;
    }
    glutPostRedisplay();
}
//2008/04/25: Quand la toucheUT_UP  est relaché, on arrête le mouvement.
GLvoid keyboardUP (GLubyte key, GLint sourisX, GLint sourisY)
{
    switch (key)
    {
        //Utilisez les UT_UP W-S-A-D pour les mouvements.
        case 'w':case 'W':fpscam.avanceUP(); break; //UP
        case 's':case 'S':fpscam.reculeUP(); break; //DOWN
        case 'a':case 'A':fpscam.gaucheUP(); break; //LEFT
        case 'd':case 'D':fpscam.droiteUP(); break; //RIGHT

        default:break;
    }
    glutPostRedisplay();
}
//2008/04/25: Date de modification
GLvoid special(GLint key,GLint sourisX, GLint sourisY)
{
     switch (key)
     {
         case GLUT_KEY_UP   :fpscam.avance();  break;//UP
         case GLUT_KEY_DOWN :fpscam.recule();  break;//DOWN
         case GLUT_KEY_LEFT :fpscam.gauche();  break;//LEFT
         case GLUT_KEY_RIGHT:fpscam.droite();  break;//RIGHT

		 case GLUT_KEY_F1:glutFullScreen();break;

         default:break;
    }
    glutPostRedisplay();
}
GLvoid specialUP(GLint key,GLint sourisX, GLint sourisY)
{
     switch (key)
     {
         case GLUT_KEY_UP   :fpscam.avanceUP();  break;//UP
         case GLUT_KEY_DOWN :fpscam.reculeUP();  break;//DOWN
         case GLUT_KEY_LEFT :fpscam.gaucheUP();  break;//LEFT
         case GLUT_KEY_RIGHT:fpscam.droiteUP();  break;//RIGHT
         default:break;
    }
    glutPostRedisplay();
}
/*******************************************************************************
                           Gestion de , int sourisX, int sourisYla souris
*******************************************************************************/
GLvoid mouse (GLint button, GLint state, GLint sourisX, GLint sourisY)
{
    //Si l'on appuie sur le bouton gauche
    if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN )
        FSOUND_PlaySound(FSOUND_FREE, tir);//PlaySound("shot.wav",NULL,SND_ASYNC);

    //2008/04/25: Zoom si le bouton droit de la souris est appuyer
    if ( state == GLUT_UP && button == GLUT_RIGHT_BUTTON)
        zoom=!zoom;
    else
        if ( state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON)
            zoom=!zoom;

    vue (sourisX,sourisY);
}

GLvoid vue (GLint sourisX, GLint sourisY)
{
    GLdouble dx=sourisX-width/2;
    GLdouble dy=sourisY-height/2;

    fpscam.calculMouvementS(dx,dy);
}
/*******************************************************************************
                         void attente(void) ;
-   Fonction appelée lorsque l'application fait rien.
*******************************************************************************/
GLvoid attente(GLvoid)
{
    //2008/04/16: Centrer la souris
    glutWarpPointer(width/2,height/2) ;

    //2008/04/24: Zoom
    GLboolean reshape=false;
    if (zoom)
    {
        ini.reshape(width,height,25.0f);
        reshape=true;
    }
    else
        //2008/04/28: Pour ne pas faire de reshape à chaque fois
        if (reshape=true)
        {
            ini.reshape(width,height,45.0f);
            reshape=false;
        }

    //2008/04/28: Calculer un délais
    current_time = glutGet(GLUT_ELAPSED_TIME);
    double elapsed_time = current_time - last_time;
    last_time = current_time;

    fpscam.calculMouvement (elapsed_time);
	glutPostRedisplay();//Pour rafraichir l'affichage
}
/*******************************************************************************
                            void display(void);
*******************************************************************************/
GLvoid display(GLvoid)//VUE FPS
{
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor3f (1.0, 1.0, 1.0);
  glLoadIdentity();

  //Position et direction de la camera
  fpscam.fixeCam();//gluLookAt

  ini.ciel ();
  ini.theDisplay ();
  if(affText) {
    ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.96 );
    ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.93 );
  }

  ini.drawT("+", GLUT_BITMAP_HELVETICA_18, 1.0f, 1.0f, 1.0f, 0.5, 0.5 );//2008/05/11: Viseur
  glutSwapBuffers();
}
/*******************************************************************************
                          void display1(void);
*******************************************************************************/
GLvoid display1(GLvoid)// VUE DU CIEL
{
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor3f (1.0, 1.0, 1.0);
  glLoadIdentity();
  gluLookAt (0.0, 95.0, 150.0f, 0.0, 0.0,40.0, 0.0, 1.0, 0.0);

  ini.theDisplay();
  if(affText) {
    ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.96 );
    ini.drawT("Texte Texte Texte", GLUT_BITMAP_HELVETICA_12, 1.0f, 1.0f, 1.0f, 0.03, 0.935 );
  }

  glutSwapBuffers();
}

Conclusion

Pour finir, je remercie Kled pour la version initiale du code. Ce code n'est pas  un tutoriel. Donc, si vous ne connaissez pas une fonction d'une librairie, n'hésiter surtout pas pour faire une petite recherche sur Google.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

glut - openGL [ par loss ] Quels sont les fichiers necessaires pour utiliser glut(je compile avec VC++)?Ou est ce que je peux les telecharger?Merci d avance. Gestion de la souris OpenGL SANS GLUT [ par Xentor ] Comment faire pour connaitre le déplacement de la souris sans utiliser Glut ? (Savoir si on la déplace en haut, à gauche, etc...) J'ai fait plusieurs OpenGl, glut et Dev c++ 4 [ par fabienGL ] J'envoie un message car je passait au moin 3 heures sur le forums j'ai essayé tout ce ki à était di mé rien à faire ... j'utilise DEV C++ 4 et je sui OpenGl & glut avec Dev c++ 4 et WinXP [ par fabienGL ] J'envoie un message car je passait au moin 3 heures sur le forums j'ai essayé tout ce ki à était di mé rien à faire ... j'utilise DEV C++ 4 et j'ai Wi glut et opengl [ par MiTcH37 ] voila ce que j'ai lorsque je compile un prog avec du glut.h...C:\DOCUME~2\Mitch1\LOCALS~1\Temp\cc6Pbaaa.o(.text+0xcc):souris2.cpp: undefined reference opengl [ par MiTcH37 ] J'aimerais bien faire de l'opengl, mais ça marche pas... voila ce que j'ai lorsque je compile un prog avec du glut.h...C:\DOCUME~2\Mitch1\LOCALS~1\Tem devc++ [ par MiTcH37 ] qqun se sert de devc++ ?J'aimerais bien faire de l'opengl, mais ça marche pas... &gt; &gt; &gt; &gt; voila ce que j'ai lorsque je compile un prog avec Pb Dev C++ 5 et OpenGl [ par guillaume21 ] J'ai installé glut avec Dev c++ 5. J'ai mis glut.h dans include, glut32.lib dans lib et le dll dans system32 (et mem ds lib lol).J'ai aussi ajouté les erreur de compile d une source opengl utilisant glut [ par kribler ] KR!Bl3Rg lerreur suivante qui s afffiche :LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16quelqun pourrai maidermerci d OpenGL : question de débutant ! [ par Amanobuo ] B'jours ! Voici une question simple mais capital : En openGL, les fonctions comme par exemple gluLookAt() ont divers parametre, il suffit de rentrer d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,842 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.