Il programma elencato di seguito crea una semplice animazione realizzata utilizzando le funzioni OpenGL.
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdlib.h>
static GLfloat spinta = 1.0;
void inizia(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void mostra(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(spinta, 0.0, 0.0, 1.0);
glColor3f(0.0, 0.0, 1.0);
glRectf(-25.0, -25.0, 25.0, 25.0);
glPopMatrix();
glutSwapBuffers();
}
void spinMostra(void)
{
spinta = spinta + 2.0;
if (spinta > 360.0)
spinta = spinta - 360.0;
glutPostRedisplay();
}
void ridisegna(int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void topo(int bottone, int stato, int x, int y)
{
switch (bottone) {
case GLUT_LEFT_BUTTON:
if (stato == GLUT_DOWN)
glutIdleFunc(spinMostra);
break;
case GLUT_MIDDLE_BUTTON:
if (stato == GLUT_DOWN)
glutIdleFunc(NULL);
break;
default:
break;
}
}
/*
* funzioni di doppio buffer immagine
* funzioni che registrano lo stato del mouse
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (300, 300);
glutInitWindowPosition (125, 125);
glutCreateWindow (argv[0]);
inizia ();
glutDisplayFunc(mostra);
glutReshapeFunc(ridisegna);
glutMouseFunc(topo);
glutMainLoop();
return 0;
}
Nessun commento:
Posta un commento