Come creare un cerchio partendo da triangoli con OpenGL

Posted on October 19, 2012 · 3 mins read

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