1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
/////////////////////////////////////////////////////
/// Main
/////////////////////////////////////////////////////
/// - Fichier principale du projet
/////////////////////////////////////////////////////
/// - boucle principale du projet
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/// include
/////////////////////////////////////////////////////
#include "Main.h"
/////////////////////////////////////////////////////
/// declaration
/////////////////////////////////////////////////////
// affichage
void affichage () ;
void reajusterTailleEcran (int largeur , int hauteur) ;
void initOpenGL (int largeur, int hauteur) ;
void initSDL(const char* titre, int largeur, int hauteur, int profondeur, bool plein_ecran);
/////////////////////////////////////////////////////
/// variables globales
/////////////////////////////////////////////////////
// Surface de l'ecran
SDL_Surface* fenetre;
/////////////////////////////////////////////////////
/// Fonction principale
/////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
// Toujours initialiser SDL avant OpenGL
initSDL("essai 0.1", 640, 480, 16, false);
initOpenGL(640,480);
// Reajuste la taille de la fenetre
reajusterTailleEcran (LARGEUR,HAUTEUR);
// Boucle d'evenement
bool quit = false;
while(!quit)
{
SDL_Event event;
if(SDL_PollEvent(&event))
{
switch(event.type)
{
// quitte l'application
case SDL_QUIT:
quit = true;
break;
// Ajuste le rapport entre les objets OpenGL et la taille de la fenetre
case SDL_VIDEORESIZE:
reajusterTailleEcran (event.resize.w,event.resize.h);
}
}
// affichage
affichage();
}
return 0;
}
void affichage ()
{
/// debut d'un cycle
// preparation de l'affichage
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// place la couleur a blanc
glColor3f ( 1.0f , 1.0f , 1.0f ) ;
// debut du dessin
glEnable(GL_TEXTURE_2D) ;
glBegin ( GL_QUADS ) ;
glColor3d(1.,0.,0.);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
glColor3d(0.,1.,0.);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(0.,0.,1.);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
glColor3d(0.,1.,1.);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(1.,1.,0.);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
glColor3d(1.,0.,1.);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glEnd();
/// fin d'un cycle
// fin du dessin
//glDisable(GL_TEXTURE_2D);
// swap
SDL_GL_SwapBuffers();
}
void reajusterTailleEcran (int largeur, int hauteur)
{
// indique la taille de la fenetre de dessin (coord depart <-> coord arrive)
glViewport(0,0,largeur,hauteur);
// passe en matrix de PROJECTION
glMatrixMode(GL_PROJECTION);
// vide la matrice modifiable et prepare a la projection
glLoadIdentity();
// specifie l'angle de champs de vision
gluPerspective(45.0, (float) largeur/hauteur, 1.0, 10.0);
// passe en matrix de MODELISATION - VISUALISATION
glMatrixMode(GL_MODELVIEW);
// vide la matrice modifiable et prepare a la modelisation - visualisation
glLoadIdentity();
}
void initOpenGL(int largeur, int hauteur)
{
// vide le tampon chromatique (arriere plan <- noir)
glClearColor(0.0,0.0,0.0,0.0);
// vide le tampon chromatique
glClearDepth(1.0);
// on active le blending
glEnable(GL_BLEND) ;
//glBlendFunc(GL_SRC_ALPHA,GL_ONE) ;
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
// active la projection
glMatrixMode(GL_PROJECTION ) ;
glLoadIdentity() ;
gluOrtho2D ( 0.0 , (GLdouble)largeur , 0.0 , (GLdouble)hauteur ) ;
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Définit la magnification
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Définit la minification
glMatrixMode(GL_MODELVIEW);
}
void initSDL (const char* titre, int largeur, int hauteur, int profondeur, bool plein_ecran)
{
int flags = 0 ;
//flags = flags | SDL_GL_DOUBLEBUFFER | SDL_RESIZABLE | SDL_SWSURFACE ;
flags = flags | SDL_OPENGL | SDL_RESIZABLE | SDL_SWSURFACE ;
// initialise la partie video de SDL
SDL_Init(SDL_INIT_VIDEO);
// Ferme SDL en sortie de programme
atexit(SDL_Quit);
// titre de la fenetre
SDL_WM_SetCaption(titre, titre);
// Indique a OpenGL que le double buffering est active
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
// Indique la taille du buffer de profondeur
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, profondeur);
// indique si le flag PLEIN ECRAN est activé
if ( plein_ecran )
flags = flags | SDL_FULLSCREEN ;
// initialisation du mode video de SDL
fenetre = SDL_SetVideoMode(largeur,hauteur,profondeur, flags) ;
}
void stopSDL()
{
SDL_Quit () ;
} |
Partager