Afficher/effacer les faces d'un cube 3d en opengl avec le clavier et glut.

Contenu du snippet

Cette source permet d'afficher/effacer les faces d'un cube 3D en utilisant les touches du clavier.

Le zip pour les lib/source/include et l'exe : http://ultimedbz.free.fr/3D.zip

Source / Exemple :


///////////*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;
	}
}
////////////////////////////////////////////////////////////////

Conclusion :


Vala tout dans le zip c'est ma première source.La librairie "glTexFont.lib" et l'include pour les textes sont ajoutés.

A voir également

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.