Fractale tree (arbre) version glut

Contenu du snippet

Programme permettant de générer la fractale tree avec affichage graphique (Librairie Glut).
N'hésitez pas à mettre des commentaires.
Pour ceux qui utilisent Dev-Cpp comme moi, n'oublier pas de mettre dans projet=>Options du Projets=>Paramètres=>éditeur de liens:
-lopengl32
-lglut32
-lglu32

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>

#define drand48 1.0/RAND_MAX*rand 
#define srand48 srand    
#define max 30000		/* nombre d'iterations */
#define seed 68111

void display();
void keyboard(unsigned char key, int x, int y);

int main(int argc, char** argv)
{
/* initialisation GLUT */
 glutInit(&argc,argv);
 /* ModeRGB */
 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);    
 /* Taille de la fenêtre */ 
 glutInitWindowSize(300,300);       
 /* Position fenêtre */              
 glutInitWindowPosition(0,0);   
 /* Titre fenêtre */    
 glutCreateWindow("Tree Fractale");
 /* Enregistrements des callbacks */                
 glutDisplayFunc(display);         
 glutKeyboardFunc(keyboard);                        

/* Couleurs de fond noir */
 glClearColor(0.0, 0.0, 0.0, 0.0);  
 /* Tracé en vert */                  
 glColor3f(0.0, 1.0, 0.0);   
 /* activation de la matrice de projection */                          
 glMatrixMode(GL_PROJECTION);     
 /* Réinitialisation de la matrice de transformation */
 glLoadIdentity();    
 /* Rotation autour de l'axe x */          
 glRotatef(0.0,0.1,0.0,0.0);  
 /* visualisation de la matrice */                  
 gluOrtho2D(-1.0, 1.0, 0.0, 2.5);
 glMatrixMode(GL_MODELVIEW);                      

/* Boucle principale */
 glutMainLoop();                                      
 return 0;
}

void display( void )
{
     int i;
   GLfloat x,y,r,xn,yn;
   /* Efface la fenêtre */
   glClear(GL_COLOR_BUFFER_BIT);                         
   srand48(seed);		
   
   x     = 0.5f;  /*position initiale */
   y     = 0.0f;
   for(i=1 ; i<=max; i++)
   {
      r = drand48();
      if (r<=0.1)
      { 
         xn = 0.05*x;
         yn = 0.6*y;
      }
      else if((r>0.1) && (r<0.2))
      { 
         xn  = 0.05*x;
         yn  = -0.5*y+1.0;
      }
      else if ((r>0.2) && (r<0.4))
      {
         xn  = 0.46*x-0.32*y;
         yn  = 0.39*x+0.38*y+0.6;
      }  
      else if((r>0.4) && (r<0.6))
      {
         xn  = 0.47*x-0.15*y;
         yn  = 0.17*x+0.42*y+1.1;
      }
      else if ((r>0.6) && (r<0.8))
      {
         xn  = 0.43*x+0.28*y;
         yn  = -0.25*x+0.45*y+1.0;
      }  
      else 
      {
         xn  = 0.42*x+0.26*y;
         yn  = -0.35*x+0.31*y+0.7;
      }  
     
      glBegin(GL_POINTS);
      glVertex2f(xn,yn);
      x = xn;
      y = yn;
     glEnd();
    }
 glFlush(); /* Efface les buffers */
}
void keyboard(unsigned char key, int x, int y)
{
 exit(0); /* Appuyer sur une touche pour sortir */
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.