begin process at 2012 02 13 00:47:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > AFFICHER/EFFACER LES FACES D'UN CUBE 3D EN OPENGL AVEC LE CLAVIER ET GLUT.

AFFICHER/EFFACER LES FACES D'UN CUBE 3D EN OPENGL AVEC LE CLAVIER ET GLUT.


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Classé sous :cube, afficher, cacher, 3d, clavier Niveau :Débutant Date de création :11/05/2006 Date de mise à jour :11/05/2006 20:15:52 Vu :7 409

Auteur : krokro6

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

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


 Historique

11 mai 2006 20:15:52 :
Ajout de la source.

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture CLASSE AVEC OPENGL - OBJETS 3D ET ANIMATIONS par rasta63
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip CUBE 3D GLUT32 VC++ ET DEVC++ par bobby03

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip Source avec une capture VISUALISATION DES IMAGES EN 3D SANS OPENGL par Pistol_Pete
Source avec Zip Source avec une capture RUBIX CUBE EN 3D AVEC GESTION DE L'ECLAIRAGE par Pistol_Pete

Commentaires et avis

Commentaire de cppdupdup34 le 13/05/2006 15:28:07

Salut kroko6.
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

Commentaire de krokro6 le 13/05/2006 17:39:48

Ok, Merci de tes conseilles, pour le '=', effectivement, je n'y avais pas fais attention ^^".

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

cube 3D en C [ par jdespe ] Comment faire pour créer un cube en 3D en C et le faire pivoter, dans un code assez simple?Merci de la réponse. Menu & Raccourci clavier [ par larion ] Bonjour,Dans certain menu de windows, il est affiché "Alt+F4" à côté de "X Fermer".Comment fait-on afficher ce raccourci dans un menu ?Comment fait-on Afficher puis cacher un treeview [ par abdoulax ] Bon voil&#224;, c tout simple ms je trouve poa !! Comment afficher un treeview puis le cacher ? J'arrive afficher le treeview avec cette instruction PB remplissage 3D [ par MangaII ] Hello tout le monde !J'ai un petit soucis ! j'ai un cube (3D), avec des points a l'intérieur (BCP, environ 10000). Et ces points sont répartie dans un entree clavier a cacher [ par qsdfgh ] bonjour, je vuex faire un prog ou il faut entrer un mot de passe mais je ne sais pas comment cacher les entr&#233;es par des etoiles (ou autre chos Afficher des points en 3D [ par Fredchkek ] Bonjour,Je suis &#224; la recherche d'un bout de code (VC++) tr&#232;s simple qui permettrai d'afficher un point (un pixel ou un cercle)&nbsp;dans un j'arrive pas à saisir les lettres au clavier et les afficher sous la SDL [ par oumal ] si vous pouvez ,mes amis, m'aider je serai trés reconnaissante,en tout cas je sais bien que vous n'hésitez pas à rendre service à ceux qui en ont beso Cube 3D + couleur + lumiere [ par jojomillenium ] Bonjour, J'ai fait un cube en 3D unicolor, mon probleme c'est qu'en perspective je ne distingue pas les arretes (vous voyez ce que je veux dire?) J'ai touché tapée par clavier [ par sidalilo ] bonjour je veux afficher une touché tapée par le clavier en c++ builder 6 j'ai eu un code qui fait ca mais j'ai su pas comment l'utiliser voila ce cod Connaitre le statut de window(cacher ou afficher) [ par gamemonde ] bon bien le titre parle de lui meme j'utilise ShowWindow(hWndtype);mais comment connaitre si ma fenetre est soit cacher afficher minimiser agrandit...


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales