Consulter le tutorial qui se trouve ici
Voici un exemple d'affichage d'un rectangle vert en bas d'une fenêtre, avec les commentaires du programme.
(On trouvera en bas de page une fonction nous permettant de dessiner un quadrilatère à partir des fonctions openGL)
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
#define WIDTH 640 // Taille de la fenêtre
#define HEIGHT 480
float fTtrot=0.1; // Largeur du rectangle en pourcentage de la taille totale de la fenêtre
void vDisplay();
void vReshape();
int main( int argc, char *argv[ ])
{
glutInit(&argc,argv); // initialisation de GLUT : argc et argv sont respectivement
// le nombre et la liste des paramètres passées en ligne de commande
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); // GLUT_RGBA mode "vraies couleurs" 32 bits
// GLUT_SINGLE "simple buffering" - un seul tampon
// Modes par défaut
glutInitWindowSize(WIDTH,HEIGHT); // Initialisation de la largeur et de la hauteur de la fenêtre
glutInitWindowPosition(50,50); // Position de la fenêtre sur l'écran par rapport au coin haut gauche
glutCreateWindow("Exemple"); // Titre de la fenêtre
glutDisplayFunc(vDisplay); // précise la fonction à utiliser pour l'affichage
glutReshapeFunc(vReshape); // précise la fonction à utiliser pour le redimensionnement
glutMainLoop(); // lance le gestionnaire glut
return 0;
}
void vDisplay()
{
glClearColor(0,0,0,0); // sélectionne la couleur noire (qui est celle par défaut)
glClear(GL_COLOR_BUFFER_BIT); // efface le frame buffer
glBegin(GL_QUADS); //commence le dessin d'un quadrilatère
glColor3d(0.5,1,0.5); // rectangle de couleur verte
glVertex2d(-WIDTH/2,-HEIGHT/2); //coordonnées du premier sommet
glVertex2d(WIDTH/2,-HEIGHT/2);
glVertex2d(WIDTH/2,-(HEIGHT/2-fTtrot*HEIGHT));
glVertex2d(-WIDTH/2,-(HEIGHT/2-fTtrot*HEIGHT)); // Ordre de sommets : sens trigonométrique
glEnd();
glFlush();
}
void vReshape(int w, int h)
{
float L;
float H;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION); // Choisit la matrice de projection
glLoadIdentity();
if (w<=h)
{
if (w==0) H=HEIGHT;
else H=(GLfloat) (WIDTH*h/w);
L=WIDTH;
}
else
{
H=HEIGHT;
if (h==0) L=WIDTH;
else L=(GLfloat) (HEIGHT*w/h);
}
gluOrtho2D(-L/2,L/2,-H/2,H/2);
}