Mini projet de programmation en langage C
Mini projet de programmation en langage C
Cet article propose en détaille un mini projet de programmation en langage C pour la réalisation d’un Sphère GLU et Cube.
Vous pourrez télécharger le fichier au format zip il contient le code sources complet.
Extrait du code :
#include <windows.h> // Fichier d'en-tête pour Windows
#include <gl\gl.h> // Fichier d'en-tête pour la bibliothèque OpenGL32
#include <gl\glu.h> // Fichier d'en-tête pour la bibliothèque GLu32
#include "NeHeGL.h" // Fichier d'en-tête pour NeHeGL
#include <math.h> // Pour sin et cos, etc.
#pragma comment( lib, "opengl32.lib" ) // Rechercher OpenGL32.lib lors de la liaison
#pragma comment( lib, "glu32.lib" ) // Recherchez GLu32.lib lors de la liaison
#ifndef CDS_FULLSCREEN // CDS_FULLSCREEN n'est pas défini par certains
#define CDS_FULLSCREEN 4 // compilateurs. En le définissant de cette façon,
#endif // nous pouvons éviter les erreurs
GL_Window* g_window;
Keys* g_keys;
// Variables définies par l'utilisateur
GLfloat xrot; // Rotation X
GLfloat yrot; // Rotation Y
GLfloat zrot; // Rotation Z
BOOL Initialize (GL_Window* window, Keys* keys) // Tout code d'initialisation GL et initialisation de
// l'utilisateur vont ici
{
g_window = window;
g_keys = keys;
// Début de l'initialisation de l'utilisateur
glClearColor (0.0f, 0.0f, 0.0f, 0.5f); // Fond noir
glClearDepth (1.0f); // Configuration du tampon de profondeur
glDepthFunc (GL_LEQUAL); // Le type de test de profondeur (inférieur ou égal)
glEnable (GL_DEPTH_TEST); // Activer le test de profondeur
glShadeModel (GL_SMOOTH); // Sélectionnez Smooth Shading
glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Définir les calculs de perspective les plus précis
return TRUE; // Renvoie TRUE (initialisation réussie)
}
void Deinitialize (void) // Tout DeInitialization de utilisateur va ici
{
}
void Update (DWORD milliseconds) // Effectuer des mises à jour de mouvement ici
{
if (g_keys->keyDown [VK_ESCAPE]) // Est-ce que Échap est pressé?
TerminateApplication (g_window); // Terminer le programme
if (g_keys->keyDown [VK_F1]) // Est ce que F1 a été pressée?
ToggleFullscreen (g_window); // Basculer en mode plein écran
}
void Draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Éfface l'affichage et le tampon de profondeur
//********************************************************************************************************************************
// ...Le code de rendu va ici...
// Code pour une sphère:
glLoadIdentity(); // Réinitialiser la matrice Modelview
glTranslatef(0.0f, 0.0f, -5.0f); // Déplacez x et y de 0.0 unités et -5.0 unités dans l'écran
glColor3f(1.0f, 1.0f, 0.0f); // Couleur Jaune pour la Sphère
GLUquadricObj *quadric = NULL;
quadric = gluNewQuadric();
gluQuadricDrawStyle(quadric, GLU_FILL); // Polygones remplis
gluQuadricNormals(quadric, GLU_SMOOTH); // Mélange lisse et normal (style Gouraud)
gluQuadricOrientation(quadric, GLU_OUTSIDE); // Normales vers l'extérieur
gluSphere(quadric, 1.3, 50, 50); // Sphère GLU
gluDeleteQuadric(quadric);
glEnd(); // Terminé de dessiner la Sphère
// Code pour un Cube
glLoadIdentity(); // Réinitialiser la matrice Modelview
glTranslatef(0.0f, 0.0f, -5.0f); // Déplacez x et y de 0.0 unités et -5.0 unités dans l'écran
glRotatef(45.0, 1.0, 0.0, 0.0); // Rotation de 45° sur l'axe des X
glRotatef(45.0, 0.0, 1.0, 0.0); // Rotation de 45° sur l'axe des Y
glBegin(GL_QUADS); // Commencer à dessiner les quadrilatères
glColor3f(0.0f, 1.0f, 0.0f); // Couleur: Vert
glVertex3f(1.0f, 1.0f, -1.0f); // Quad Haut: Point en haut à droite
glVertex3f(-1.0f, 1.0f, -1.0f); // Quad Haut: Point en haut à gauche
glVertex3f(-1.0f, 1.0f, 1.0f); // Quad Haut: Point en bas à gauche
glVertex3f(1.0f, 1.0f, 1.0f); // Quad Haut: Point en bas à droite
glColor3f(1.0f, 0.5f, 0.0f); // Couleur: Orange
glVertex3f(1.0f, -1.0f, 1.0f); // Quad Bas: Point en haut à droite
glVertex3f(-1.0f, -1.0f, 1.0f); // Quad Bas: Point en haut à gauche
glVertex3f(-1.0f, -1.0f, -1.0f); // Quad Bas: Point en bas à gauche
glVertex3f(1.0f, -1.0f, -1.0f); // Quad Bas: Point en bas à droite
glColor3f(1.0f, 0.0f, 0.0f); // Couleur: Rouge
glVertex3f(1.0f, 1.0f, 1.0f); // Quad Façade: Point en haut à droite
glVertex3f(-1.0f, 1.0f, 1.0f); // Quad Façade: Point en haut à gauche
glVertex3f(-1.0f, -1.0f, 1.0f); // Quad Façade: Point en bas à gauche
glVertex3f(1.0f, -1.0f, 1.0f); // Quad Façade: Point en bas à droite
glColor3f(0.60f, 0.40f, 0.12f); // Couleur: Brun
glVertex3f(1.0f, -1.0f, -1.0f); // Quad Arrière:Point en haut à droite
glVertex3f(-1.0f, -1.0f, -1.0f); // Quad Arrière:Point en haut à gauche
glVertex3f(-1.0f, 1.0f, -1.0f); // Quad Arrière:Point en bas à gauche
glVertex3f(1.0f, 1.0f, -1.0f); // Quad Arrière:Point en bas à droite
glColor3f(0.0f, 0.0f, 1.0f); // Couleur: Bleu
glVertex3f(-1.0f, 1.0f, 1.0f); // Quad Gauche: Point en haut à droite
glVertex3f(-1.0f, 1.0f, -1.0f); // Quad Gauche: Point en haut à gauche
glVertex3f(-1.0f, -1.0f, -1.0f); // Quad Gauche: Point en bas à gauche
glVertex3f(-1.0f, -1.0f, 1.0f); // Quad Gauche: Point en bas à droite
glColor3f(1.0f, 0.0f, 1.0f); // Couleur: Violet
glVertex3f(1.0f, 1.0f, -1.0f); // Quad Droit: Point en haut à droite
glVertex3f(1.0f, 1.0f, 1.0f); // Quad Droit: Point en haut à gauche
glVertex3f(1.0f, -1.0f, 1.0f); // Quad Droit: Point en bas à gauche
glVertex3f(1.0f, -1.0f, -1.0f); // Quad Droit: Point en bas à droite
glEnd(); // Terminé de dessiner les quadrilatères
// La cube moins la sphère = un cube avec un trou au centre de chaque face
glFlush (); // glFlush du pipeline de rendu GL
}