codice:
# include <windows.h>
# include <stdlib.h>
# include <gl/glut.h>
# include <gl/gl.h>
# include <gl/glu.h>
GLfloat rtri=0;
GLfloat rquad=0;
void aggiorna (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(100.0, (GLfloat) w/(GLfloat) h, 0.10, 100.0);
glMatrixMode(GL_MODELVIEW);
}
void rotazione(void)
{
rtri+=0.2f;
rquad+=0.15f;
glutPostRedisplay();
}
void disegna (void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt ( 0.0, 0.0, 1.0,
0.0, 0.0, -1.0,
0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(-0.5f,0.0f,-1.0f); // Muove a sinistra di 1.5 unità e dentro lo schermo di 1.0 unità
glRotatef(rtri,0.0f,1.0f,0.0f); // Ruota il triangolo sull'asse Y ( NUOVA )
glBegin(GL_TRIANGLES); // Disegna usando i triangoli
glColor3f(0.0,1.0,0.0);
glVertex3f( 0.0f, 0.4f, 0.0f);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-0.4f,-0.4f, 0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 0.4f,-0.4f, 0.0f);
glEnd(); // Finisce di disegnare il triangolo
glPopMatrix();
glPushMatrix();
glTranslatef(0.4f,0.0f,0.0f); // Muove a destra di 1 unità
glRotatef(rquad,0.0f,1.0f,0.0f); // Ruota il quadrato sull'asse X ( NUOVA )
glBegin(GL_QUADS); // Disegna un quadrato
glVertex3f(-0.4f, 0.4f, 0.0f); // Superiore sinistro
glVertex3f( 0.4f, 0.4f, 0.0f); // Superiore destro
glVertex3f( 0.4f,-0.4f, 0.0f); // Inferiore destro
glVertex3f(-0.4f,-0.4f, 0.0f); // Inferiore sinistro
glEnd(); // Finisce di disegnare il quadrato
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(100,150);
glutCreateWindow("Prove con OpenGL");
glutDisplayFunc(disegna);
glutIdleFunc(rotazione); //richiama l'animazione, facendo ruotare le figure
glutReshapeFunc(aggiorna);
glutMainLoop();
return 0;
}
Tutto questo grazie anche all'aiuto del buon anx