Accueil > > > DEMO OPENGL
DEMO OPENGL
Information sur la source
Description
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.
Sources de la même categorie
Commentaires et avis
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... > > > > 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
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|