Création d'une scène en deux dimensions

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);	
}


Nous avons créé une fonction nous permettant de dessiner un quadrilatère à partir des fonctions openGL :


void vQuadrilatere(float fRouge, float fVert, float fBleu, float fAx, float fAy, 
						float fBx, float fBy, float fCx, float fCy, float fDx, float fDy,
						float fHori, float fVerti)
{
	glBegin(GL_QUADS); // commence le dessin d'un quadrilatère
	glColor3d(fRouge,fVert,fBleu); // couleur du quadrilatère
	glVertex2d(fAx+fHori,fAy+fVerti); // coordonnées du premier sommet
	glVertex2d(fBx+fHori,fBy+fVerti);
	glVertex2d(fCx+fHori,fCy+fVerti);
	glVertex2d(fDx+fHori,fDy+fVerti); // Ordre des sommets : sens trigonométrique ou sens horaire (ne pas mélanger les sommets!!!)
	glEnd();
}