Accueil > > > TUTORIAL OPENGL ET GLUT EN C
TUTORIAL OPENGL ET GLUT EN C
Information sur la source
Description
c'est un petit code commenté au maximum faisant tourner un carré blanc lors du clic gauche de la souris. J'espère qu'il permettra a des gens de débuter dans OpenGL.
Source
- /*
- Name: tutorialAnimation
- Author: Algex
- Date: 18/06/06 13:24
- Description: un petit tuto pour l'apprentissage d'OpenGL avec GLUT
- */
-
-
- /////////////////////////// LES INCLUDES ////////////////////////////////////////////////////////
- //
- //
- #include <stdio.h> //
- #include <stdlib.h> //
- //
- #include <windows.h>/*Microsoft Windows requiert l'insertion de windows.h juste avant gl.h et glu.h //
- car certaines macros utilisées en internes dans la version Microsoft Windows de gl.h et glu.h sont //
- définies dans windows.h*/ //
- //
- #include <GL/glut.h>//GL/glut.h contient déjà gl.h et glu.h mais bon c'est juste pour vous montrer //
- //
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
- //on crée une variable globale qui va nous servir pour la rotation
- static GLfloat spin = 0.0;
-
-
- ///////////////////////////// LES FONCIONS /////////////////////////////////////////////////////////
-
-
- //--Fonction d'initialisation d'OpenGL--//
- void init(void)
- {
- /*routine permettant de définir la couleur de vidage qui prend comme paramètre les composants
- rouge, vert, bleu de la couleur plus la valeur alpha. En l'occurence, nous mettons un fond noir non transparent*/
- glClearColor(0.0, 0.0, 0.0, 0.0);
-
- /*routine qui définit le modèle de degradé (lissé ou pas), le paramètre peut prendre la valeur GL_SMOOTH(valeur par défaut)
- ou GL_FLAT*/
- glShadeModel(GL_FLAT);
-
- }
-
- //--fonction d'affichage--//
- void display(void)
- {
- /*on attribut aux tampons spécifiés leur valeur de vidage en cours*/
- glClear(GL_COLOR_BUFFER_BIT);
-
- /*On fait descendre d'un niveau les matrices de tranformation*/
- glPushMatrix();
-
- /*on fait une rotation pour tout ce qui suit en utilisant le spin avec la fonction glRotate*(). la lettre f
- veut dire que le nombre sera un float*/
- glRotatef(spin, 0.0, 0.0, 1.0);
-
- /*on fait une couleur pour tout ce qui suit avec la fonction glColor*(). la nombre 3 veut dire
- que la fonction prendra 3 paramètre et la lettre f veut dire que ce sont des nombres float (les trois paramètres sont
- les composants rouge, vert et bleu de la couleur)*/
- glColor3f(1.0, 1.0, 1.0);
-
- /*on crée un rectangle*/
- glRectf(-25.0, -25.0, 25.0, 25.0);
-
- /*on rejette la matrice de la pile, ce qui en détruit le contenu (toutes les modifications apportées précédemment sont annulées)*/
- glPopMatrix();
-
- /*on échange les tampons grâce à GLUT (un tampons est affiché pendant que l'autre se forme ce qui permet
- d'avoir des images entièrement dessinées à l'affichage)*/
- glutSwapBuffers();
-
- }
-
- //--fonction pour le redimensionnement--//
- void reshape(int w, int h)
- {
- /*Definit un rectangle de pixels dans laquelle l'image finale sera placée.
- Les 2 premiers paramètres sont les coordonnées de l'angle inférieur gauche du cadrage
- et les 2 derniers spécifient sa longueur et sa largeur*/
- glViewport(0, 0, (GLsizei) w, (GLsizei) h);
-
- //on se met en mode projection (matrice projection)
- glMatrixMode(GL_PROJECTION);
-
- //on positionne la matrice actuellement modifiable sur la matrice d'identité
- glLoadIdentity();
-
- /*on crée une matrice pour un volume visionné parallèle en perspective cavalière
- et on multiplie la matrice active par celle-ci.*/
- glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
-
- /* On se place sur la matrice de visualisation de modèles
- */
- glMatrixMode(GL_MODELVIEW);
-
- //on positionne la matrice actuellement modifiable (matrice de visualisation) sur la matrice d'identité
- glLoadIdentity();
- }
-
- //--la fonction de rotation--//
- void spinDisplay(void)
- {
- //on tourne vers la droite
- spin += 2;
-
- //si le spin est plus grand que 360 degrés...
- if (spin > 360)
-
- //...on enlève 360 pour que se soit un angle normal
- spin-=360.0;
-
- //fonction permettant de raffraichir l'image avec les changements
- glutPostRedisplay();
- }
-
-
- //--fonction de gestion de la souris--//
- void mouse(int button, int state, int x, int y)
- {
- /*on regarde quel bouton est appuyé*/
- switch(button)
- {
- //si il y a un evenement concernant le bouton gauche...
- case GLUT_LEFT_BUTTON:
-
- //..et si cet evenement est un clic...
- if (state == GLUT_DOWN)
-
- //on fait tourner le carré vers la droite grace a la fonction spinDisplay()
- glutIdleFunc(spinDisplay);
- break;
-
-
- //si il y a un evenement concernant le bouton du centre...
- case GLUT_RIGHT_BUTTON:
-
- //..et si cet evenement est un clic...
- if (state == GLUT_DOWN)
-
- //on arrete de faire touner le carré, c'est à dire que la fonction de callback (de rappel)
- // spinDisplay est annulée (on arrete de la rappeler)
- glutIdleFunc(NULL);
- break;
-
- }
- }
-
-
-
- //////////////////////////// LA MAIN ///////////////////////////////////////
-
- int main(int argc, char **argv)
- {
- //on initialise glut
- glutInit(&argc, argv);
-
- //on spécifie l'emploi du modèle chromatique et du double tampon
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
-
- //on spécifie la taille de la fenêtre
- glutInitWindowSize(250, 250);
-
- //on spécifie la position de la fenêtre
- glutInitWindowPosition(100, 100);
-
- //on crée une fenêtre
- glutCreateWindow(argv[0]);
-
- //on initialise
- init();
-
- ////////////// FONCTIONS DE CALLBACKS ////////////////////////
-
- //
- // Les fonctions de callbacks sont des fonctions que le programmeur va spécifier pour
- // la lier à un événement (clic, touche appuyée, redimensionnement, etc).
- //
-
- //on fait une fonction d'affichage de la scène
- glutDisplayFunc(display);
-
- //on fait une fonction de redimensionnement
- glutReshapeFunc(reshape);
-
- //on fait une fonction pour la souris
- glutMouseFunc(mouse);
-
- // boucle infinie d'affichage
- glutMainLoop();
-
- return 0;
- }
/*
Name: tutorialAnimation
Author: Algex
Date: 18/06/06 13:24
Description: un petit tuto pour l'apprentissage d'OpenGL avec GLUT
*/
/////////////////////////// LES INCLUDES ////////////////////////////////////////////////////////
//
//
#include <stdio.h> //
#include <stdlib.h> //
//
#include <windows.h>/*Microsoft Windows requiert l'insertion de windows.h juste avant gl.h et glu.h //
car certaines macros utilisées en internes dans la version Microsoft Windows de gl.h et glu.h sont //
définies dans windows.h*/ //
//
#include <GL/glut.h>//GL/glut.h contient déjà gl.h et glu.h mais bon c'est juste pour vous montrer //
//
///////////////////////////////////////////////////////////////////////////////////////////////////////
//on crée une variable globale qui va nous servir pour la rotation
static GLfloat spin = 0.0;
///////////////////////////// LES FONCIONS /////////////////////////////////////////////////////////
//--Fonction d'initialisation d'OpenGL--//
void init(void)
{
/*routine permettant de définir la couleur de vidage qui prend comme paramètre les composants
rouge, vert, bleu de la couleur plus la valeur alpha. En l'occurence, nous mettons un fond noir non transparent*/
glClearColor(0.0, 0.0, 0.0, 0.0);
/*routine qui définit le modèle de degradé (lissé ou pas), le paramètre peut prendre la valeur GL_SMOOTH(valeur par défaut)
ou GL_FLAT*/
glShadeModel(GL_FLAT);
}
//--fonction d'affichage--//
void display(void)
{
/*on attribut aux tampons spécifiés leur valeur de vidage en cours*/
glClear(GL_COLOR_BUFFER_BIT);
/*On fait descendre d'un niveau les matrices de tranformation*/
glPushMatrix();
/*on fait une rotation pour tout ce qui suit en utilisant le spin avec la fonction glRotate*(). la lettre f
veut dire que le nombre sera un float*/
glRotatef(spin, 0.0, 0.0, 1.0);
/*on fait une couleur pour tout ce qui suit avec la fonction glColor*(). la nombre 3 veut dire
que la fonction prendra 3 paramètre et la lettre f veut dire que ce sont des nombres float (les trois paramètres sont
les composants rouge, vert et bleu de la couleur)*/
glColor3f(1.0, 1.0, 1.0);
/*on crée un rectangle*/
glRectf(-25.0, -25.0, 25.0, 25.0);
/*on rejette la matrice de la pile, ce qui en détruit le contenu (toutes les modifications apportées précédemment sont annulées)*/
glPopMatrix();
/*on échange les tampons grâce à GLUT (un tampons est affiché pendant que l'autre se forme ce qui permet
d'avoir des images entièrement dessinées à l'affichage)*/
glutSwapBuffers();
}
//--fonction pour le redimensionnement--//
void reshape(int w, int h)
{
/*Definit un rectangle de pixels dans laquelle l'image finale sera placée.
Les 2 premiers paramètres sont les coordonnées de l'angle inférieur gauche du cadrage
et les 2 derniers spécifient sa longueur et sa largeur*/
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
//on se met en mode projection (matrice projection)
glMatrixMode(GL_PROJECTION);
//on positionne la matrice actuellement modifiable sur la matrice d'identité
glLoadIdentity();
/*on crée une matrice pour un volume visionné parallèle en perspective cavalière
et on multiplie la matrice active par celle-ci.*/
glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
/* On se place sur la matrice de visualisation de modèles
*/
glMatrixMode(GL_MODELVIEW);
//on positionne la matrice actuellement modifiable (matrice de visualisation) sur la matrice d'identité
glLoadIdentity();
}
//--la fonction de rotation--//
void spinDisplay(void)
{
//on tourne vers la droite
spin += 2;
//si le spin est plus grand que 360 degrés...
if (spin > 360)
//...on enlève 360 pour que se soit un angle normal
spin-=360.0;
//fonction permettant de raffraichir l'image avec les changements
glutPostRedisplay();
}
//--fonction de gestion de la souris--//
void mouse(int button, int state, int x, int y)
{
/*on regarde quel bouton est appuyé*/
switch(button)
{
//si il y a un evenement concernant le bouton gauche...
case GLUT_LEFT_BUTTON:
//..et si cet evenement est un clic...
if (state == GLUT_DOWN)
//on fait tourner le carré vers la droite grace a la fonction spinDisplay()
glutIdleFunc(spinDisplay);
break;
//si il y a un evenement concernant le bouton du centre...
case GLUT_RIGHT_BUTTON:
//..et si cet evenement est un clic...
if (state == GLUT_DOWN)
//on arrete de faire touner le carré, c'est à dire que la fonction de callback (de rappel)
// spinDisplay est annulée (on arrete de la rappeler)
glutIdleFunc(NULL);
break;
}
}
//////////////////////////// LA MAIN ///////////////////////////////////////
int main(int argc, char **argv)
{
//on initialise glut
glutInit(&argc, argv);
//on spécifie l'emploi du modèle chromatique et du double tampon
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
//on spécifie la taille de la fenêtre
glutInitWindowSize(250, 250);
//on spécifie la position de la fenêtre
glutInitWindowPosition(100, 100);
//on crée une fenêtre
glutCreateWindow(argv[0]);
//on initialise
init();
////////////// FONCTIONS DE CALLBACKS ////////////////////////
//
// Les fonctions de callbacks sont des fonctions que le programmeur va spécifier pour
// la lier à un événement (clic, touche appuyée, redimensionnement, etc).
//
//on fait une fonction d'affichage de la scène
glutDisplayFunc(display);
//on fait une fonction de redimensionnement
glutReshapeFunc(reshape);
//on fait une fonction pour la souris
glutMouseFunc(mouse);
// boucle infinie d'affichage
glutMainLoop();
return 0;
}
Historique
- 28 avril 2008 12:13:56 :
- 28/04/08 - Rajout de commentaires et changement de glViewport et glutCreateWindow
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
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
URGENT : Cherche tutorial OpenGL [ par dominiquox ]
Salut à tous les programmeurs en herbe ...Est-ce qu'il faut connaitre impérativement le C++ sous Win32 pour Faire de l'OpenGL ?Si oui, Est ce que qq p
tutorial ou code GLUT [ par francky ]
SALUT,je débute avec dev c, et j'aimerais créer une interface portable aussi bien sous window que sous linux;mon probleme: j'ai bien trouver glui, mai
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.
Objects 3D Opengl [ par mastave ]
Comment inclure dans un fenêtre OpenGl un fichier 3D DXF ou3DS???
Moteur 3d OpenGL [ par Stormy ]
Salut. Je recherche des personnes motives pour travailler sur un moteur 3d sous OpenGL. Les bases sont deja etablies (Detection de collisions, sons, m
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
|
Derniers Blogs
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 [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
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 COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|