Come creare un cerchio partendo da triangoli con OpenGL

October 19, 2012

In questo articolo vorrei spiegare uno degli ultimi esercizi su OpenGL che ho fatto, l’esercizio tratta della creazione di un cerchio partendo però da forme geometriche elementari quali i triangoli.

Per prima cosa includiamo le librerie, nota bene queste librerie esistono per Mac, per Linux e per Windows.

1
2
3
4
5
6
#include <stdio.h>
#include "GLUT/glut.h"
#include "OPENGL/opengl.h"
#include<br />
<math.h>
#include <stdlib.h>

La funzione redraw è quella che viene lanciata dal main. Al suo interno creo un poligono chiamato triangle fan, questo deve avere tre o più vertici, il primo vertice sarà commune a tutti I triangoli creati.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void redraw(void){
  float inc =(2 * M_PI)/ 20.0;
  glPointSize(1.0);
  glClear(GL_COLOR_BUFFER_BIT);
  glBegin(GL_TRIANGLE_FAN);
  glColor3f(1.0, 1.0, 1.0);
  glVertex2f( 0&nbsp; , 0&nbsp; );
  for (float i=0; i < 2*M_PI+inc ; i=i+inc) {
    glColor3f(0.4, 0.2, 1.0);
    glVertex2f(&nbsp; sinf(i) , cosf(i));
  }
  glEnd();
  glFlush();
}

All’interno del ciclo for inserisco tanti vertici quanti me ne servono per descrivere una circonferenza con la precision desiderata, per aumentare la precisione è necessario diminuire il valore della variabile inc dividendola ulteriormente.

1
2
3
4
5
6
7
8
9
10
11
int main(int argc, const char * argv[])
{
  glutInit(&amp;argc, argv);
  glutInitDisplayMode(GLUT_RGB);
  glutInitWindowPosition(300, 300);
  glutInitWindowSize(550, 550);
  glutCreateWindow("Esercizio Cerchio");
  glClearColor(0.0, 0.0, 0.0, 1.0);
  glutDisplayFunc( redraw );
  glutMainLoop();
}

Nel Main creo la finestra, dichiaro il suo nome le sue dimensioni, dove deve essere posizionata ed il colore dello sfondo, poi richiamo la funzione redraw.

Ecco il risultato