Soyez le premier à donner votre avis sur cette source.
Snippet vu 10 448 fois - Téléchargée 29 fois
///////////*Les includes*///////////// #include <windows.h> #include <gl/gl.h> #include <gl/glut.h> #include "glTexFont.h" // Bibl. pour afficher du texte ///////////*////////////*///////////// ///////////*L/L de l'app.*//////////// #define WIDTH 640 // Défini la largeur de la fenêtre #define HEIGHT 480 // Défini la longueur de la fenêtre ///////////*//////////////*//////////// ///////////*Fonction*////////////////// int a=1, b=1, c=1, d=1, e=1, f=1; // Variable pour les faces/touches void clavier(unsigned char key, int x, int y); // La fonction pour les touches void Display(); void Reshape(int w,int h); void Init(); ///////////*////////*////////////////// //////////////////////////////////////////////////////////////////////////// int main( int argc, char *argv[ ]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH); glutInitWindowSize(WIDTH,HEIGHT); // Met la fenêtre en 640/480(voir plus haut) glutInitWindowPosition(50,50); // Position de demarrage de la fenêtre glutCreateWindow("Afficher/effacer les faces d'un cube 3D en OpenGl"); // Nom de la fenêtre fontLoad ("textures/font.tga"); // Charge le fichier "font.tga" dans le dossier "textures" pour le texte Init(); glutDisplayFunc(Display); glutKeyboardFunc(clavier); // Clavier glutReshapeFunc(Reshape); glutMainLoop(); return 0; } void Init() { glEnable(GL_DEPTH_TEST); } void Display() // Fonction display { glClearColor(0,0,0,0); // Selectionne la couleur noire (qui est celle par défaut) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Affiche le texte en bas à gauche fontColor (2.5, 0.7, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 5, "Tuto par Misugi"); // Affiche : Tuto par misugi fontColor (0.7, 0.7, 2.5); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 20, "%d,%d", WIDTH, HEIGHT); // Affiche : 640.480 /////////////////////////////////// // Affiche le texte en haut à gauche fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 465, "Face 1 = touche num.1"); // Affiche : Face 1 = touche num.1 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 450, "Face 2 = touche num.2"); // Affiche : Face 2 = touche num.2 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 435, "Face 3 = touche num.3"); // Affiche : Face 3 = touche num.3 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 420, "Face 4 = touche num.4"); // Affiche : Face 4 = touche num.4 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 405, "Face 5 = touche num.5"); // Affiche : Face 5 = touche num.5 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 390, "Face 6 = touche num.6"); // Affiche : Face 6 = touche num.6 fontColor (0.7, 2.5, 0.7); // Couleur du texte en RGB fontSize (10); fontDrawString (5, 375, "Touche num.7 = effacer les faces"); // Affiche : Face 6 = touche num.6 ///////////////////////////////////// glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(4,2.5,4,0,0,0,0,1,0); glEnd(); glFlush(); } void Reshape(int w, int h) // Fonction Reshape { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); // Choisit la matrice de projection glLoadIdentity(); gluPerspective(45.0,(float) w/h,1.,10.); } void Face1() // Affice la Face 1 { glBegin(GL_QUADS); // glColor3d pour la couleur de face glColor3d(1,0,0); // 0,0,0 = R.G.B = Red(rouge),Green(vert),Blue(bleue), ici la couleur est rouge glVertex3i(1,1,1); glVertex3i(1,-1,1); glVertex3i(-1,-1,1); glVertex3i(-1,1,1); a++; // Augmente d'une unité la variable "a" glEnd(); glFlush(); } void Face2() // Affice la Face 2 { glBegin(GL_QUADS); glColor3d(0,1,0); // Couleur verte glVertex3i(1,1,-1); glVertex3i(1,-1,-1); glVertex3i(-1,-1,-1); glVertex3i(-1,1,-1); b++; // Augmente d'une unité la variable "b" glEnd(); glFlush(); } void Face3() // Affice la Face 3 { glBegin(GL_QUADS); glColor3d(0,0,1); // Couleur bleue glVertex3i(1,1,1); glVertex3i(1,-1,1); glVertex3i(1,-1,-1); glVertex3i(1,1,-1); c++; // Augmente d'une unité la variable "c" glEnd(); glFlush(); } void Face4() // Affice la Face 4 { glBegin(GL_QUADS); glColor3d(0,1,1); // Couleur verte et bleue glVertex3i(-1,1,1); glVertex3i(-1,-1,1); glVertex3i(-1,-1,-1); glVertex3i(-1,1,-1); d++; // Augmente d'une unité la variable "d" glEnd(); glFlush(); } void Face5() // Affice la Face 5 { glBegin(GL_QUADS); glColor3d(1,1,0); // Couleur rouge et verte glVertex3i(-1,1,-1); glVertex3i(-1,1,1); glVertex3i(1,1,1); glVertex3i(1,1,-1); e++; // Augmente d'une unité la variable "e" glEnd(); glFlush(); } void Face6() // Affice la Face 6 { glBegin(GL_QUADS); glColor3d(1,0,1); // Couleur rouge et bleue glVertex3i(-1,-1,-1); glVertex3i(-1,-1,1); glVertex3i(1,-1,1); glVertex3i(1,-1,-1); f++; // Augmente d'une unité la variable "f" glEnd(); glFlush(); } void UnFaceAll() // Fonction pour effacer les faces { glClearColor(0,0,0,0); // Selectionne la couleur noire (qui est celle par défaut) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Display(); // Apelle la fonction Display() pour effacer les faces par le noir a--; // Diminue d'une unité la variable "a" b--; // Diminue d'une unité la variable "b" c--; // Diminue d'une unité la variable "c" d--; // Diminue d'une unité la variable "d" e--; // Diminue d'une unité la variable "e" f--; // Diminue d'une unité la variable "f" } void clavier(unsigned char key, int x, int y) // Fonction touche clavier { switch(key) { case 49: if(a=1) Face1(); // 49 = touche num 1, si "a" = 1 alors effectuer l'action Face1 break; case 50: if(b=1) Face2(); // 50 = touche num 2, si "b" = 1 alors effectuer l'action Face2 break; case 51: if(c=1) Face3(); // 51 = touche num 3, si "c" = 1 alors effectuer l'action Face3 break; case 52: if(d=1) Face4(); // 52 = touche num 4, si "d" = 1 alors effectuer l'action Face4 break; case 53: if(e=1) Face5(); // 53 = touche num 5, si "e" = 1 alors effectuer l'action Face5 break; case 54: if(f=1) Face6(); // 54 = touche num 6, si "f" = 1 alors effectuer l'action Face6 break; case 55: if(a=2, b=2, c=2, d=2, e=2, f=2) UnFaceAll(); // 55 = touche num 7, si "a/b/c/d/e/f" = 2 alors effectuer l'action UnFaceAll break; } } ////////////////////////////////////////////////////////////////
je vais faire plusieures remarques, les prends pas mal c'est juste pour t'aider... :)
la premiere c'est que tu n'utilise pas la fonction display pour l'affichage des faces.
par consequent si tu redimensionne ta fenetre ou si tu active une autre fenetre windows, quand tu reviens sur ton programme on ne voit plus les faces.
ce que je te conseille:
void Display()
{
...
//affichage des ecritures (comme tu as deja fait)
...
gluLookAt();
if(a==1)Face1();
if(b==1)Face2();
...
}
t'as plus besoins du glFlush.
pour les "case 55:" tu peux faire un "case '7':", c'est quand meme plus pratique
Et puis on passe aux choses serieuse...
les a,b,c,...
ils servent a rien !!!
ton test if(a=1) n'en est pas un.
quelque soit la valeur de a if retourne 1;
pour tester si a vaut 1; faut ecrire if(a==1)
a vrai dire c'est un miracle si ton programme marche :-)
pour verifier met n'importe quoi par exemple: if(a=125) ca va encore marcher
voila bon courage
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.